MySQL 鎖等待超時(shí)(Lock wait timeout exceeded)

問(wèn)題:Lock wait timeout exceeded; try restarting transaction

MySQL版本:5.6.44

官方文檔

image-20211102115143947.png

意思是:InnoDB在鎖等待超時(shí)過(guò)期時(shí)報(bào)告此錯(cuò)誤汉操。等待時(shí)間過(guò)長(zhǎng)的語(yǔ)句被回滾(而不是整個(gè)事務(wù))怪嫌。如果SQL語(yǔ)句需要等待其他事務(wù)完成的時(shí)間更長(zhǎng)航夺,則可以增加 innodb_lock_wait_timeout 配置選項(xiàng)的值;如果太多長(zhǎng)時(shí)間運(yùn)行的事務(wù)導(dǎo)致鎖定問(wèn)題并降低繁忙系統(tǒng)上的并發(fā)性,則可以減少該選項(xiàng)的值。

分析

鎖等待超時(shí)叭披,可能是出現(xiàn)了死鎖,也可能有事務(wù)長(zhǎng)時(shí)間未提交

解決辦法

  • 如果是死鎖玩讳,MySQL提供了超時(shí)等待機(jī)制涩蜘,超時(shí)獲取不到資源即 rollback

四張重要的表

庫(kù):information_schema

表:

  • innodb_trx:當(dāng)前運(yùn)行的所有事務(wù)

  • innodb_locks:當(dāng)前出現(xiàn)的鎖

  • innodb_lock_waits:鎖等待對(duì)應(yīng)的關(guān)系

  • processlist:當(dāng)前進(jìn)程信息

查看各表信息

desc information_schema.innodb_trx
desc information_schema.innodb_locks 
desc information_schema.innodb_lock_waits
desc information_schema.processlist

innodb_trx 表

字段 釋義
trx_id 事務(wù)ID
trx_state 事務(wù)狀態(tài)
trx_started 事務(wù)開(kāi)始時(shí)間
trx_requested_lock_id innodb_locks.lock_id
trx_wait_started 事務(wù)開(kāi)始等待的時(shí)間
trx_weight
trx_mysql_thread_id 事務(wù)線程ID
trx_query 具體SQL語(yǔ)句
trx_operation_state 事務(wù)當(dāng)前操作狀態(tài)
trx_tables_in_use 事務(wù)中有多少個(gè)表被使用
trx_tables_locked 事務(wù)擁有多少個(gè)鎖
trx_lock_structs
trx_lock_memory_bytes 事務(wù)鎖住的內(nèi)存大小(B)
trx_rows_locked 事務(wù)鎖住的行數(shù)
trx_rows_modified 事務(wù)更改的行數(shù)
trx_concurrency_tickets 事務(wù)并發(fā)票數(shù)
trx_isolation_level 事務(wù)隔離級(jí)別
trx_unique_checks 是否唯一性檢查
trx_foreign_key_checks 是否外鍵檢查
trx_last_foreign_key_error 最后的外鍵錯(cuò)誤
trx_adaptive_hash_latched
trx_adaptive_hash_timeout
trx_is_read_only 事務(wù)是否只讀
trx_autocommit_non_locking

innodb_locks 表

字段 釋義
lock_id 鎖ID
lock_trx_id 擁有鎖的事務(wù)ID
lock_mode 鎖模式
lock_type 鎖類型
lock_table 被鎖的表
lock_index 被鎖的索引
lock_space 被鎖的表空間號(hào)
lock_page 被鎖的頁(yè)號(hào)
lock_rec 被鎖的記錄號(hào)
lock_data 被鎖的數(shù)據(jù)

innodb_lock_waits 表

字段 釋義
requesting_trx_id 請(qǐng)求鎖的事務(wù)ID(等待鎖的ID)
requested_lock_id 請(qǐng)求鎖的鎖ID
blocking_trx_id 當(dāng)前擁有鎖的事務(wù)ID
blocking_lock_id 當(dāng)前擁有鎖的鎖ID

processlist 表

字段 釋義
Id 線程ID
User 用戶
Host 主機(jī)
db 數(shù)據(jù)庫(kù)
Command 命令
Time 時(shí)間
State 狀態(tài)
Info 信息

排查思路

