共計(jì) 1021 個(gè)字符,預(yù)計(jì)需要花費(fèi) 3 分鐘才能閱讀完成。
這篇文章給大家介紹如何分辨 MySQL 中的死鎖和鎖等待,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
【數(shù)據(jù)庫(kù)版本】MySQL5.7
程序報(bào)錯(cuò) 1205 Lock wat timeout exceeded,以為是 deadlock,其實(shí)是兩個(gè)概念,說(shuō)明死鎖監(jiān)控模塊是沒問(wèn)題的。死鎖監(jiān)控到的是死鎖,而不是鎖等待。
報(bào)錯(cuò)信息如下:
SQLSTATEHY000]:General error: 1205 Lock wat timeout exceeded; try restarting transaction (SQL: UPDATE xx set xxx = 100 where id=1 and rock_id 1)
1213 Deadlock found when trying to get lock; try restarting transaction
https://www.cnblogs.com/tartis/p/9366574.html
https://dev.mysql.com/doc/refman/8.0/en/innodb-deadlock-example.html
MySQL 5.7 我們可以通過(guò)下面語(yǔ)句查詢鎖狀態(tài)信息
SELECT
r.trx_id waiting_trx_id,
r.trx_mysql_thread_id waiting_thread,
r.trx_query waiting_query,
b.trx_id blocking_trx_id,
b.trx_mysql_thread_id blocking_thread,
b.trx_query blocking_query
information_schema.`INNODB_LOCK_WAITS` w
INNER JOIN information_schema.`INNODB_TRX` b
ON b.`trx_id` = w.`blocking_trx_id`
INNER JOIN information_schema.`INNODB_TRX` r
ON r.`trx_id` = w.`requesting_trx_id`;
MySQL8.0 我們通過(guò)如下語(yǔ)句查看鎖信息
select * from x$innodb_lock_waits;
關(guān)于如何分辨 MySQL 中的死鎖和鎖等待就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。