本篇內容主要講解“怎么解決 Sleep線(xiàn)程引發(fā)的鎖等待故障”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強。下面就讓小編來(lái)帶大家學(xué)習“怎么解決Mysql Sleep線(xiàn)程引發(fā)的鎖等待故障”吧!
背景:
負責的生產(chǎn)庫出現告警too many connections.
解決過(guò)程:
1. 第一反應就是出現了大量的連接或者是DDL把實(shí)例打滿(mǎn)了,隨即登上實(shí)例嘗試登陸,卻發(fā)現已經(jīng)連不上了。然后動(dòng)態(tài)調大連接數后。使用如下SQL看到大量的UPDATE線(xiàn)程未執行完。
select id,host,user,db,command,state,time,left(info,200) from information_schema.processlist where command <>'Sleep' order by time desc limit 100;
2. 此時(shí)看到這個(gè)場(chǎng)景,大家大概率都會(huì )以為是表tbl_prod的ID沒(méi)有索引所以是全表查找更新,然而看到執行計劃卻發(fā)現并不是,反而是主鍵更新。
explain UPDATE tbl_prod SET status=1 WHERE id = 1198445;
3. 隨后查看innodb引擎當前的狀態(tài),發(fā)現很有意思的事了,這些update線(xiàn)程都在等待鎖,以其中一個(gè)線(xiàn)程為例。
show engine innodb status\G
4. 此時(shí)基本上可以斷定是有長(cháng)事務(wù)未提交導致的大量主鍵更新等待了。我們采用如下SQL可以找到這個(gè)長(cháng)連接。
select p.host,p.time,t.trx_mysql_thread_id,t.trx_started,left(p.info,100) from information_schema.innodb_trx t join information_schema.processlist p on t.trx_mysql_thread_id =p.id order by time desc,t.trx_started desc limit 20;
5. 可以看到上面的第一條執行時(shí)間最長(cháng)的為NULL的線(xiàn)程占用鎖時(shí)間最長(cháng),其后則是大量的update等待線(xiàn)程了。那么我們將這個(gè)最長(cháng)的null線(xiàn)程給KILL掉,問(wèn)題即得到解決。
kill 2323514;
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站