MySQL 慢日志是一個(gè)可以幫助你定位耗時(shí)查詢的工具。在 MySQL 執(zhí)行查詢時(shí),如果它耗時(shí)大于指定的閾值,則該查詢將被記錄在慢日志中。本文將向您展示如何配置 MySQL 慢日志。
首先,您需要編輯 MySQL 的配置文件 my.cnf,將以下幾行代碼添加到 [mysqld] 段中:
slow_query_log = ON # 啟用慢查詢?nèi)罩? slow_query_log_file = /var/log/mysql/mysql-slow.log # 慢查詢?nèi)罩疚募窂? long_query_time = 5 # 超過該值的查詢將被記錄到慢日志 log_queries_not_using_indexes = ON # 記錄未使用索引的查詢
上面的配置項(xiàng)解釋如下:
1. slow_query_log:開啟慢查詢?nèi)罩?/p>
2. slow_query_log_file:指定慢查詢?nèi)罩疚募穆窂胶臀募?/p>
3. long_query_time:指定一個(gè)查詢執(zhí)行的時(shí)間閾值,單位為秒。如果一個(gè)查詢的執(zhí)行時(shí)間超過該值,則該查詢將被記錄到慢查詢?nèi)罩局?/p>
4. log_queries_not_using_indexes:記錄未使用索引的查詢。這個(gè)配置項(xiàng)是可選的,如果你需要記錄這類查詢,可以將它設(shè)置為 ON。
保存修改后,重新啟動(dòng) MySQL 服務(wù),配置就會(huì)生效。接下來,您可以在 log_file 指定的文件中查看慢查詢?nèi)罩荆?/p>
$ tail -f /var/log/mysql/mysql-slow.log # Time: 2021-10-30T12:21:14.090486Z # User@Host: dbuser[dbuser] @ localhost [] Id: 76 # Query_time: 4.004929 Lock_time: 0.000139 Rows_sent: 0 Rows_examined: 14653569 SET timestamp=1635614474; SELECT COUNT(*) FROM big_table;
上面的示例中,我們發(fā)現(xiàn)一條執(zhí)行時(shí)間為 4 秒的查詢,查詢的結(jié)果行數(shù)為 0,查詢了 14653569 行數(shù)據(jù)。通過這個(gè)結(jié)果,我們可以考慮優(yōu)化這條查詢。