久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL如何查看當前數據庫鎖請求

127次閱讀
沒有評論

共計 2899 個字符,預計需要花費 8 分鐘才能閱讀完成。

丸趣 TV 小編給大家分享一下 MySQL 如何查看當前數據庫鎖請求,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

MySQL 版本:5.6.21

MySQL 提供了查看當前數據庫鎖請求的三種方法:

1. show  full  processlist 命令
  觀察 state 和 info 列

2. show engine  innodb status\G 命令
  查看 TRANSACTIONS 部分和 LATEST DETECTED DEADLOCK 兩個部分

3. information_shcema 下的三張表(通過這三張表可以更新監控當前事物并且分析存在的鎖問題)
 —— innodb_trx(

打印 innodb 內核中的當前活躍(ACTIVE)事務)

 —— innodb_locks 

(打印當前狀態產生的 innodb 鎖 僅在有鎖等待時打印)

 —— innodb_lock_waits

(打印當前狀態產生的 innodb 鎖等待 僅在有鎖等待時打印)

 1) innodb_trx 表結構說明(摘取最能說明問題的 8 個字段)

字段名
trx_id
innodb 存儲引擎內部唯一的事物 ID
trx_state
當前事物狀態(running 和 lock wait 兩種狀態)
trx_started  
事物的開始時間
trx_requested_lock_id
等待事物的鎖 ID,如 trx_state 的狀態為 Lock wait,那么該值帶表當前事物等待之前事物占用資源的 ID,若 trx_state 不是 Lock wait 則該值為 NULL
trx_wait_started
事物等待的開始時間
trx_weight
事物的權重,在 innodb 存儲引擎中,當發生死鎖需要回滾的時,innodb 存儲引擎會選擇該值最小的進行回滾
trx_mysql_thread_id
mysql 中的線程 id, 即 show  processlist 顯示的結果
trx_query 
事物運行的 SQL 語句

 2)innodb_locks 表結構說明

字段名
lock_id 
鎖的 ID
lock_trx_id
事物的 ID
lock_mode
鎖的模式(S 鎖與 X 鎖兩種模式)
lock_type
鎖的類型 表鎖還是行鎖(RECORD)
lock_table
要加鎖的表
lock_index
鎖住的索引
lock_space
鎖住對象的 space id
lock_page 
事物鎖定頁的數量,若是表鎖則該值為 NULL
lock_rec
事物鎖定行的數量,若是表鎖則該值為 NULL
lock_data
事物鎖定記錄主鍵值,若是表鎖則該值為 NULL(此選項不可信)

 3)innodb_lock_waits 表結構說明
字段名
requesting_trx_id
申請鎖資源的事物 ID
requested_lock_id
申請的鎖的 ID
blocking_trx_id
阻塞其他事物的事物 ID
blocking_lock_id
阻塞其他鎖的鎖 ID
可以根據這三張表進行聯合查詢,得到更直觀更清晰的結果,可以參考如下 SQL(可根據自己的分析習慣適進行調整)

 select
r.trx_isolation_level,
r.trx_id waiting_trx_id,
r.trx_mysql_thread_id waiting_trx_thread,
r.trx_state waiting_trx_state,
lr.lock_mode waiting_trx_lock_mode,
lr.lock_type waiting_trx_lock_type,
lr.lock_table waiting_trx_lock_table,
lr.lock_index waiting_trx_lock_index,
r.trx_query waiting_trx_query,
b.trx_id blocking_trx_id,
b.trx_mysql_thread_id blocking_trx_thread,
b.trx_state blocking_trx_state,
lb.lock_mode blocking_trx_lock_mode,
lb.lock_type blocking_trx_lock_type,
lb.lock_table blocking_trx_lock_table,
lb.lock_index blocking_trx_lock_index,
b.trx_query blocking_query
from information_schema.innodb_lock_waits w 
inner join information_schema.innodb_trx b 
on b.trx_id=w.blocking_trx_id 
inner join information_schema.innodb_trx r
on r.trx_id=w.requesting_trx_id 
inner join information_schema.innodb_locks lb
on lb.lock_trx_id=w.blocking_trx_id
inner join information_schema.innodb_locks lr
on lr.lock_trx_id=w.requesting_trx_id\G;
*************************** 1. row ***************************
 trx_isolation_level: REPEATABLE READ
 waiting_trx_id: 2900247
 waiting_trx_thread: 1070
 waiting_trx_state: LOCK WAIT
 waiting_trx_lock_mode: S
 waiting_trx_lock_type: RECORD
 waiting_trx_lock_table: `jiang_test`.`test`
 waiting_trx_lock_index: PRIMARY
 waiting_trx_query: select * from test where id=3 lock in share mode
 blocking_trx_id: 2900241
 blocking_trx_thread: 1137
 blocking_trx_state: RUNNING
 blocking_trx_lock_mode: X
 blocking_trx_lock_type: RECORD
blocking_trx_lock_table: `jiang_test`.`test`
blocking_trx_lock_index: PRIMARY
 blocking_query: NULL
1 row in set (0.01 sec)

以上是“MySQL 如何查看當前數據庫鎖請求”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-27發表,共計2899字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 陵水| 垣曲县| 金昌市| 四子王旗| 龙海市| 灵丘县| 武城县| 从化市| 岗巴县| 运城市| 大英县| 长顺县| 闸北区| 武山县| 合山市| 枣庄市| 龙游县| 绩溪县| 绥化市| 东阿县| 富民县| 梨树县| 江阴市| 白城市| 聂荣县| 绩溪县| 巴塘县| 渝中区| 桃园市| 石泉县| 新邵县| 沾益县| 鹿邑县| 周宁县| 民乐县| 探索| 收藏| 临洮县| 广饶县| 通化县| 永丰县|