2016-09-23 53 views
2

我最近升級到mysql 5.7並觀察頻繁的死鎖問題。是否有任何與鎖定5.7相關的更改,因爲我之前沒有遇到過這個問題。我最近升級到mysql 5.7並觀察頻繁的死鎖問題。是否有任何與5.7鎖定有關的變化?

我有一個簡單的表稱爲retry_records具有自動遞增的id作爲主鍵和列unique_reference作爲唯一索引和兩列。這個表格被用於完全多線程的環境中,其中一段代碼從該表中選擇n條記錄,在處理失敗的情況下處理數據並更新該表,並且其他段的代碼從表中刪除少量處理的記錄,並且另一段代碼段在此表中插入新記錄。沒有加入任何查詢,沒有批量插入,批量更新,除選擇以外的批量刪除。所有更新/刪除/插入事務都有單個語句。即使那樣,我正在觀察插入時的死鎖。 下面是日誌:

------------------------ 
LATEST DETECTED DEADLOCK 
------------------------ 
2016-09-22 13:05:09 0x7f3f427e0700 
*** (1) TRANSACTION: 
TRANSACTION 39420432534, ACTIVE 0 sec inserting 
mysql tables in use 1, locked 1 
LOCK WAIT 3 lock struct(s), heap size 1136, 2 row lock(s), undo log entries 1 
MySQL thread id 37503, OS thread handle 139917976340224, query id 1695822465 

插入查詢..

*** (1) WAITING FOR THIS LOCK TO BE GRANTED: 
RECORD LOCKS space id 1334 page no 1726952 n bits 312 index id of table `database_name`.`table_name` trx id 39420432534 lock_mode X insert intention waiting 
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0 
0: len 8; hex 73757072656d756d; asc supremum;; 

*** (2) TRANSACTION: 
TRANSACTION 39420432524, ACTIVE 0 sec inserting 
mysql tables in use 1, locked 1 
6 lock struct(s), heap size 1136, 5 row lock(s), undo log entries 1 
MySQL thread id 37494, OS thread handle 139909675222784, query id 1695822438 

另一個插入查詢...

*** (2) HOLDS THE LOCK(S): 
RECORD LOCKS space id 1334 page no 1726952 n bits 312 index id of table 


*** (2) WAITING FOR THIS LOCK TO BE GRANTED: 
RECORD LOCKS space id 1334 page no 1726952 n bits 312 index id of table 

Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0 
0: len 8; hex 73757072656d756d; asc supremum;; 
+0

你的頭銜似乎暗示1)你最近升級到5.7,2)你以前沒有遇到過這些問題。如果這些都是真的,請直接在您的問題中說明它們,以及您升級的版本。無論其他點是否爲真,實際查詢和「SHOW CREATE TABLE tablename」輸出都不會受到影響。 –

+0

感謝Willem Renzema和Ryan Vincent的回覆。我已經添加了幾個與問題有關的更多細節。請幫忙。 – Rahul

回答

0

我遇到過類似的問題。自5.7開始,有一個新的參數名稱innodb_deadlock_detect

此選項用於禁用死鎖檢測。在高併發性 系統上,當多個線程等待相同的鎖時,死鎖檢測會導致速度變慢。有時,在發生死鎖時,禁用 死鎖檢測並依賴innodb_lock_wait_timeout設置 進行事務回滾可能更有效。

禁用它可以提高性能並減少死鎖問題。