今天小編就為大家?guī)硪黄嘘P(guān)MySQL當(dāng)中show full processlist的文章。小編覺得挺實(shí)用的,為此分享給大家做個參考。一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)公司專注于新鄉(xiāng)企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城網(wǎng)站建設(shè)。新鄉(xiāng)網(wǎng)站建設(shè)公司,為新鄉(xiāng)等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
show full processlist 返回的結(jié)果是實(shí)時(shí)變化的,是對 mysql 鏈接執(zhí)行的現(xiàn)場快照,所以用來處理突發(fā)事件非常有用。
這個 sql,一般就是充當(dāng)救火隊(duì)員的角色,解決一些突發(fā)性的問題。
它可以查看當(dāng)前 mysql 的一些運(yùn)行情況,是否有壓力,都在執(zhí)行什么 sql,語句耗時(shí)幾何,有沒有慢 sql 在執(zhí)行等等。
當(dāng)發(fā)現(xiàn)一些執(zhí)行時(shí)間很長的 sql 時(shí),就需要多注意一下了,必要時(shí) kill 掉,先解決問題。
命令有三種執(zhí)行方式:
1、這種是直接在命令行查詢,末尾帶 \G 是表示將查詢結(jié)果進(jìn)行按列打印,可以使每個字段打印到單獨(dú)的行。
mysql> show full processlist; +--------+------+----------------------+-------+---------+------+----------+-----------------------+ | Id | User | Host | db | Command | Time | State | Info | +--------+------+----------------------+-------+---------+------+----------+-----------------------+ | 449000 | root | 127.123.213.11:59828 | stark | Sleep | 1270 | | NULL | | 449001 | root | 127.123.213.11:59900 | stark | Sleep | 1241 | | NULL | | 449002 | root | 127.123.213.11:59958 | stark | Sleep | 1216 | | NULL | | 449003 | root | 127.123.213.11:60088 | stark | Sleep | 1159 | | NULL | | 449004 | root | 127.123.213.11:60108 | stark | Sleep | 1151 | | NULL | | 449005 | root | 127.123.213.11:60280 | stark | Sleep | 1076 | | NULL | | 449006 | root | 127.123.213.11:60286 | stark | Sleep | 1074 | | NULL | | 449007 | root | 127.123.213.11:60344 | stark | Sleep | 1052 | | NULL | | 449008 | root | 127.123.213.11:60450 | stark | Sleep | 1005 | | NULL | | 449009 | root | 127.123.213.11:60498 | stark | Sleep | 986 | | NULL | | 449013 | root | localhost | NULL | Query | 0 | starting | show full processlist | +--------+------+----------------------+-------+---------+------+----------+-----------------------+ 11 rows in set (0.01 sec) mysql> show full processlist\G; *************************** 1. row *************************** Id: 449000 User: root Host: 127.123.213.11:59828 db: stark Command: Sleep Time: 1283 State: Info: NULL *************************** 2. row *************************** Id: 449001 User: root Host: 127.123.213.11:59900 db: stark Command: Sleep Time: 1254 State: Info: NULL
2、通過查詢鏈接線程相關(guān)的表來查看快照
SELECT id, db, USER, HOST, command, time, state, info FROM information_schema. PROCESSLIST WHERE command != 'Sleep' ORDER BY time DESC;
3、通過 navicat 中的【工具】=> 【服務(wù)器監(jiān)控】進(jìn)行查看。
這種方式比較方便,還可以排序。
簡單介紹一下,每列的含義:
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)的時(shí)間,單位是秒
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í)行的語句
發(fā)現(xiàn)問題之后怎樣解決它呢?
1、可以單獨(dú) kill 掉上面有問題的行
kill 449000
2、也可以批量結(jié)束時(shí)間超過 3 分鐘的線程
-- 查詢執(zhí)行時(shí)間超過3分鐘的線程,然后拼接成 kill 語句
select concat('kill ', id, ';')
from information_schema.processlist
where command != 'Sleep'
and time > 3*60
order by time desc;
當(dāng)然問題到這,一般都能解決了,但是本次在 show processlist 過程中,只是看到了前面的 truncate 和 drop 操作,把這兩個線程 kill 了,也沒啥用。。。。
當(dāng)然上面這些不是廢話昂,這就是類似方法論的東西,就像【中國機(jī)長】里面,遇到飛行事故時(shí),首先按照手冊,檢查一遍,排查原因,解決問題。
繼續(xù)
緊接著,又用 navicat 執(zhí)行了修復(fù)表操作,結(jié)果返回了 Waiting for table metadata lock
當(dāng) MySQL 在進(jìn)行一些 alter table 等 DDL 操作時(shí),如果該表上有未提交的事務(wù)則會出現(xiàn) Waiting for table metadata lock,而一旦出現(xiàn) metadata lock,該表上的后續(xù)操作都會被阻塞。
解決辦法:
1、從 information_schema.innodb_trx 表中查看當(dāng)前未提交的事務(wù)
select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.innodb_trx\G
字段意義:
trx_state: 事務(wù)狀態(tài),一般為 RUNNING
trx_started: 事務(wù)執(zhí)行的起始時(shí)間,若時(shí)間較長,則要分析該事務(wù)是否合理
trx_mysql_thread_id: MySQL 的線程 ID,用于 kill
trx_query: 事務(wù)中的 sql
一般只要 kill 掉這些線程,DDL 操作就不會 Waiting for table metadata lock。
2、調(diào)整鎖超時(shí)閾值
lock_wait_timeout 表示獲取 metadata lock 的超時(shí)(單位為秒),允許的值范圍為 1 到 31536000(1 年)。 默認(rèn)值為 31536000。
詳見 https://dev.mysql.com/doc/refman/5.6/en/se...
默認(rèn)值為一年。。。。
將其調(diào)整為 30 分鐘
set session lock_wait_timeout = 1800;
set global lock_wait_timeout = 1800;
好讓出現(xiàn)該問題時(shí)快速失?。╢ailfast)。
關(guān)于show full processlist在Mysql當(dāng)中的作用就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果喜歡這篇文章,不如把它分享出去讓更多的人看到。
網(wǎng)站標(biāo)題:showfullprocesslist在Mysql當(dāng)中的作用
URL網(wǎng)址:http://www.rwnh.cn/article40/igidho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、Google、品牌網(wǎng)站建設(shè)、App開發(fā)、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)