ホームページ  >  記事  >  データベース  >  MySQL でスロークエリログを有効にして分析するにはどうすればよいですか?

MySQL でスロークエリログを有効にして分析するにはどうすればよいですか?

青灯夜游
青灯夜游転載
2021-09-09 18:49:491918ブラウズ

この記事では、MySQL のスロー クエリを理解し、スロー クエリ ログを有効にする方法を紹介し、スロー クエリを分析する方法を説明します。

MySQL でスロークエリログを有効にして分析するにはどうすればよいですか?

Mysql には長期クエリの遅い記録を記録できる機能があり、具体的な時間の長さは自分で設定できますが、遅いクエリは必ずしも悪い SQL であるわけではありません。また、他のクエリに影響を与えるか、システム リソースの制限によって引き起こされる、一般的に使用されるパフォーマンス分析ツールでもあります。 [関連する推奨事項: mysql ビデオ チュートリアル ]

MySQL のスロー クエリ ログは、long_query_timemin_examined_row_limit によって制御されます。前者は、クエリにコストがかかるかどうかを意味します。この時間が秒数を超えると、スロー クエリ ログが有効になっている場合、MySQL サーバーはこれをスロー クエリ ログ ファイルに記録します。

スロー クエリ ログを有効にする

MySQL でスロー クエリ ログを有効にするには、以下の手順に従ってください:

まずスロー クエリを確認します。 MySQL へのログイン クエリのステータス。

MariaDB [(none)]> show variables like '%slow%';
+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+                                                                                           
| Variable_name                | Value                                                                                                                                |                                                                                           
+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+                                                                                           
| log_slow_admin_statements    | ON                                                                                                                                   |
| log_slow_disabled_statements | sp                                                                                                                                   |
| log_slow_filter              | admin,filesort,filesort_on_disk,filesort_priority_queue,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk |
| log_slow_rate_limit          | 1                                                                                                                                    |
| log_slow_slave_statements    | ON                                                                                                                                   |
| log_slow_verbosity           |                                                                                                                                      |
| slow_launch_time             | 2                                                                                                                                    |
| slow_query_log               | OFF                                                                                                                                  |
| slow_query_log_file          | hxl-slow.log                                                                                                                         |
+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------+
9 rows in set (0.001 sec)

まず、スロー クエリ ログが有効かどうかを表す slow_query_log のステータスを確認します。値は、無効にする場合は 0 または OFF、有効にする場合は 1 または ON です。ログ出力の宛先は、log_output システム変数によって制御されます。値が NONE の場合、スロー クエリ ログが有効になっている場合でも、ログはログに書き込まれません。 log_output 変数の値は次のとおりです:

  • TABLE: (デフォルト) 一般的なクエリを mysql.general_log テーブルに書き込み、一般的なクエリを書き込みます。テーブルへのクエリ mysql.slow_log 遅いクエリの作成。
  • FILE: 一般的なスロー クエリ ログをファイル システムに書き込みます。
  • NONE – ログ記録を無効にします。

また、general_log_file および slow_query_log_file 変数は、クエリ ログ ファイルとスロー クエリ ログ ファイルの名前を表します。これらの変数は、サーバーの起動時または実行時に設定できます。

スロー クエリ ログの開始

MySQL ではスロー クエリ ログ機能がデフォルトでオフになっているため、この機能をオンにするには、 を設定する必要があります。以下に示すように、slow_query_log を ON にします。

SET GLOBAL slow_query_log = 1;

記録期間を設定します

long_query_time変数は、以下に示すように、この値を超えた実行時間のみが記録されることを示します。時間を 5 秒に設定すると、デフォルトは 10 秒になり、最小値は 0 になります。

SET GLOBAL long_query_time = 5;

出力場所の変更

デフォルトでは、スロー クエリ ログ ファイルは /var/lib/mysql/hostname-slow.log# にあります。 ##、slow_query_log_file 変数を使用して別の場所を設定することもできます。

SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';

スロー クエリ ログをテーブルに書き込む

スロー クエリ ログは

slow_log テーブルに書き込むこともできます。その方法は次のとおりです。前述の log_output システム変数を TABLE に変更します。操作は次のとおりです:

SET GLOBAL log_output='TABLE';

スロー クエリ ログ関連の変数

分析慢查询

日志记录后,我们还需要分析这些日志,找出影响系统的查询,MySQL提供了一个名为mysqldumpslow的工具,可以简单的显示结果,只需要把日志路径传递给他即可,如下:

# mysqldumpslow -a mysql-slow.log

Reading mysql slow query log from mysql-slow.log
Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows_sent=21.0 (21), Rows_examined=21.0 (21), Rows_affected=0.0 (0), root[root]@localhost
  show databases

Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows_sent=2.0 (2), Rows_examined=2.0 (2), Rows_affected=0.0 (0), root[root]@localhost
  select * from users

Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows_sent=1.0 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost
  select @@version_comment limit 1

Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows_sent=1.0 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost

他的参数如下

  • -s ,按照什么方式起来排序。默认at,也就是按照平均查询时间来排序。都是按照倒序排列。

    al: average lock time 平均锁定时间

    ar: average rows sent 平均返回行数

    at: average query time 平均查询时间

    c: count 总执行次数

    l: lock time 总锁定时间

    r: rows sent 总返回行数

    t: query time 总查询时间

  • -t ,show the top n queries,显示前多少名的记录

  • -a ,默认不开启这个选项。mysqldumpslow将相似的SQL的值(字符串或者数字)替换为N,开启该选项,则显示真实值。不开启该选项,有点类似于Oracle的绑定变量的记录。\

  • -g ,类似于grep命令,过滤出需要的信息。如,只查询A表的慢查询记录。\

  • -l ,总时间中包含锁定时间

原文地址:https://juejin.cn/post/6993221989175394311

更多编程相关知识,请访问:编程视频!!

以上がMySQL でスロークエリログを有効にして分析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。