前言
在開發中,高效能的程序 也包括 高效能的查詢,所以優化SQL也是程序員必要技能之一。要優化就必須要有慢日志記錄才可以知道哪些查詢慢,然后反向去修改
慢日志設置方式
寫入文件
寫入數據庫
實踐操作
方式一:寫入文件
編輯my.conf 中修改 log_slow_queries 的日志地址
$ cd /etc/mysql $ cat my.cnf |grep slow log_slow_queries = /data/logs/mysql/mysql-slow.log $ sudo /etc/init.d/mysql restart
簡單驗證
$ mysql -uroot -p mysql> show variables like '%slow_query_log%'; +---------------------+---------------------------------+ | Variable_name | Value | +---------------------+---------------------------------+ | slow_query_log | ON | | slow_query_log_file | /data/logs/mysql/mysql-slow.log | +---------------------+---------------------------------+ 2 rows in set (0.00 sec) $ tail -f /data/logs/mysql/mysql-slow.log # Time: 161110 23:20:22 # User@Host: root[root] @ localhost [] # Query_time: 3.007048 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 SET timestamp=1478791222; select sleep(3);
方式二:寫入數據庫
先查看目前日志輸出方式
mysql> show variables like '%log_output%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_output | FILE | +---------------+-------+ 1 row in set (0.00 sec)
設置輸出方式為FILE,TABLE
mysql> set global log_output='FILE,TABLE'; Query OK, 0 rows affected (0.00 sec) mysql> show variables like '%log_output%'; +---------------+------------+ | Variable_name | Value | +---------------+------------+ | log_output | FILE,TABLE | +---------------+------------+ 1 row in set (0.00 sec) mysql> select count(*) from mysql.slow_log; +----------+ | count(*) | +----------+ | 2 | +----------+ 1 row in set (0.00 sec)

備注: log_output 參數設定日志文件的輸出,可選值為 TABLE, FILE ,NONE; "TABLE" 意思為設定日志分別記錄到 mysql 庫的 general_log 和 slow_log 表中; "FILE" 意思為記錄日志到操作系統的文件中, "NONE" 意思為取消日志記錄。
參考資料
原文地址: MySQL:動態開啟慢查詢日志(Slow Query Log)
標簽: mysql slow_log log log_output query
