應用背景:
MySQL慢查詢日志功能默認是關閉的,通過開啟慢查詢日志,可以讓MySQL記錄下查詢超過指定時間的語句,再通過分析定位問題瓶頸,優化查詢提高數據庫系統的性能。
測試環境:
centos7.4 / mysql5.6.40
參數說明:
slow_query_log: ON | OFF,開啟或關閉慢查詢功能;
slow_query_log_file: /PATH/TO/LOG_FILE,某指定路徑下的文件;
long_query_time: TIME(單位:秒,默認10秒),查詢語句執行后超過多少秒后就記錄到慢查詢日志中;
具體操作:
先查看一下相關參數
mysql> show variables like 'slow_query%'; +---------------------+-----------------------------------+ | Variable_name | Value | +---------------------+-----------------------------------+ | slow_query_log | OFF | | slow_query_log_file | /var/lib/mysql/server-10-slow.log | //名字格式:一般為“主機名-slow.log” +---------------------+-----------------------------------+ 2 rows in set (0.00 sec) mysql> show variables like 'long_query%'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+ 1 row in set (0.00 sec)
修改方法1:在mysql交互命令行設置
開啟慢查詢功能
mysql> set global slow_query_log = ON;
修改慢查詢日志存放路徑
mysql> set global slow_query_log_file = '/var/lib/mysql/test-slow.log'; //引號別忘
修改慢查詢時間
mysql> set global long_query_time = 2;
最后檢查確認(退出,重新登錄查看)
mysql> show variables like 'slow_query%'; +---------------------+------------------------------+ | Variable_name | Value | +---------------------+------------------------------+ | slow_query_log | ON | | slow_query_log_file | /var/lib/mysql/test-slow.log | +---------------------+------------------------------+ 2 rows in set (0.01 sec) mysql> show variables like 'long_query%'; +-----------------+----------+ | Variable_name | Value | +-----------------+----------+ | long_query_time | 2.000000 | +-----------------+----------+ 1 row in set (0.01 sec)
修改方法2:在配置文件my.cnf文件中添加相關參數(需要重啟mysql)
[mysqld] slow_query_log = ON slow_query_log_file = /var/lib/mysql/test-slow.log long_query_time = 2
簡單測試:
mysql> select sleep(5); //查詢,睡5秒,模擬耗時(大於設定值2秒) +----------+ | sleep(5) | +----------+ | 0 | +----------+ 1 row in set (5.00 sec)
查看慢查詢日志記錄內容
[root@server-10 ~]# cat /var/lib/mysql/test-slow.log /usr/sbin/mysqld, Version: 5.6.40-log (MySQL Community Server (GPL)). started with: Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock Time Id Command Argument # Time: 180906 14:38:54 # User@Host: root[root] @ localhost [] Id: 28 # Query_time: 5.000303 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 SET timestamp=1536215934; select sleep(5);
那條查詢超過2秒的select語句和耗時都被記錄下來了。
結束.