mysql8.0查看鎖信息


【0】核心表

  sys.`innodb_lock_waits`

  performance_schema.events_statements_history

  performance_schema.data_locks

  performance_schema.data_locks_wait

【1】查看鎖信息

  performance_schema.data_locks

  performance_schema.data_locks_wait

線上mysql版本為8.0.11,對於最近的幾個版本越來越像Orale了,有了較為豐富的系統字典,也可以查看系統的等待事件,現在線上出現被鎖語句的情況也可以通過數據字典直接查詢出來了,在此記錄下以供參考。

首先查看系統鎖情況,下面這條語句可以看到持有鎖的線程以及線程ID,這里需要注意下,session_id也就是show processlist查詢出來的鏈接ID,在這個表里表現為PID,同時該表也記錄了trx_id,最后還給出了解決方案也就是如何kill持有鎖的進程。

  

 

 

 
mysql> SELECT * FROM sys.`innodb_lock_waits` \G
 
*************************** 1. row ***************************
 
wait_started: 2019-01-28 14:27:03
 
wait_age: 00:00:03
 
wait_age_secs: 3
 
locked_table: `test`.`t`
 
locked_table_schema: test
 
locked_table_name: t
 
locked_table_partition: NULL
 
locked_table_subpartition: NULL
 
locked_index: GEN_CLUST_INDEX
 
locked_type: RECORD
 
waiting_trx_id: 19758723
 
waiting_trx_started: 2019-01-28 14:27:03
 
waiting_trx_age: 00:00:03
 
waiting_trx_rows_locked: 1
 
waiting_trx_rows_modified: 0
 
waiting_pid: 4202
 
waiting_query: update t set id=8
 
waiting_lock_id: 19758723:4998:4:2
 
waiting_lock_mode: X
 
blocking_trx_id: 19748728
 
blocking_pid: 4200
 
blocking_query: NULL
 
blocking_lock_id: 19748728:4998:4:2
 
blocking_lock_mode: X
 
blocking_trx_started: 2019-01-28 10:58:27
 
blocking_trx_age: 03:28:39
 
blocking_trx_rows_locked: 2
 
blocking_trx_rows_modified: 1
 
sql_kill_blocking_query: KILL QUERY 4200
 
sql_kill_blocking_connection: KILL 4200
 
1 row in set (0.02 sec

 

【2】查看當前被鎖的語句

 
##等待鎖的語句
 
SELECT * FROM performance_schema.events_statements_history WHERE thread_id IN(
 
SELECT b.`THREAD_ID` FROM sys.`innodb_lock_waits` AS a , performance_schema.threads AS b
 
WHERE a.waiting_pid = b.`PROCESSLIST_ID`)
 
ORDER BY timer_start ASC;

 

 

【3】看持有鎖的語句

可以通過如下方式

##持有鎖的語句
 
SELECT * FROM performance_schema.events_statements_history WHERE thread_id IN(
 
SELECT b.`THREAD_ID` FROM sys.`innodb_lock_waits` AS a , performance_schema.threads AS b
 
WHERE a.`blocking_pid` = b.`PROCESSLIST_ID`)
 
ORDER BY timer_start ASC;

 

 

大部分轉自:https://www.pianshen.com/article/3307195897/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM