mysql8查看鎖信息
一。準(zhǔn)備環(huán)境
1.登錄mysql,設(shè)置鎖等待時(shí)間,然后退出。
mysql> set global innodb_lock_wait_timeout=1200; Query OK, 0 rows affected (0.00 sec)
2.再次登錄MySQL。打開第一個(gè)session
3.登錄msyql,打開第二個(gè)session
2.登錄打開第二個(gè)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,會(huì)一直卡住。
4.登錄MySQL,打開第三個(gè)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,同時(shí)trx_query對(duì)應(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)了一個(gè)WAITING,同時(shí)THREAD_ID為57的線程處于等待狀態(tài)。對(duì)應(yīng)的ENGINE_TRANSACTION_ID的值就是a操作的圖字段trx_id的值1755425。
4.還要查看鎖事務(wù)的對(duì)應(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;
再次對(duì)比下??梢哉业疥P(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;
同時(shí),查看waiting_pid跟blocking_pid的值就是線程id,對(duì)應(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對(duì)應(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 對(duì)應(yīng)的線程THREAD_PID 為56.
waiting_pid為16 對(duì)應(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_waits
mysql 8.0中查看死鎖代碼變了
如果繼續(xù)用5.7的代碼會(huì)提示報(bào)錯(cuò)
Unknown table ‘INNODB_LOCKS' in information_schema
所以在8.0使用以下代碼
#查看死鎖 select * from performance_schema.data_locks; #查看死鎖等待時(shí)間 select * from performance_schema.data_lock_waits;
然后kill就行了
總結(jié)
到此這篇關(guān)于mysql8查看鎖信息的文章就介紹到這了,更多相關(guān)mysql8查看鎖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入mysql創(chuàng)建自定義函數(shù)與存儲(chǔ)過程的詳解
本篇文章是對(duì)mysql創(chuàng)建自定義函數(shù)與存儲(chǔ)過程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06MySQL中的datediff()方法和timestampdiff()方法的應(yīng)用示例小結(jié)
在MySQL中,DATEDIFF()函數(shù)和TIMESTAMPDIFF()函數(shù)用于計(jì)算日期和時(shí)間之間的差異,TIMESTAMPDIFF()函數(shù)返回的結(jié)果是整數(shù),但你可以通過在計(jì)算過程中使用適當(dāng)?shù)某▉慝@得所需的小數(shù)部分,本文介紹MySQL中的datediff()方法和timestampdiff()方法的應(yīng)用,感興趣的朋友一起看看吧2023-12-12MySQL 5.7升級(jí)8.0報(bào)異常:ONLY_FULL_GROUP_BY的問題解決
本文主要介紹了MySQL 5.7升級(jí)8.0報(bào)異常的問題解決,主要是ONLY_FULL_GROUP_BY,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11Oracle和MySQL中生成32位uuid的方法舉例(國產(chǎn)達(dá)夢同Oracle)
近日遇到朋友問及如何生成UUID,UUID是通用唯一識(shí)別碼(Universally Unique Identifier)方法,這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于Oracle和MySQL中生成32位uuid的方法,需要的朋友可以參考下2023-08-08與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(五)--運(yùn)算符
MYSQL中的運(yùn)算符很多,這一節(jié)主要講MYSQL中有的,而SQLSERVER沒有的運(yùn)算符2014-06-06