關於 MySQL 慢日誌,你想知道的都在這

2021-08-03 23:56:05 字數 2376 閱讀 3484

mysql 的慢查詢日誌是 mysql 提供的一種日誌記錄,它用來記錄在 mysql 中響應時間超過閥值的語句,具體指執行時間超過long_query_time值的 sql,則會被記錄到慢查詢日誌中。long_query_time的預設值為10,意思是執行10s以上的語句。

預設情況下,mysql 資料庫並不啟動慢查詢日誌,需要我們手動來設定這個引數,當然,如果不是調優需要的話,一般不建議啟動該引數,因為開啟慢查詢日誌或多或少會帶來一定的效能影響。慢查詢日誌支援將日誌記錄寫入檔案,也支援將日誌記錄寫入資料庫表。

看圖說話,有很多開關影響著慢日誌的生成,相關的引數後面會挨個說明。從上圖可以看出慢日誌輸出的內容有兩個,第一執行時間過長(大於設定的long_query_time閾值);第二未使用索引,或者未使用最優的索引。

這兩種日誌預設情況下都沒有開啟,特別是未使用索引的日誌,因為這一類的日誌可能會有很多,所以還有個特別的開關log_throttle_queries_not_using_indexes用於限制每分鐘輸出未使用索引的日誌數量。

關鍵**如下

slow log 呼叫棧(mysql 5.6.34 )

以上應該是最完整的和慢日誌相關的所有引數,大多數引數都有前置條件,所以在使用的時候可以參照上面的流程圖。

5.6官方文件:

第一行:標記日誌產生的時間,準確說是 sql 執行完成的時間點,改行記錄每一秒只列印一條。

第三行:查詢執行的資訊,包括查詢時長,鎖持有時長,返回客戶端的行數,掃瞄行數。通常我需要優化的就是最後乙個內容,儘量減少 sql 語句掃瞄的資料行數。

第四行:通過**看,貌似和第一行的時間沒有區別。

第五話:最後就是產生慢查詢的 sql 語句。

--

log-short

-format

=true:

如果mysqld啟動時指定了--log-short-format引數,則不會輸出第

一、第二行。

log

-queries

-not

-using

-indexes

=on

log_throttle_queries_not_using_indexes >

0 :

如果啟用了以上兩個引數,每分鐘超過log_throttle_queries_not_using_indexes配置的未使用索引的慢日誌將會被抑制,被抑制的資訊會被彙總,每分鐘輸出一次。

格式如下

官方自帶工具:`mysqldumpslow

開源工具:mysqlsla

percona-toolkit:工具包中的 pt-query-digest 工具可以分析彙總慢查詢資訊,具體邏輯可以看 slowlogparser 這個函式。

總的來說,mysql 的日誌內容本身不複雜,上面 3 個工具都是用 perl 指令碼實現,**行數不超過 200 行,有興趣的同學也可以自己嘗試著解析下。

詳情可以參閱下這篇文章:

以上工具可以支撐慢日誌的常用統計,但是當我們需要做到 sql 級別的統計時,我們還需要取解析 sql 把引數提取出來。

另外修改系統變數slow_query_log_file也可以立即生效;執行flush logs,系統會先close當前的控制代碼,然後重新openmv,rm日誌檔案系統並不會報錯,具體的原因可以 google 下 linuxi_counti_nlink`。

你想知道的字元編碼

1 什麼是字元?從顯示的角度來說,字元可以理解成就是我們需要顯示的單一實體。包括,數字6,字母5,中文 好 等等。對字元的其它名詞解釋 字元 character 是文字與符號的總稱,包括文字 圖形符號 數學符號等。2 什麼是字符集?一組字元的集合就是字符集。字符集常常和一種具體的語言文字對應起來,該...

你想知道的負載均衡

本文 一篇文章徹底了解清楚什麼是負載均衡。負載均衡是高可用網路基礎架構的的乙個關鍵組成部分,有了負載均衡,我們通常可以將我們的應用伺服器部署多台,然後通過負載均衡將使用者的請求分發到不同的伺服器用來提高 應用 資料庫或其他服務的效能以及可靠性。為什麼要引入負載均衡?先看乙個沒有負載均衡機制的web架...

CLR中你想知道的事

clr是什麼?clr 公共語言執行時,是乙個可由多個語言共同使用的執行環境,核心 記憶體管理,程式集載入,安全性,異常處理和多執行緒 visual studio是一種編譯器,編譯器也可稱為語法檢查器和正確 的分析器 visual studio點選生成或除錯的時候幹了什麼?編譯器會生成乙個託管模組。託...