mysql innodb_deadlock_detect檢測和處理
innodb_deadlock_detect是MySQL的一個系統變數。
版本: 5.7.15
命令列格式:–innodb-deadlock-detect
影響範圍:Global
引數型別:boolean
預設值:ON
作用:該選項使用了禁用MySQL的死鎖檢測功能的。在高併發系統上,當許多執行緒等待同一個鎖時,死鎖檢測可能導致速度減慢。 有時,當發生死鎖時,如果禁用了死鎖檢測則可能會更有效,這樣可以依賴innodb_lock_wait_timeout的設定進行事務回滾。
MySQL預設情況下是開啟了死鎖檢測的,InnoDB自動檢測傳送死鎖的事務,並回滾其中的一個事務或所有導致死鎖的事務。InnoDB會在導致死鎖的十五中選擇一個權重比較小的事務來回滾,這個權重值可能是由該事務insert, updated, deleted的行數決定的。
如果innodb_table_locks = 1(預設值)並且autocommit = 0,則InnoDB能感知到表鎖的存在,並且上層的MySQL層知道行級鎖。 否則,InnoDB無法檢測到由MySQL LOCK TABLES語句設定的表鎖或由除InnoDB之外的儲存引擎設定的鎖定的死鎖。 透過設定innodb_lock_wait_timeout系統變數的值來解決這些情況。
當InnoDB執行事務的完全回滾時,將釋放由事務設定的所有鎖。 但是,如果單個SQL語句由於錯誤而回滾,則語句設定的某些鎖可能會被保留。 這是因為InnoDB以一種格式儲存行鎖,以致之後不能知道哪個鎖由哪個語句設定。
如果SELECT呼叫事務中儲存的函式,並且函式中的語句失敗,則該語句將回滾。 此外,如果在此之後執行ROLLBACK,整個事務將回滾。
如果InnoDB監控器輸出的最近死鎖檢測部分包含一條訊息,指出TOO DEEP OR LONG SEARCH IN THE LOCK TABLE WAITS-FOR GRAPH, WE WILL ROLL BACK FOLLOWING TRANSACTION,這表示處於等待的事務列表長度已達到限制200。超過200個事務的等待列表被視為死鎖,並且將回滾嘗試檢查等待列表的事務。 如果鎖定執行緒必須檢視等待列表上的事務擁有的超過1,000,000個鎖,則也可能發生相同的錯誤。
禁用死鎖檢測
可以透過選項:innodb_deadlock_detect來關閉死鎖檢測。
版本: 5.7.15
命令列格式:–innodb-deadlock-detect
影響範圍:Global
引數型別:boolean
預設值:ON
作用:該選項使用了禁用MySQL的死鎖檢測功能的。在高併發系統上,當許多執行緒等待同一個鎖時,死鎖檢測可能導致速度減慢。 有時,當發生死鎖時,如果禁用了死鎖檢測則可能會更有效,這樣可以依賴innodb_lock_wait_timeout的設定進行事務回滾。
MySQL預設情況下是開啟了死鎖檢測的,InnoDB自動檢測傳送死鎖的事務,並回滾其中的一個事務或所有導致死鎖的事務。InnoDB會在導致死鎖的十五中選擇一個權重比較小的事務來回滾,這個權重值可能是由該事務insert, updated, deleted的行數決定的。
如果innodb_table_locks = 1(預設值)並且autocommit = 0,則InnoDB能感知到表鎖的存在,並且上層的MySQL層知道行級鎖。 否則,InnoDB無法檢測到由MySQL LOCK TABLES語句設定的表鎖或由除InnoDB之外的儲存引擎設定的鎖定的死鎖。 透過設定innodb_lock_wait_timeout系統變數的值來解決這些情況。
當InnoDB執行事務的完全回滾時,將釋放由事務設定的所有鎖。 但是,如果單個SQL語句由於錯誤而回滾,則語句設定的某些鎖可能會被保留。 這是因為InnoDB以一種格式儲存行鎖,以致之後不能知道哪個鎖由哪個語句設定。
如果SELECT呼叫事務中儲存的函式,並且函式中的語句失敗,則該語句將回滾。 此外,如果在此之後執行ROLLBACK,整個事務將回滾。
如果InnoDB監控器輸出的最近死鎖檢測部分包含一條訊息,指出TOO DEEP OR LONG SEARCH IN THE LOCK TABLE WAITS-FOR GRAPH, WE WILL ROLL BACK FOLLOWING TRANSACTION,這表示處於等待的事務列表長度已達到限制200。超過200個事務的等待列表被視為死鎖,並且將回滾嘗試檢查等待列表的事務。 如果鎖定執行緒必須檢視等待列表上的事務擁有的超過1,000,000個鎖,則也可能發生相同的錯誤。
禁用死鎖檢測
可以透過選項:innodb_deadlock_detect來關閉死鎖檢測。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2154232/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 文字檢測預處理地址
- 【Python資料分析基礎】: 異常值檢測和處理Python
- mysql行鎖和死鎖檢測MySql
- [20230208]windows批處理檢測隨身碟.txtWindows
- mysql 1129處理MySql
- MySQL-日期和資料處理函式MySql函式
- MySQL事務處理MySql
- MySQL 併發處理MySql
- 影象處理入門:目標檢測和影象檢索綜述
- MySQL Case-information_schema檢視查詢慢處理一例MySqlORM
- win10硬碟檢測不到怎麼辦 win10系統檢測不到硬碟處理方法Win10硬碟
- MySQL的表碎片處理MySql
- MySQL show processlist故障處理MySql
- Mysql如何處理死鎖MySql
- 聚焦Python和OpenCV的影像處理,3D場景重建,物件檢測和跟蹤 - 物件分類和定位PythonOpenCV3D物件
- 多對一處理 和一對多處理的處理
- Python 影像處理 OpenCV (13): Scharr 運算元和 LOG 運算元邊緣檢測技術PythonOpenCV
- MySQL 處理重複資料MySql
- 檢測-紋理表面凸起、凹痕、劃痕缺陷的檢測
- Python錯誤處理和異常處理(二)Python
- Apache Beam,批處理和流式處理的融合!Apache
- 【問題處理】MySQL忘記root密碼的處理辦法MySql密碼
- Linux 磁碟 使用率 檢視 處理Linux
- 體檢伺服器nginx故障處理伺服器Nginx
- Debezium zookeeper kafka mysql資料處理KafkaMySql
- Mysql自動處理同步報錯MySql
- mysql 5.7 執行緒阻塞處理MySql執行緒
- 聊聊MySQL是如何處理排序的MySql排序
- MySQL 動態字串處理詳解MySql字串
- MySQL:亂碼問題處理流程MySql
- windows 處理bat連線本地mysqlWindowsBATMySql
- 叢集故障處理之處理思路以及健康狀態檢查(三十二)
- mysql建立索引和檢視MySql索引
- 深入學習和理解Django檢視層:處理請求與響應Django
- 體面編碼之異常日誌和測試處理
- 事件分發和處理事件
- 自然場景文字檢測工程中使用所以程式碼和理論
- 處理專案檢視中的選擇