この記事では、MySQL のスロー クエリを理解し、スロー クエリ ログを有効にする方法を紹介し、スロー クエリを分析する方法を説明します。
Mysql には長期クエリの遅い記録を記録できる機能があり、具体的な時間の長さは自分で設定できますが、遅いクエリは必ずしも悪い SQL であるわけではありません。また、他のクエリに影響を与えるか、システム リソースの制限によって引き起こされる、一般的に使用されるパフォーマンス分析ツールでもあります。 [関連する推奨事項: mysql ビデオ チュートリアル ]
MySQL のスロー クエリ ログは、long_query_time
と min_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
変数の値は次のとおりです:
mysql.general_log
テーブルに書き込み、一般的なクエリを書き込みます。テーブルへのクエリ mysql.slow_log
遅いクエリの作成。 また、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 サイトの他の関連記事を参照してください。