這篇文章帶大家了解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中文網其他相關文章!