MySQL數(shù)據(jù)庫show processlist指令使用解析
在實際項目開發(fā)中,如果我們對數(shù)據(jù)庫的壓力比較大,比如有大批量的查詢或者插入等sql,尤其是多線程插入等情況,針對部分執(zhí)行比較慢的sql,我們可以將其kill掉,常用的一個命令就是show processlist
1. show processlist是什么
show processlist:通過查看mysql的官網(wǎng),可以發(fā)現(xiàn),其主要是查詢數(shù)據(jù)庫中哪些線程正在執(zhí)行,針對比較慢的線程(time的數(shù)值比較大的線程)我們可以將其kill掉。此外,show full processlist 返回的結(jié)果是實時變化的。
2. show processlist怎么用
有三種方式可以執(zhí)行show processlist,可以通過命令行、SQL語句、Navicat客戶端等。
1) 命令行:SHOW FULL PROCESSLIST\G
執(zhí)行結(jié)果如下:
mysql> SHOW FULL PROCESSLIST\G *************************** 1. row *************************** Id: 1 User: system user Host: db: NULL Command: Connect Time: 1030455 State: Waiting for master to send event Info: NULL *************************** 2. row *************************** Id: 2 User: system user Host: db: NULL Command: Connect Time: 1004 State: Has read all relay log; waiting for the slave I/O thread to update it Info: NULL *************************** 3. row *************************** Id: 3112 User: replikator Host: artemis:2204 db: NULL Command: Binlog Dump Time: 2144 State: Has sent all binlog to slave; waiting for binlog to be updated Info: NULL *************************** 4. row *************************** Id: 3113 User: replikator Host: iconnect2:45781 db: NULL Command: Binlog Dump Time: 2086 State: Has sent all binlog to slave; waiting for binlog to be updated Info: NULL *************************** 5. row *************************** Id: 3123 User: stefan Host: localhost db: apollon Command: Query Time: 0 State: NULL Info: SHOW FULL PROCESSLIST rows in set (0.00 sec)
2) 可以通過sql語句查詢數(shù)據(jù)庫中相關(guān)信息的表
select id, db, user, host, command, time, state, info from information_schema.processlist order by time desc
3) 可以通過Navicat工具查看,如下圖是使用Navicat查詢到的截圖。
3. show processlist怎么解讀
下面對于使用該命令查詢到的結(jié)果進行解讀。
Id:鏈接mysql 服務(wù)器線程的唯一標(biāo)識,可以通過kill來終止此線程的鏈接。
User:當(dāng)前線程鏈接數(shù)據(jù)庫的用戶
Host:顯示這個語句是從哪個ip 的哪個端口上發(fā)出的。可用來追蹤出問題語句的用戶
db: 線程鏈接的數(shù)據(jù)庫,如果沒有則為null
Command: 顯示當(dāng)前連接的執(zhí)行的命令,一般就是休眠或空閑(sleep),查詢(query),連接(connect)
Time: 線程處在當(dāng)前狀態(tài)的時間,單位是秒
State:顯示使用當(dāng)前連接的sql語句的狀態(tài),很重要的列,后續(xù)會有所有的狀態(tài)的描述,請注意,state只是語句執(zhí)行中的某一個狀態(tài),一個 sql語句,已查詢?yōu)槔?,可能需要?jīng)過copying to tmp table,Sorting result,Sending data等狀態(tài)才可以完成
Info: 線程執(zhí)行的sql語句,如果沒有語句執(zhí)行則為null。這個語句可以使客戶端發(fā)來的執(zhí)行語句也可以是內(nèi)部執(zhí)行的語句
4. show processlist結(jié)果怎么處理
在上面的步驟中,我們可以查到每個線程的執(zhí)行時間等信息,因此針對執(zhí)行時間比較長的線程,我們可以直接將其kill掉,直接執(zhí)行 kill Id號即可。
如果要查時間超過5分鐘的,可以拼接并執(zhí)行以下sql
select concat('kill ', id, ';') from information_schema.processlist where command != 'Sleep' and time > 5*60 order by time desc
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
通過實例學(xué)習(xí)MySQL分區(qū)表原理及常用操作
我們試著想一想, 在生產(chǎn)環(huán)境中什么最重要? 我感覺在生產(chǎn)環(huán)境中應(yīng)該沒有什么比數(shù)據(jù)跟更為重要. 那么我們該如何保證數(shù)據(jù)不丟失、或者丟失后可以快速恢復(fù)呢?只要看完這篇大家應(yīng)該就能對MySQL中數(shù)據(jù)備份有一定了解2019-05-05MYSQL數(shù)據(jù)庫主從同步設(shè)置的實現(xiàn)步驟
本文主要介紹了MYSQL數(shù)據(jù)庫主從同步設(shè)置的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03達夢數(shù)據(jù)庫獲取SQL實際執(zhí)行計劃方法詳細介紹
在達夢數(shù)據(jù)庫中,使用EXPLAIN語句可以查看sql的執(zhí)行計劃,但EXPLAIN只生成執(zhí)行計劃,并不會真正執(zhí)行SQL語句,因此產(chǎn)生的執(zhí)行計劃有可能不準(zhǔn)。本章將帶領(lǐng)大家了解多種獲取SQL實際的執(zhí)行計劃的方法2022-10-10