mysql8查看鎖信息
一。準備環(huán)境
1.登錄mysql,設置鎖等待時間,然后退出。
mysql> set global innodb_lock_wait_timeout=1200; Query OK, 0 rows affected (0.00 sec)
2.再次登錄MySQL。打開第一個session
3.登錄msyql,打開第二個session
2.登錄打開第二個session mysql> 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 test mysql> 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對應的sql語句,說明執(zhí)行這條sql阻塞了。事務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)。對應的ENGINE_TRANSACTION_ID的值就是a操作的圖字段trx_id的值1755425。
4.還要查看鎖事務的對應關系,
mysql> select locked_table_name,locked_index,waiting_pid,waiting_lock_id,blocking_lock_id,blocking_pid from sys.innodb_lock_waits;
再次對比下??梢哉业疥P系,1等待的事務處理,是被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,對應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對應的線程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 對應的線程THREAD_PID 為56.
waiting_pid為16 對應的線程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_waits
mysql 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就行了
總結
到此這篇關于mysql8查看鎖信息的文章就介紹到這了,更多相關mysql8查看鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
深入mysql創(chuàng)建自定義函數(shù)與存儲過程的詳解
本篇文章是對mysql創(chuàng)建自定義函數(shù)與存儲過程進行了詳細的分析介紹,需要的朋友參考下2013-06-06MySQL中的datediff()方法和timestampdiff()方法的應用示例小結
在MySQL中,DATEDIFF()函數(shù)和TIMESTAMPDIFF()函數(shù)用于計算日期和時間之間的差異,TIMESTAMPDIFF()函數(shù)返回的結果是整數(shù),但你可以通過在計算過程中使用適當?shù)某▉慝@得所需的小數(shù)部分,本文介紹MySQL中的datediff()方法和timestampdiff()方法的應用,感興趣的朋友一起看看吧2023-12-12MySQL 5.7升級8.0報異常:ONLY_FULL_GROUP_BY的問題解決
本文主要介紹了MySQL 5.7升級8.0報異常的問題解決,主要是ONLY_FULL_GROUP_BY,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-11-11Oracle和MySQL中生成32位uuid的方法舉例(國產(chǎn)達夢同Oracle)
近日遇到朋友問及如何生成UUID,UUID是通用唯一識別碼(Universally Unique Identifier)方法,這里給大家總結下,這篇文章主要給大家介紹了關于Oracle和MySQL中生成32位uuid的方法,需要的朋友可以參考下2023-08-08