MySQL慢日誌往往是大家定位SQL效能問題。通過慢日誌分析可以調整索引使用。這是使用最多的一個功能。
目前MySQL也支援毫秒層級以下的慢日誌記錄,這個功能其實有很多用處,這裡大概給大家講解一下。該功能開啟參數:long_query_time
查看慢查詢是否開啟:
| 代碼如下 |
複製代碼 |
mysql> show variables like '%slow%'; +---------------------+-------------------------+ | Variable_name | Value | +---------------------+-------------------------+ | log_slow_queries | ON | | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | D:/log/slow.txt | +---------------------+-------------------------+ 其中,各參數說明如下: slow_launch_time: 慢查詢超過的執行時間值 slow_query_log: 是否開啟慢查詢日誌功能 show_query_log_file:慢查詢日誌目錄 |
通常使用這個參數的幾個環境:
需要得到一個業務的所有SQL可以在測試環境中MySQL的long_query_time設定為0.000001:
| 代碼如下 |
複製代碼 |
set global long_query_time=0.000001; flush logs; |
也可以直接在找到 MySQL 的設定檔 ,my.cnf (Windows 為 my.ini ),在 MySQL 下增加下面幾行
| 代碼如下 |
複製代碼 |
log-slow-queries ="D:/xampp/mysql/long.txt" long_query_time = 1 log-slow-queries=/var/lib/mysql/slowquery.log (指定記錄檔存放位置,可以為空白,系統會給一個預設的檔案host_name-slow.log) long_query_time=2 (記錄超過的時間,預設為10s) log-queries-not-using-indexes (log下來沒有使用索引的query,可以根據情況決定是否開啟) log-long-format (如果設定了,所有沒有使用索引的查詢也將被記錄) |
上面的 2 是查詢的時間,即當一條 SQL 執行時間超過2秒的時候才記錄,/usr/var/slowquery.log 是日誌記錄的位置。
然後重新啟動MySQL服務
2、 MySQL 設定檔的位置
Windows:Windows 的設定檔為 my.ini,一般在 MySQL 的安裝目錄下或者 c:Windows 下。
Linux:Linux 的設定檔為 my.cnf ,一般在 /etc 下。
這樣基本上所有對MySQL請求的sql都會記錄到慢日誌中。通過日誌分析可以全面瞭解一下SQL樣式及整體運行調用分布。(重要的庫可以考慮開啟該參數記錄相應的log用於審計使用)
同樣對於生產環境,可以通過開啟該參數,定期收集一下線上的SQL運行情況,做一些對比,方便瞭解目前線上SQL啟動並執行情況。能更供更多的指導。 有了慢查詢日誌,通過慢查詢日誌分析工具很容易得到一份不錯的分析結果。