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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle行連結的檢測和處理(轉)Oracle
- 文字檢測預處理地址
- 【Python資料分析基礎】: 異常值檢測和處理Python
- MySQL遊標和異常處理MySql
- mysql行鎖和死鎖檢測MySql
- 全面學習MySQL中的檢視(3) 指定檢視處理方式MySql
- Python-OpenCV 處理影象(五):影象中邊界和輪廓檢測PythonOpenCV
- 網站被黑檢測與網站被黑處理方法網站
- MySQL-日期和資料處理函式MySql函式
- Python-OpenCV 處理視訊(四): 運動檢測PythonOpenCV
- 影象處理入門:目標檢測和影象檢索綜述
- MySQL事務處理MySql
- MySQL 併發處理MySql
- MySQL 處理行號MySql
- MySQL異常處理MySql
- win10硬碟檢測不到怎麼辦 win10系統檢測不到硬碟處理方法Win10硬碟
- MySQL Case-information_schema檢視查詢慢處理一例MySqlORM
- MySQL show processlist故障處理MySql
- Mysql如何處理死鎖MySql
- MySQL的表碎片處理MySql
- MySQL使用Batch批量處理MySqlBAT
- MySQL加鎖處理分析MySql
- MYSQL--事務處理MySql
- Mysql故障處理2則MySql
- MySQL 加鎖處理分析MySql
- mysql事務處理(轉)MySql
- MySQL和Oracle的新增欄位的處理差別MySqlOracle
- MySQL定義異常和異常處理詳解MySql
- 多對一處理 和一對多處理的處理
- 聚焦Python和OpenCV的影像處理,3D場景重建,物件檢測和跟蹤 - 物件分類和定位PythonOpenCV3D物件
- 檢測-紋理表面凸起、凹痕、劃痕缺陷的檢測
- PHP錯誤處理和異常處理PHP
- crontab 問題檢查與處理
- Python 影像處理 OpenCV (13): Scharr 運算元和 LOG 運算元邊緣檢測技術PythonOpenCV
- MySQL處理資料庫和表的常用命令MySql資料庫
- MySQL 處理重複資料MySql
- mysql 1129處理MySql
- MySQL 之動態字串處理MySql字串