亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

香港| 绥宁县| 宜宾市| 长治市| 敦化市| 信宜市| 盈江县| 雷州市| 寻甸| 紫金县| 富裕县| 饶平县| 泊头市| 金堂县| 麻阳| 瑞金市| 博白县| 日喀则市| 行唐县| 松江区| 肥东县| 上杭县| 江都市| 临澧县| 大宁县| 满洲里市| 象山县| 乌拉特后旗| 龙江县| 乐安县| 乌什县| 贵港市| 潍坊市| 隆尧县| 清徐县| 资源县| 正镶白旗| 罗甸县| 建湖县| 蓬安县| 蛟河市|