MySQL性能分析之show processlist及information_schema.processlist

兩種方式獲取processlist:

show processlist命令 information_schema庫中的processlist表

兩種方法獲取到的信息基本相同,都包括這些屬性:ID/USER/HOST/DB/COMMAND/TIME/STATE/INFO; 具體值上稍有區別:show processlist的Info過長時會截取(100字符),且也不支持按屬性過濾,不利於分析。 show full processlist會顯示所有信息,但展現太佔空間、不利於批量分析。

processlist表的結果來介紹

CREATE TEMPORARY TABLE `PROCESSLIST` (
  `ID` bigint(21) unsigned NOT NULL DEFAULT '0',
  `USER` varchar(16) NOT NULL DEFAULT '',
  `HOST` varchar(64) NOT NULL DEFAULT '',
  `DB` varchar(64) DEFAULT NULL,
  `COMMAND` varchar(16) NOT NULL DEFAULT '',
  `TIME` int(7) NOT NULL DEFAULT '0',
  `STATE` varchar(64) DEFAULT NULL,
  `INFO` longtext
) ENGINE=MyISAM DEFAULT CHARSET=utf8

屬性說明

名詞約定:MySQL中一般用Thread(線程)表示一個執行計劃/任務,本文爲了便於從應用角度理解,用連接代替線程作爲表述。 官方依據:Each connection to mysqld runs in a separate thread. MySQL版本:5.6/5.7/8.x

ID ID不難理解,就是mysql連接的唯一標識。該標識用途有兩個:

操作或過濾特定連接,比如使用kill命令時 定位問題連接。比如查看事務、鎖等時,其中都會有一個thread_id,這個就是對應的processlist.ID;通過這個關係,在分析複雜問題時可定位到具體連接 在下一篇博文的《事務/鎖相關統計》中有提到

USER 字面意思,創建數據庫連接的用戶。 即可用於用戶行爲追蹤,也可用於用戶行爲統計。

HOST 創建連接的服務器,一般由服務器IP+端口組成; 實際使用中,往往只有IP部分有用,比如按請求來源進行統計,使用時可以截取:substring(host, 1, instr(host, ":")-1)。

DB 該連接執行SQL的數據庫。 有些連接創建時可能未指定數據庫,因此該項可能爲空。

COMMAND 最早以爲是“命令”,用的時候才發現表示連接狀態。

該項值常見的有Sleep(休眠)、Query(查詢)、Connect(連接),其他值一般也不常見/用,有興趣可參考官方文檔說明2。

TIME 連接的在當前狀態(STATE)的持續時間,單位爲秒。 注意是“當前狀態的持續時間”。

官方文檔釋義1:

The time in seconds that the thread has been in its current state. For a slave SQL thread, the value is the number of seconds between the timestamp of the last replicated event and the real time of the slave machine.

一般狀態變化非常快、在每個狀態持續時間很短,如果持續多秒,說明就出現了問題。所以這個設定,讓時間成爲判斷SQL是否正常的關鍵要素。如果TIME是連接存在的時間,那麼就失去了這個意義了。

有朋友在主從模式下,遇到過時間爲負數的情況,可參考這篇文章:https://www.jianshu.com/p/9f180c37d983

STATE SQL執行的狀態。

An action, event, or state that indicates what the thread is doing. 1

該項非常重要,往往會指出問題所在。 STATE要結合TIME來使用,即持續的時間比較長,則有問題的概率越大。

Most states correspond to very quick operations. If a thread stays in a given state for many seconds, there might be a problem that needs to be investigated.1

STATE的值比較多,建議閱讀完本文後,閱讀《MySQL性能分析 - (三) processlist的state屬性詳解》來深入瞭解

INFO 正在執行的完整SQL語句。

在實際分析中,該項也是很重要的信息。

定位到SQL,具體定位業務代碼、徹底解決問題也就不遠了 可通過提取多個SQL特徵,進行合併統計

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章