MySQL慢查詢?nèi)罩臼且环N記錄MySQL數(shù)據(jù)庫(kù)查詢(例如SELECT、UPDATE、DELETE)慢的SQL查詢語(yǔ)句的功能,通常慢查詢指執(zhí)行時(shí)間超過(guò)一定時(shí)間(默認(rèn)情況下,超過(guò)10秒)的查詢。啟用慢查詢?nèi)罩就ǔJ前l(fā)現(xiàn)并解決數(shù)據(jù)庫(kù)性能問(wèn)題的第一步。
MySQL慢日志設(shè)置需要編輯my.cnf配置文件,通常位于MySQL安裝目錄下的/etc/my.cnf或/etc/mysql/my.cnf??梢酝ㄟ^(guò)在my.cnf文件中添加以下設(shè)置來(lái)開(kāi)啟慢查詢?nèi)罩荆?/p>
slow_query_log = 1 # 開(kāi)啟慢查詢?nèi)罩? slow_query_log_file = /var/log/mysql/mysql-slow.log # 慢查詢?nèi)罩疚募窂? long_query_time = 10 # 查詢時(shí)間超過(guò)10秒則被視為慢查詢 log_queries_not_using_indexes = 1 # 記錄未使用索引的查詢
指定日志文件路徑可以幫助我們更好地對(duì)日志進(jìn)行管理,建議將日志文件放在MySQL的安裝目錄下。long_query_time參數(shù)指定了多長(zhǎng)時(shí)間的查詢將被記錄為慢查詢,可以根據(jù)實(shí)際情況來(lái)設(shè)置。log_queries_not_using_indexes參數(shù)指定了是否記錄未使用索引的查詢,可以幫助我們找出需要?jiǎng)?chuàng)建索引的查詢。
啟用慢查詢?nèi)罩竞?,MySQL會(huì)記錄所有滿足條件的查詢,并將其寫(xiě)入慢查詢?nèi)罩疚募小C織l記錄通常包含以下信息:
# Time: 2021-01-01T00:00:00.000000Z # 查詢時(shí)間 # User@Host: test_user[test_db] @ 127.0.0.1 [127.0.0.1] # 查詢用戶和主機(jī) # Query_time: 0.500000 # 查詢耗時(shí) # Lock_time: 0.000000 # 鎖定時(shí)間 # Rows_sent: 1 # 返回結(jié)果行數(shù) # Rows_examined: 1000 # 掃描行數(shù) use test_db; SET timestamp=1234567890; SELECT * FROM test WHERE id = 1;
需要注意的是,啟用慢查詢?nèi)罩緯?huì)對(duì)MySQL服務(wù)器的性能產(chǎn)生一定影響,因?yàn)槊織l查詢都需要進(jìn)行日志記錄,尤其是在頻繁執(zhí)行查詢的高負(fù)載環(huán)境中。因此,建議在不需要時(shí)禁用慢查詢?nèi)罩尽?/p>