技術共有|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を見つけて分析します.
    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タイプクリア方法
  • クエリslow query logオープンステータス
  • 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 |
    +---------------------+-------------------------------------+
  • slow query 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
  • slow query log
  • を再開
    mysql> set global slow_query_log=1;
  • SQL検証を実行
  • 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);
  • 古いslowlogファイル
  • をクリーンアップ
    mv /opt/mysql/data/3306/mysql-old-slow.log /mysqlback

    3.2 TABLEタイプクリア方法
  • slow query log
  • を先に閉じる
    mysql> set global slow_query_log=0;
  • クローズ成功確認
  • mysql> show variables like 'slow_query_log';
    +---------------------+-------------------------------------+
    | Variable_name       | Value                               |
    +---------------------+-------------------------------------+
    | slow_query_log      | OFF                                 |
    +---------------------+-------------------------------------+
  • TABLEタイプのslowlogはmysqlに保存する.slow_logテーブルでslow_logはold_と名前を変更しますslow_log
  • mysql> use mysql
    mysql> ALTER TABLE slow_log RENAME old_slow_log;
  • 新しいslowを作成logファイルコピー元slow_logファイルのテーブル構造
  • mysql> CREATE TABLE slow_log LIKE old_slow_log;
  • slow query 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
  • 古いslowを削除logテーブル
  • mysql> drop table old_slow_log;

    まとめ
    この文章は主にslow logの開き方、分析方法とクリア操作を述べ、分析slow logファイルを熟練して使用してデータベースSQLの実行状況をリアルタイムで観察し、SQLの最適化のために基礎を築くことができる.