首先是幾條常用的SQL。
1、按客戶端 IP 分組,看哪個客戶端的鏈接數(shù)最多
select client_ip,count(client_ip) as client_num from (select substring_index(host,':' ,1) as client_ip from information_schema.processlist ) as connect_info group by client_ip order by client_num desc;
2、查看正在執(zhí)行的線程,并按 Time 倒排序,看看有沒有執(zhí)行時間特別長的線程
select * from information_schema.processlist where Command != 'Sleep' order by Time desc;
3、找出所有執(zhí)行時間超過 5 分鐘的線程,拼湊出 kill 語句,方便后面查殺 (此處 5分鐘 可根據(jù)自己的需要調(diào)整SQL標紅處)
select concat('kill ', id, ';') from information_schema.processlist where Command != 'Sleep' and Time > 300 order by Time desc;
可復制查詢結(jié)果到控制臺,直接執(zhí)行,殺死堵塞進程
4、查詢線程及相關信息
show full processlist
ID 為此線程ID,Time為線程運行時間,Info為此線程SQL
5、一堆不怎么看得解釋
show processlist 是顯示用戶正在運行的線程,需要注意的是,除了 root 用戶能看到所有正在運行的線程外,其他用戶都只能看到自己正在運行的線程,看不到其它用戶正在運行的線程。除非單獨個這個用戶賦予了PROCESS 權(quán)限。
root用戶,可以看到全部線程運行情況
普通的activiti用戶只能看到自己的
單獨給activiti用戶授PROCESS權(quán)限,(授權(quán)后需要退出重新登錄)
show processlist 顯示的信息都是來自MySQL系統(tǒng)庫 information_schema 中的 processlist 表。所以使用下面的查詢語句可以獲得相同的結(jié)果:
select * from information_schema.processlist
了解這些基本信息后,下面我們看看查詢出來的結(jié)果都是什么意思。
Id: 就是這個線程的唯一標識,當我們發(fā)現(xiàn)這個線程有問題的時候,可以通過 kill 命令,加上這個Id值將這個線程殺掉。前面我們說了show processlist 顯示的信息時來自information_schema.processlist 表,所以這個Id就是這個表的主鍵。
User: 就是指啟動這個線程的用戶。
Host: 記錄了發(fā)送請求的客戶端的 IP 和 端口號。通過這些信息在排查問題的時候,我們可以定位到是哪個客戶端的哪個進程發(fā)送的請求。
DB: 當前執(zhí)行的命令是在哪一個數(shù)據(jù)庫上。如果沒有指定數(shù)據(jù)庫,則該值為 NULL 。
Command: 是指此刻該線程正在執(zhí)行的命令。這個很復雜,下面單獨解釋
Time: 表示該線程處于當前狀態(tài)的時間。
State: 線程的狀態(tài),和 Command 對應,下面單獨解釋。
Info: 一般記錄的是線程執(zhí)行的語句。默認只顯示前100個字符,也就是你看到的語句可能是截斷了的,要看全部信息,需要使用 show full processlist。
下面我們單獨看一下 Command 的值:
Binlog Dump: 主節(jié)點正在將二進制日志 ,同步到從節(jié)點
Change User: 正在執(zhí)行一個 change-user 的操作
Close Stmt: 正在關閉一個Prepared Statement 對象
Connect: 一個從節(jié)點連上了主節(jié)點
Connect Out: 一個從節(jié)點正在連主節(jié)點
Create DB: 正在執(zhí)行一個create-database 的操作
Daemon: 服務器內(nèi)部線程,而不是來自客戶端的鏈接
Debug: 線程正在生成調(diào)試信息
Delayed Insert: 該線程是一個延遲插入的處理程序
Drop DB: 正在執(zhí)行一個 drop-database 的操作
Execute: 正在執(zhí)行一個 Prepared Statement
Fetch: 正在從Prepared Statement 中獲取執(zhí)行結(jié)果
Field List: 正在獲取表的列信息
Init DB: 該線程正在選取一個默認的數(shù)據(jù)庫
Kill : 正在執(zhí)行 kill 語句,殺死指定線程
Long Data: 正在從Prepared Statement 中檢索 long data
Ping: 正在處理 server-ping 的請求
Prepare: 該線程正在準備一個 Prepared Statement
ProcessList: 該線程正在生成服務器線程相關信息
Query: 該線程正在執(zhí)行一個語句
Quit: 該線程正在退出
Refresh:該線程正在刷表,日志或緩存;或者在重置狀態(tài)變量,或者在復制服務器信息
Register Slave: 正在注冊從節(jié)點
Reset Stmt: 正在重置 prepared statement
Set Option: 正在設置或重置客戶端的 statement-execution 選項
Shutdown: 正在關閉服務器
Sleep: 正在等待客戶端向它發(fā)送執(zhí)行語句
Statistics: 該線程正在生成 server-status 信息
Table Dump: 正在發(fā)送表的內(nèi)容到從服務器
Time: Unused
如果有歧義可以查看官方文檔: 8.14.1 Thread Command Values
新聞名稱:mysql : show processlist 詳解
當前鏈接:http://www.rwnh.cn/news/167265.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、微信小程序、手機網(wǎng)站建設、虛擬主機、移動網(wǎng)站建設、網(wǎng)站營銷
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源:
創(chuàng)新互聯(lián)