《關(guān)于MySQL慢日志,你想知道的都在這》要點:
本文介紹了關(guān)于MySQL慢日志,你想知道的都在這,希望對您有用。如果有疑問,可以聯(lián)系我們。
作者介紹
鄒鵬,現(xiàn)任職于騰訊云數(shù)據(jù)庫團隊,負責騰訊云數(shù)據(jù)庫MySQL中間件研發(fā),多年的數(shù)據(jù)庫、網(wǎng)絡(luò)安全研發(fā)經(jīng)驗,對云計算平臺的網(wǎng)絡(luò)、計算、存儲、安全有著深入的了解,在MySQL的高可用、高可靠、中間件方面有豐富的經(jīng)驗.
目錄:
MySQL的慢查詢?nèi)罩臼荕ySQL提供的一種日志記錄,它用來記錄在MySQL中響應(yīng)時間超過閥值的語句,具體指運行時間超過long_query_time值的SQL,則會被記錄到慢查詢?nèi)罩局?long_query_time的默認值為10,意思是運行10s以上的語句.
默認情況下,MySQL數(shù)據(jù)庫并不啟動慢查詢?nèi)罩?需要我們手動來設(shè)置這個參數(shù),當然,如果不是調(diào)優(yōu)需要的話,一般不建議啟動該參數(shù),因為開啟慢查詢?nèi)罩净蚨嗷蛏贂硪欢ǖ男阅苡绊?慢查詢?nèi)罩局С謱⑷罩居涗泴懭胛募?也支持將日志記錄寫入數(shù)據(jù)庫表.
看圖說話,有很多開關(guān)影響著慢日志的生成,相關(guān)的參數(shù)后面會挨個說明.從上圖可以看出慢日志輸出的內(nèi)容有兩個,第一執(zhí)行時間過長(大于設(shè)置的long_query_time閾值);第二未使用索引,或者未使用最優(yōu)的索引.
這兩種日志默認情況下都沒有打開,特別是未使用索引的日志,因為這一類的日志可能會有很多,所以還有個特別的開關(guān)log_throttle_queries_not_using_indexes用于限制每分鐘輸出未使用索引的日志數(shù)量.
關(guān)鍵代碼如下:
Slow log調(diào)用棧(MySQL 5.6.34 ):
以上應(yīng)該是最完整的和慢日志相關(guān)的所有參數(shù),大多數(shù)參數(shù)都有前置條件,所以在使用的時候可以參照上面的流程圖.
5.6官方文檔:
1、https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html
2、https://dev.mysql.com/doc/refman/5.6/en/server-options.html
第一行:標記日志產(chǎn)生的時間,準確說是SQL執(zhí)行完成的時間點,改行記錄每一秒只打印一條.
第二行:客戶端的賬戶信息,兩個用戶名(第一個是授權(quán)賬戶,第二個為登錄賬戶),客戶端IP地址,還有mysqld的線程ID.
第三行:查詢執(zhí)行的信息,包括查詢時長,鎖持有時長,返回客戶端的行數(shù),掃描行數(shù).通常我需要優(yōu)化的就是最后一個內(nèi)容,盡量減少SQL語句掃描的數(shù)據(jù)行數(shù).
第四行:通過代碼看,貌似和第一行的時間沒有區(qū)別.
第五話:最后就是產(chǎn)生慢查詢的SQL語句.
如果mysqld啟動時指定了–log-short-format參數(shù),則不會輸出第一、第二行.
log_throttle_queries_not_using_indexes > 0 :
如果啟用了以上兩個參數(shù),每分鐘超過log_throttle_queries_not_using_indexes配置的未使用索引的慢日志將會被抑制,被抑制的信息會被匯總,每分鐘輸出一次.
格式如下:
總的來說,MySQL的日志內(nèi)容本身不復(fù)雜,上面3個工具都是用perl腳本實現(xiàn),代碼行數(shù)不超過200行,有興趣的同學(xué)也可以自己嘗試著解析下.
詳情可以參閱下這篇文章:
https://flyerboy.github.io/2016/12/23/mysql_slow/
以上工具可以支撐慢日志的常用統(tǒng)計,但是當我們需要做到SQL級別的統(tǒng)計時,我們還需要取解析SQL把參數(shù)提取出來.
刪除:直接刪除慢日志文件,執(zhí)行flush logs(必須的).
備份:先用mv重命名文件(不要跨分區(qū)),然后執(zhí)行flush logs(必須的).
另外修改系統(tǒng)變量slow_query_log_file也可以立即生效;
執(zhí)行flush logs,系統(tǒng)會先close當前的句柄,然后重新open;mv , rm日志文件系統(tǒng)并不會報錯,具體的原因可以Google下linux ?i_count ??i_nlink?;
文章來自微信公眾號:DBAplus社群
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/2206.html