mysql檢視當前資料庫鎖請求
阿新 • • 發佈:2018-12-05
information_shcema下的三張表(通過這三張表可以更新監控當前事物並且分析存在的鎖問題)
—— innodb_trx (列印innodb核心中的當前活躍事務)
—— innodb_locks ( 列印當前狀態產生的innodb鎖 僅在有鎖等待時列印)
—— innodb_lock_waits(列印當前狀態產生的innodb鎖等待 僅在有鎖等待時列印)
1) innodb_trx表結構說明 (摘取最能說明問題的8個欄位)
欄位名 | 說明 |
trx_id | innodb儲存引擎內部唯一的事物ID |
trx_state | 當前事物狀態(running和lock wait兩種狀態) |
trx_started | 事物的開始時間 |
trx_requested_lock_id | 等待事物的鎖ID,如trx_state的狀態為Lock wait,那麼該值帶表當前事物等待之前事物佔用資源的ID,若trx_state不是Lock wait 則該值為NULL |
trx_wait_started | 事物等待的開始時間 |
trx_weight |
事物的權重,在innodb儲存引擎中,當發生死鎖需要回滾的時,innodb儲存引擎會選擇該值最小的進行回滾 |
trx_mysql_thread_id | mysql中的執行緒id, 即show processlist顯示的結果 |
trx_query | 事物執行的SQL語句 |
2)innodb_locks表結構說明
欄位名 | 說明 |
lock_id | 鎖的ID |
lock_trx_id |
事物的ID |
lock_mode | 鎖的模式(S鎖與X鎖兩種模式) |
lock_type | 鎖的型別 表鎖還是行鎖(RECORD) |
lock_table | 要加鎖的表 |
lock_index | 鎖住的索引 |
lock_space | 鎖住物件的space id |
lock_page | 事物鎖定頁的數量,若是表鎖則該值為NULL |
lock_rec | 事物鎖定行的數量,若是表鎖則該值為NULL |
lock_data | 事物鎖定記錄主鍵值,若是表鎖則該值為NULL(此選項不可信) |
3)innodb_lock_waits表結構說明
欄位名 | 說明 |
requesting_trx_id | 申請鎖資源的事物ID |
requested_lock_id | 申請的鎖的ID |
blocking_trx_id | 阻塞其他事物的事物ID |
blocking_lock_id | 阻塞其他鎖的鎖ID |