中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql數據庫死鎖Deadlock found when trying to get lock怎么解決

發布時間:2022-02-28 16:31:56 來源:億速云 閱讀:4700 作者:iii 欄目:開發技術

今天小編給大家分享一下mysql數據庫死鎖Deadlock found when trying to get lock怎么解決的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

查看mysql死鎖日志

show engine innodb status

找到信息中LATEST DETECTED DEADLOCK這一行,可以看到mysql的死鎖信息詳情

------------------------
LATEST DETECTED DEADLOCK
------------------------
2021-08-25 14:13:37 0x7facac6b8700
*** (1) TRANSACTION:
TRANSACTION 1589867098, ACTIVE 0 sec fetching rows
mysql tables in use 3, locked 3
LOCK WAIT 508 lock struct(s), heap size 57552, 4 row lock(s)
MySQL thread id 201608808, OS thread handle 140379228206848, query id 3088485657 172.18.119.16 root updating
UPDATE web_viewlog SET viewcount=viewcount+1,lasttime='2021-08-25 14:13:37' WHERE uid=2150174 and kename='21es1mmi'
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 564 page no 16179 n bits 208 index PRIMARY of table `w3cschool`.`web_viewlog` trx id 1589867098 lock_mode X locks rec but not gap waiting
Record lock, heap no 2 PHYSICAL RECORD: n_fields 16; compact format; info bits 0

MySQL有三種鎖的級別:頁級、表級、行級。

表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖沖突的概率最高,并發度最低。

行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖沖突的概率最低,并發度也最高。

頁面鎖:開銷和加鎖時間界于表鎖和行鎖之間;會出現死鎖;鎖定粒度界于表鎖和行鎖之間,并發度一般。

行級鎖

行級鎖在使用的時候并不是直接鎖掉這行記錄,而是鎖索引
如果一條sql用到了主鍵索引(mysql主鍵自帶索引),mysql會鎖住主鍵索引;
如果一條sql操作了非主鍵索引,mysql會先鎖住非主鍵索引,再鎖定主鍵索引.

什么情況下會造成死鎖

所謂死鎖<DeadLock>: 是指兩個或兩個以上的進程在執行過程中,
因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。
此時稱系統處于死鎖狀態或系統產生了死鎖,這些永遠在互相等竺的進程稱為死鎖進程。
表級鎖不會產生死鎖.所以解決死鎖主要還是針對于最常用的InnoDB

收集死鎖信息:

  1. 利用命令 SHOW ENGINE INNODB STATUS查看死鎖原因。

  2. 調試階段開啟 innodb_print_all_deadlocks,收集所有死鎖日志。

減少死鎖:

  1. 使用事務,不使用 lock tables 。

  2. 保證沒有長事務。

  3. 操作完之后立即提交事務,特別是在交互式命令行中。

  4. 如果在用 (SELECT ... FOR UPDATE or SELECT ... LOCK IN SHARE MODE),嘗試降低隔離級別。

  5. 修改多個表或者多個行的時候,將修改的順序保持一致。

  6. 創建索引,可以使創建的鎖更少。

  7. 最好不要用 (SELECT ... FOR UPDATE or SELECT ... LOCK IN SHARE MODE)。

  8. 如果上述都無法解決問題,那么嘗試使用 lock tables t1, t2, t3 鎖多張表

解決方法

首先先用sql查詢一下mysql的事務處理表

select * from information_schema.INNODB_TRX;

mysql數據庫死鎖Deadlock found when trying to get lock怎么解決

正常情況下的狀態都是RUNNING,但是在被鎖之后就會變成LOCK WAIT ,

一旦出現這種情況,就得殺死這個進程,如果進程殺不死就只能重啟Mysql服務了。


殺死進程

kill 進程ID

以上就是“mysql數據庫死鎖Deadlock found when trying to get lock怎么解決”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丰原市| 汕尾市| 闵行区| 镇康县| 灵武市| 壤塘县| 河源市| 苏尼特右旗| 南华县| 临沭县| 贡嘎县| 巫山县| 房产| 浦东新区| 婺源县| 裕民县| 乐亭县| 五指山市| 汝南县| 拉萨市| 航空| 高雄县| 鹿泉市| 闸北区| 穆棱市| 安图县| 怀仁县| 喀喇| 腾冲县| 东乡族自治县| 柞水县| 琼中| 伽师县| 琼海市| 霍山县| 绥中县| 吴堡县| 庆安县| 泾阳县| 南京市| 湖南省|