mysql8查看鎖信息
一。準(zhǔn)備環(huán)境
1.登錄mysql,設(shè)置鎖等待時間,然后退出。
mysql> set global innodb_lock_wait_timeout=1200;Query OK, 0 rows affected (0.00 sec)2.再次登錄MySQL。打開第一個session
3.登錄msyql,打開第二個session
2.登錄打開第二個sessionmysql> set autocommit=0;Query OK, 0 rows affected (0.00 sec)mysql> mysql> select @@autocommit;+--------------+| @@autocommit |+--------------+| 0 |+--------------+1 row in set (0.00 sec)mysql> use testmysql> update temp set name='bb' where id=1; #執(zhí)行這條sql,會一直卡住。4.登錄MySQL,打開第三個session。
a:查看
mysql> select trx_id,trx_state,trx_started,trx_tables_locked,trx_rows_locked,trx_query from information_schema.innodb_trx;看上圖trx_state的狀態(tài)LOCK_WAIT,同時trx_query對應(yīng)的sql語句,說明執(zhí)行這條sql阻塞了。事務(wù)id的字段trx_id的值1755425
b:查看
mysql> select ENGINE_LOCK_ID,ENGINE_TRANSACTION_ID,LOCK_MODE,LOCK_TYPE,INDEX_NAME,OBJECT_SCHEMA,OBJECT_NAME,LOCK_DATA,LOCK_STATUS,THREAD_ID from performance_schema.data_locks;看上圖的lock_status出現(xiàn)了一個WAITING,同時THREAD_ID為57的線程處于等待狀態(tài)。對應(yīng)的ENGINE_TRANSACTION_ID的值就是a操作的圖字段trx_id的值1755425。
4.還要查看鎖事務(wù)的對應(yīng)關(guān)系,
mysql> select locked_table_name,locked_index,waiting_pid,waiting_lock_id,blocking_lock_id,blocking_pid from sys.innodb_lock_waits;再次對比下。可以找到關(guān)系,1等待的事務(wù)處理,是被2阻塞了。也就是鎖住了,需要2釋放鎖,1才可以執(zhí)行
mysql> select ENGINE_LOCK_ID,ENGINE_TRANSACTION_ID,LOCK_MODE,LOCK_TYPE,INDEX_NAME,OBJECT_SCHEMA,OBJECT_NAME,LOCK_DATA,LOCK_STATUS,THREAD_ID from performance_schema.data_locks;mysql> select locked_table_name,locked_index,waiting_pid,waiting_lock_id,blocking_lock_id,blocking_pid from sys.innodb_lock_waits;同時,查看waiting_pid跟blocking_pid的值就是線程id,對應(yīng)processlist
mysql> select locked_table_name,locked_index,waiting_pid,waiting_lock_id,blocking_lock_id,blocking_pid from sys.innodb_lock_waits;mysql> show processlist;5.現(xiàn)在上面圖看不到blocking_pid對應(yīng)的線程THREAD_PID
mysql> select ENGINE_LOCK_ID,ENGINE_TRANSACTION_ID,LOCK_MODE,LOCK_TYPE,INDEX_NAME,OBJECT_SCHEMA,OBJECT_NAME,LOCK_DATA,LOCK_STATUS,THREAD_ID from performance_schema.data_locks;mysql> select locked_table_name,locked_index,waiting_pid,waiting_lock_id,blocking_lock_id,blocking_pid from sys.innodb_lock_waits;6.通過上圖可以看到。 blocking_pid為15 對應(yīng)的線程THREAD_PID 為56.
waiting_pid為16 對應(yīng)的線程THREAD_PID 為57.
mysql> select THREAD_ID,EVENT_ID,EVENT_NAME,SQL_TEXT from performance_schema.events_statements_history where THREAD_ID in (56,57) order by THREAD_ID,EVENT_ID;從圖上分析,就可以看出blocking_pid,也就是已經(jīng)鎖了執(zhí)行的sql是啥。
附:mysql8.0查看死鎖
記錄工作日常遇到的問題
在mysql5.7、mysql5.8等5系版本中
查看死鎖代碼是
select * from information_schema.innodb_locks;查看等待鎖的代碼
select * from information_schema.innodb_lock_waitsmysql 8.0中查看死鎖代碼變了
如果繼續(xù)用5.7的代碼會提示報錯
Unknown table ‘INNODB_LOCKS' in information_schema所以在8.0使用以下代碼
#查看死鎖select * from performance_schema.data_locks;#查看死鎖等待時間select * from performance_schema.data_lock_waits;然后kill就行了
總結(jié)
到此這篇關(guān)于mysql8查看鎖信息的文章就介紹到這了,更多相關(guān)mysql8查看鎖內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
