您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關mysql死鎖deadlock相關幾個系統變量innodb_lock_wait_timeout是怎樣的,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
隨著對于mysql死鎖知識的進一步了解,發現與死鎖相關的幾個系統變量。下面梳理這幾個技術概念,便于更進一步掌握mysql死鎖的概念。這樣在出現一些復雜的死鎖問題時,也有助于更快速解決故障。
mysql 5.7.15引入此系統變量,可取值有2個,分別為:off與on。
默認值為on,表明開啟互鎖檢測功能。
但是有運維經驗的同學或許碰到過,在一些高并發的數據庫,如果開啟了死鎖檢測,因為死鎖檢測進程會去檢測是否發現死鎖,則會導致數據庫性能下降,因為系統必須消耗資源用于定期檢測是否發生死鎖。
建議在高并發情況下,可以考慮關閉此功能。當然一般情況,保持默認值即可。
innodb_lock_wait_timeout只能用于innodb表的事務(不適用于myisam表,因此它只有表鎖,而無行鎖功能)。在發生鎖等
待時,到達指定的值,則提示鎖等待超時,自動回滾報 鎖超時 的當前SQL語句(注:不是事務),這樣的話,就會導致所屬事務的產生數據不一致。所以必須保證在讓整個事務回滾,這個由系統變量 innodb_rollback_on_timeout或者命令行選項--innodb-rollback-on-timeout控制。
innodb_lock_wait_timeout單位為秒,默認值為50秒。如果出現鎖超時,報錯信息見下:
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
對于高并發的OLTP數據庫環境,建議減少innodb_lock_wait_timeout系統變量。你試想一下,如果鎖超時時間檢查一短,就可以提升并發度;而對于OLAP數據庫,可以考慮增加innodb_lock_wait_timeout系統變量,因為OLAP不需要很高的并發度,如果此值過低,鎖超時會話就可以等待其它持鎖會話完成,而不是馬上報錯回滾,畢竟每次更新的數據量極大,一回滾半天白作了。
如果啟用了innodb_deadlock_detect=on(默認值),則innodb_lock_wait_timeout不會起作用。因為啟用前者,一發現死鎖,馬上回滾某個死鎖事務。但如果配置innodb_deadlock_detect=off,則innodb_lock_wait_timeout會起作用,讓后者來控制死鎖的回滾。
mysql> show variables like '%innodb%lock%timeout%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 50 |
+--------------------------+-------+
1 row in set (0.00 sec)
關于mysql死鎖deadlock相關幾個系統變量innodb_lock_wait_timeout是怎樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。