在一個高並發的MySQL服務器上,事務會遞歸檢測死鎖,當超過一定的深度時,性能的下降會變的不可接受。FACEBOOK早就提出了禁止死鎖檢測。
我們做了一個實驗,在禁止死鎖檢測後,TPS得到了極大的提升,如下圖所示:
禁止死鎖檢測後,即使死鎖發生,也不會回滾事務,而是全部等待到超時
Patch比較簡單,直接在死鎖檢測前加一層判斷即可:
if (innobase_deadlock_check && UNIV_UNLIKELY(lock_deadlock_occurs(lock, trx)))
。。。。
innobase_deadlock_check是在innodb裡新加的系統變量,用於控制是否打開死鎖檢測
摘自 記錄成長之路