Innodb死鎖日誌分段解讀-如何閱讀死鎖日誌

死鎖分析是DBA日常工作之一,一般死鎖分析的步驟如下

  • 閱讀死鎖日誌
  • 查看錶機構,甚至不需要
  • 定位事務場景,進行分析

而正確的理解死鎖日誌,是進行死鎖分析的重點,下面就是對死鎖日誌的分段解讀。

一般的死鎖日誌如下

------------------------
LATEST DETECTED DEADLOCK
------------------------
2019-01-09 15:11:45 0x70000cc97000   //死鎖發生時間

*** (1) TRANSACTION:                 //事務1
TRANSACTION 1819662/*事務id,trx->id*/, ACTIVE 13 sec starting index read //事務1從開始執行到被死鎖檢測經歷的時間,生產環境一般看到的是0  

mysql tables in use 1, locked 1 //事務1當前查詢使用到的表,以及已經加鎖的表。分別是trx->n_mysql_tables_in_use,trx->mysql_n_tables_locked

LOCK WAIT 2 lock struct(s), heap size 1160, 1 row lock(s)// 這行的LOCK WAIT 2 lock struct(s),應該分成兩部分解讀,而不是說等待兩個鎖結構。LOCK WAIT表示事務狀態處於鎖等待,但是這是個不加鎖的髒讀輸出。有可能不準確,2 lock struct(s)表示此事務中的鎖結構數目,UT_LIST_GET_LEN(trx->lock.trx_locks); heap size代表內存堆的byte長度。1 row locks(s) 是鎖了一行。


MySQL thread id 5, OS thread handle 123145517932544, query id 39 localhost root statistics
select * from t2 where id = 5 for update
//processlist id , 對應的操作系統的線程結構(pthread_t),查詢ID,來源IP,用戶名,操作信息(proc_info,不受保護)

*** (1) WAITING FOR THIS LOCK TO BE GRANTED:  //此事務要加的鎖,但是被阻塞。


RECORD LOCKS/*行鎖*/ space id 68/*表空間id*/ page no 3/*page id*/ n bits 72/*bitmap的大小*/ index PRIMARY /*索引*/of table `test_lock`.`t2`/*表名*/ trx id 1819662 /*事務id*/ lock_mode X /*排他鎖*/ locks rec but not gap /*只鎖行記錄,不鎖間隙*/ waiting /*加鎖等待*/
Record lock, heap no 6/*索引頁中所處的邏輯位置*/ PHYSICAL RECORD: n_fields 4; compact format; info bits 0
 0: len 4; hex 80000005; asc     ;;
 1: len 6; hex 0000001b984f; asc      O;;
 2: len 7; hex 48000001890110; asc H      ;;
 3: len 8; hex 7570646174655f33; asc update_3;;

*** (2) TRANSACTION:
TRANSACTION 1819663, ACTIVE 24 sec starting index read
mysql tables in use 1, locked 1
4 lock struct(s), heap size 1160, 2 row lock(s)
MySQL thread id 4, OS thread handle 123145516838912, query id 40 localhost root statistics
select * from t2 where id = 5 for update
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 68 page no 3 n bits 72 index PRIMARY of table `test_lock`.`t2` trx id 1819663 lock mode S locks rec but not gap
Record lock, heap no 6 PHYSICAL RECORD: n_fields 4; compact format; info bits 0
 0: len 4; hex 80000005; asc     ;;
 1: len 6; hex 0000001b984f; asc      O;;
 2: len 7; hex 48000001890110; asc H      ;;
 3: len 8; hex 7570646174655f33; asc update_3;;

*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 68 page no 3 n bits 72 index PRIMARY of table `test_lock`.`t2` trx id 1819663 lock_mode X locks rec but not gap waiting
Record lock, heap no 6 PHYSICAL RECORD: n_fields 4; compact format; info bits 0
 0: len 4; hex 80000005; asc     ;;
 1: len 6; hex 0000001b984f; asc      O;;
 2: len 7; hex 48000001890110; asc H      ;;
 3: len 8; hex 7570646174655f33; asc update_3;;

*** WE ROLL BACK TRANSACTION (1)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章