首頁 > 軟體

MySQL檢視鎖的實現程式碼

2023-02-06 06:00:42

MySQL檢視鎖的sql

檢視資料庫狀態

# 會顯示加鎖的資訊等等
show engine innodb status;  

檢視正在執行的執行緒資訊

show full processlist;

檢視正在鎖的表

show open tables where in_use > 0;
show open tables;

檢視鎖的型別、狀態

show status like '%lock%';

5.0後,增加了3個關於鎖的表

MySQL5.7版本

  • INFORMATION_SCHEMA.innodb_trx 當前執行的所有事務
  • INFORMATION_SCHEMA.innodb_locks 當前出現的鎖
  • INFORMATION_SCHEMA.innodb_lock_waits 鎖等待的對應關係

MySQL8.0版本

8.0後,performance_schema.data_locks代替了INFORMATION_SCHEMA.innodb_locks ,performance_schema.data_lock_waits代替了INFORMATION_SCHEMA.innodb_lock_waits

檢視正在鎖的事務

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; -- 5.7
SELECT * FROM performance_schema.data_locks; -- 8.0

檢視等待鎖的事務

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; -- 5.7
SELECT * FROM performance_schema.data_lock_waits; -- 8.0

檢視行鎖情況

show status like 'InnoDB_row_lock%';

檢視表鎖情況

show status like 'table%';

開啟鎖監控

開啟監控後,可以看到鎖的具體資訊以及加鎖順序等,更容易分析死鎖。

方式一:建立監控表,監控某個資料庫

開啟:

CREATE TABLE innodb_lock_monitor (a INT) ENGINE=INNODB;

關閉:

DROP TABLE innodb_lock_monitor;

注意:在未擁有設定全域性屬性許可權下也可以開啟該功能。

方式二,開啟全域性監控

開啟:

set GLOBAL innodb_status_output=ON;
set GLOBAL innodb_status_output_locks=ON;

關閉:

set GLOBAL innodb_status_output=OFF;
set GLOBAL innodb_status_output_locks=OFF;

檢視資料庫狀態

show engine innodb status G;

其他監控

標準監控(Standard InnoDB Monitor):監視活動事務持有的表鎖、行鎖;事務鎖等待;執行緒號誌等待;檔案IO請求;buffer pool統計資訊;InnoDB主執行緒purge和change buffer merge活動。

# 方式一
CREATE TABLE innodb_monitor (a INT) ENGINE=INNODB;
DROP TABLE innodb_monitor;
# 方式二
set GLOBAL innodb_status_output=ON;
set GLOBAL innodb_status_output=OFF;

鎖監控(InnoDB Lock Monitor):提供額外的鎖資訊。

# 方式一
CREATE TABLE innodb_lock_monitor (a INT) ENGINE=INNODB;
DROP TABLE innodb_lock_monitor;
# 方式二
set GLOBAL innodb_status_output=ON;
set GLOBAL innodb_status_output_locks=ON;
set GLOBAL innodb_status_output=OFF;
set GLOBAL innodb_status_output_locks=OFF;

表空間監控(InnoDB Tablespace Monitor):顯示共用表空間中的檔案段以及表空間資料結構設定驗證。

CREATE TABLE innodb_tablespace_monitor (a INT) ENGINE=INNODB;
DROP TABLE innodb_tablespace_monitor;

表監控(InnoDB Table Monitor):顯示內部資料字典的內容。

CREATE TABLE innodb_tablespace_monitor (a INT) ENGINE=INNODB;
DROP TABLE innodb_tablespace_monitor;

到此這篇關於MySQL檢視鎖的實現程式碼的文章就介紹到這了,更多相關MySQL檢視鎖內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com