模擬出現(xiàn)死鎖
準(zhǔn)備一張只有主鍵的表:t_test (id)

Navicat 新建查詢1

begin

update t_test set id = 30 where id = 3;

-- 執(zhí)行完 update 后锋边,暫時(shí)不 commit
commit;

Navicat 新建查詢2

begin

update t_test set id = 40 where id = 3;

-- 執(zhí)行完 update 后皱坛,暫時(shí)不 commit
commit;

檢查是否鎖表

show open tables where in_use > 0;

查詢當(dāng)前正在執(zhí)行的事務(wù)

select * from information_schema.innodb_trx
當(dāng)前正在執(zhí)行的事務(wù).png

可以看到,此時(shí)的事務(wù)2豆巨,出現(xiàn)了 鎖等待

查詢當(dāng)前出現(xiàn)的鎖

select * from information_schema.innodb_locks
當(dāng)前出現(xiàn)的鎖.png

查詢鎖等待對(duì)應(yīng)的關(guān)系

鎖等待對(duì)應(yīng)的關(guān)系.png

查詢等待鎖的事務(wù)所執(zhí)行的SQL

SELECT
    a.trx_id '事務(wù) id',
    a.trx_mysql_thread_id '事務(wù)線程 id',
    a.trx_query '事務(wù) SQL' 
FROM
    information_schema.innodb_locks b,
    information_schema.innodb_trx a 
WHERE
    b.lock_trx_id = a.trx_id;
查找當(dāng)前出現(xiàn)鎖的事務(wù)SQL.png

可以看到剩辟,對(duì)應(yīng)的 SQL 就是事務(wù)2的

最后,事務(wù)2 等待鎖超時(shí)報(bào)錯(cuò):Lock wait timeout exceeded; try restarting transaction;

事務(wù)二超過(guò)等待時(shí)長(zhǎng)報(bào)錯(cuò).png

時(shí)間大概50s往扔, 鎖等待超時(shí)時(shí)間配置

show variables like 'innodb_lock_wait_timeout';

通過(guò)事務(wù)線程ID查找進(jìn)程信息

select * from information_schema.processlist where id = 388654
通過(guò)事務(wù)線程ID查找進(jìn)程列表.png

通過(guò)其中的 HOST 字段信息就可以定位到是哪個(gè)程序的事務(wù)贩猎。結(jié)合事務(wù)的 SQL 語(yǔ)句可以定位到業(yè)務(wù)代碼。

win10 查看端口信息

netstat -ano | findstr 59501
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末萍膛,一起剝皮案震驚了整個(gè)濱河市吭服,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蝗罗,老刑警劉巖艇棕,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異串塑,居然都是意外死亡沼琉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門桩匪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)打瘪,“玉大人,你說(shuō)我怎么就攤上這事」肷В” “怎么了彩扔?”我有些...
    開(kāi)封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)僻爽。 經(jīng)常有香客問(wèn)我虫碉,道長(zhǎng),這世上最難降的妖魔是什么进泼? 我笑而不...
    開(kāi)封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任蔗衡,我火速辦了婚禮纤虽,結(jié)果婚禮上乳绕,老公的妹妹穿的比我還像新娘。我一直安慰自己逼纸,他們只是感情好洋措,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著杰刽,像睡著了一般菠发。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贺嫂,一...
    開(kāi)封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天滓鸠,我揣著相機(jī)與錄音,去河邊找鬼第喳。 笑死糜俗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的曲饱。 我是一名探鬼主播悠抹,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼扩淀!你這毒婦竟也來(lái)了楔敌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤驻谆,失蹤者是張志新(化名)和其女友劉穎卵凑,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體胜臊,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡勺卢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了区端。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片值漫。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖织盼,靈堂內(nèi)的尸體忽然破棺而出杨何,到底是詐尸還是另有隱情酱塔,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布危虱,位于F島的核電站羊娃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏埃跷。R本人自食惡果不足惜蕊玷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弥雹。 院中可真熱鬧垃帅,春花似錦、人聲如沸剪勿。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)厕吉。三九已至酱固,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間头朱,已是汗流浹背运悲。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留项钮,地道東北人班眯。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像寄纵,于是被迫代替她去往敵國(guó)和親鳖敷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容