技術共有|Slow Query Log使用詳細
6529 ワード
著者:宓祥康愛可生交付サービス部チームDBAはログ分析、問題調査などを得意とする.主にMySQLと我が社の自研データベースの自動化管理プラットフォームDMPの日常運行とメンテナンスの問題を処理して、データベースと周辺の技術に対して濃厚な学習の興味があります.オリジナル投稿愛可生開源コミュニティ出品、オリジナルコンテンツは許可を得ずに勝手に使用できません.転載は編集者に連絡し、ソースを明記してください.
引用する Slow Query Logとは? はどのように使用しますか? その存在は、次元データベースの運用にどのような役立ちますか?
一、紹介
遅いクエリー・ログを開きます.パラメータを使用して、実行またはクエリー時間の長いSQL、全テーブルスキャンのSQL、インデックスを使用していないSQLを制御できます.そうですね.データベースを遅くするSQLを記録し、捕まえるのが役に立ちます.
一般的には、slowのオンと記録を次のパラメータで制御します.slow_query_log、slow_query_log_file、long_query_time、min_examined_row_limit、log_output、log_queries_not_using_indexes、log_throttle_queries_not_using_indexes. slow_query_log:制御slow_query_logがオンか、パラメータON|OFF slow_query_log_file:ファイルの書き込み位置を制御し、パラメータはファイルの具体的な位置、例えば:/data/slow.log long_query_time:SQLの実行時間が何秒以上(マイクロ秒まで正確に)設定されているかをログに記録する min_examined_row_limit:チェックされたローの数がどれだけ大きいかを設定すると、ログに記録されます. log_output:スロークエリーレコードをどこに設定するか、パラメータFILE|TABLE log_queries_not_using_indexes:クエリー中にインデックスまたは全テーブルスキャンを使用しないSQLがログに記録されるかどうかを制御します. log_throttle_queries_not_using_indexes:log_を開くqueries_not_using_indexesの後、このパラメータは毎分遅いクエリー・ログに書き込むことができるクエリーの数を制限し、パラメータは0に設定して を制限しません.
二、表示方式と内容分析
スロー・ログ分析の方法は2つあります.スロー・ログ・ファイルは一般的に小さいため、スロー・ログ・ファイルでlessまたはmoreコマンドを直接使用して表示する方法があります.2つ目の方法は、MySQLの公式提供プログラム:mysqldumpslowを使用して、slowlogログに記録されている遅いSQLをすばやく表示することです.
私たちが詳しくSQLを分析する場合、一般的には第1の方法を採用し、対応する時点の対応するSQLを見つけて分析します.
では、スローログの中のこれらの情報をどのように読むのでしょうか.
これらにより、SQLがどのくらいの時間クエリーを実行しているのか、ロック待ちが発生しているのか、このクエリーが実際にデータベースで何行のデータを読み込んだのかを明確に知ることができます.
三、どのようにオンラインで安全にslowをクリアします.logファイル
log_を開くqueries_not_using_indexes後、slow logファイルは遅いクエリーログを記録するだけでなく、クエリー中にインデックスや全テーブルスキャンを使用していないSQLをログに記録し、長い間ログの空間がますます大きくなります.では、どのようにしてオンラインで安全にこれらのslowログをクリアし、ディスクのために空間を解放しますか?
MySQLはスローログの出力方式に対して2種類をサポートし、TABLEとFILE、表示方法は以下の通りである:
出力方式が明確であることを確認した上で,それぞれ異なる出力方式に対して異なるクリア方法を選択することができ,今回は2つのクリア方法について共同で紹介する.
3.1 FILEタイプクリア方法クエリslow query logオープンステータス slow query log を閉じるクローズ成功確認 ログの名前変更または削除 slow query log を再開 SQL検証を実行 新生成ファイルレコードの検証に成功しました 古いslowlogファイル をクリーンアップ
3.2 TABLEタイプクリア方法 slow query log を先に閉じるクローズ成功確認 TABLEタイプのslowlogはmysqlに保存する.slow_logテーブルでslow_logはold_と名前を変更しますslow_log 新しいslowを作成logファイルコピー元slow_logファイルのテーブル構造 slow query log を起動テスト検証 古いslowを削除logテーブル
まとめ
この文章は主にslow logの開き方、分析方法とクリア操作を述べ、分析slow logファイルを熟練して使用してデータベースSQLの実行状況をリアルタイムで観察し、SQLの最適化のために基礎を築くことができる.
引用する
一、紹介
遅いクエリー・ログを開きます.パラメータを使用して、実行またはクエリー時間の長いSQL、全テーブルスキャンのSQL、インデックスを使用していないSQLを制御できます.そうですね.データベースを遅くするSQLを記録し、捕まえるのが役に立ちます.
一般的には、slowのオンと記録を次のパラメータで制御します.slow_query_log、slow_query_log_file、long_query_time、min_examined_row_limit、log_output、log_queries_not_using_indexes、log_throttle_queries_not_using_indexes.
二、表示方式と内容分析
スロー・ログ分析の方法は2つあります.スロー・ログ・ファイルは一般的に小さいため、スロー・ログ・ファイルでlessまたはmoreコマンドを直接使用して表示する方法があります.2つ目の方法は、MySQLの公式提供プログラム:mysqldumpslowを使用して、slowlogログに記録されている遅いSQLをすばやく表示することです.
私たちが詳しくSQLを分析する場合、一般的には第1の方法を採用し、対応する時点の対応するSQLを見つけて分析します.
show master status;
# Time: 2020-11-16T08:27:16.777259+08:00
# User@Host: root[root] @ [127.0.0.1] Id: 248
# Query_time: 15.293745 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0
SET timestamp=1605486436;
では、スローログの中のこれらの情報をどのように読むのでしょうか.
show master status # SQL
Time # SQL
query_time # SQL ( MySQL SQL query_time, Oracle select)
lock_time: #
rows_sent: # ,
rows_examined: # SQL
SET timestamp #
これらにより、SQLがどのくらいの時間クエリーを実行しているのか、ロック待ちが発生しているのか、このクエリーが実際にデータベースで何行のデータを読み込んだのかを明確に知ることができます.
三、どのようにオンラインで安全にslowをクリアします.logファイル
log_を開くqueries_not_using_indexes後、slow logファイルは遅いクエリーログを記録するだけでなく、クエリー中にインデックスや全テーブルスキャンを使用していないSQLをログに記録し、長い間ログの空間がますます大きくなります.では、どのようにしてオンラインで安全にこれらのslowログをクリアし、ディスクのために空間を解放しますか?
MySQLはスローログの出力方式に対して2種類をサポートし、TABLEとFILE、表示方法は以下の通りである:
mysql> show variables like '%log_output%';
+---------------+------------+
| Variable_name | Value |
+---------------+------------+
| log_output | FILE,TABLE |
+---------------+------------+
出力方式が明確であることを確認した上で,それぞれ異なる出力方式に対して異なるクリア方法を選択することができ,今回は2つのクリア方法について共同で紹介する.
3.1 FILEタイプクリア方法
mysql> show variables like '%slow_query_log%';
+---------------------+-------------------------------------+
| Variable_name | Value |
+---------------------+-------------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /opt/mysql/data/3306/mysql-slow.log |
+---------------------+-------------------------------------+
mysql> set global slow_query_log=0;
mysql> show variables like '%slow_query_log%';
+---------------------+-------------------------------------+
| Variable_name | Value |
+---------------------+-------------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /opt/mysql/data/3306/mysql-slow.log |
+---------------------+-------------------------------------+
mv /opt/mysql/data/3306/mysql-slow.log /opt/mysql/data/3306/mysql-old-slow.log
mysql> set global slow_query_log=1;
mysql> select sleep(5);
+----------+
| sleep(5) |
+----------+
| 0 |
+----------+
cat /opt/mysql/data/3306/mysql-slow.log
[root@DMP1 3306]# cat mysql-slow.log
/opt/mysql/base/5.7.31/bin/mysqld, Version: 5.7.31-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306 Unix socket: /opt/mysql/data/3306/mysqld.sock
Time Id Command Argument
# Time: 2021-01-05T13:26:44.001647+08:00
# User@Host: root[root] @ localhost [] Id: 81786
# Query_time: 5.000397 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1609824404;
select sleep(5);
mv /opt/mysql/data/3306/mysql-old-slow.log /mysqlback
3.2 TABLEタイプクリア方法
mysql> set global slow_query_log=0;
mysql> show variables like 'slow_query_log';
+---------------------+-------------------------------------+
| Variable_name | Value |
+---------------------+-------------------------------------+
| slow_query_log | OFF |
+---------------------+-------------------------------------+
mysql> use mysql
mysql> ALTER TABLE slow_log RENAME old_slow_log;
mysql> CREATE TABLE slow_log LIKE old_slow_log;
mysql> SET GLOBAL slow_query_log = 1;
mysql> select sleep(5);
+----------+
| sleep(5) |
+----------+
| 0 |
+----------+
mysql> select * from slow_log \G
*************************** 1. row ***************************
start_time: 2021-01-05 13:49:13.864002
user_host: root[root] @ localhost []
query_time: 00:00:05.000322
lock_time: 00:00:00.000000
rows_sent: 1
rows_examined: 0
db: mysql
last_insert_id: 0
insert_id: 0
server_id: 874143039
sql_text: select sleep(5)
thread_id: 339487
mysql> drop table old_slow_log;
まとめ
この文章は主にslow logの開き方、分析方法とクリア操作を述べ、分析slow logファイルを熟練して使用してデータベースSQLの実行状況をリアルタイムで観察し、SQLの最適化のために基礎を築くことができる.