data_lock_waits 表格實作多對多的關係,顯示 data_locks 表格中哪些資料鎖定請求被 data_locks 表格中哪些已持有的資料鎖定封鎖。data_locks 中已持有的鎖定只有在封鎖某些鎖定請求時才會出現在 data_lock_waits 中。
此資訊可讓您瞭解工作階段之間的資料鎖定相依性。此表格不僅會顯示工作階段或交易正在等候哪個鎖定,還會顯示目前持有該鎖定的工作階段或交易。
資料鎖定等候資訊範例
mysql> SELECT * FROM performance_schema.data_lock_waits\G
*************************** 1. row ***************************
ENGINE: INNODB
REQUESTING_ENGINE_LOCK_ID: 140211201964816:2:4:2:140211086465800
REQUESTING_ENGINE_TRANSACTION_ID: 1555
REQUESTING_THREAD_ID: 47
REQUESTING_EVENT_ID: 5
REQUESTING_OBJECT_INSTANCE_BEGIN: 140211086465800
BLOCKING_ENGINE_LOCK_ID: 140211201963888:2:4:2:140211086459880
BLOCKING_ENGINE_TRANSACTION_ID: 1554
BLOCKING_THREAD_ID: 46
BLOCKING_EVENT_ID: 12
BLOCKING_OBJECT_INSTANCE_BEGIN: 140211086459880與大多數 Performance Schema 資料收集不同,沒有任何工具可控制是否收集資料鎖定資訊,也沒有任何系統變數可控制資料鎖定表格大小。Performance Schema 會收集伺服器中已有的資訊,因此產生此資訊不需要任何記憶體或 CPU 額外負荷,也不需要控制其收集的參數。
使用 data_lock_waits 表格可協助診斷在同時高負載期間發生的效能問題。對於 InnoDB,請參閱第 17.15.2 節「InnoDB INFORMATION_SCHEMA 交易和鎖定資訊」中的相關討論。
由於 data_lock_waits 表格中的欄位與 data_locks 表格中的欄位類似,因此此處的欄位描述已縮短。如需更詳細的欄位描述,請參閱第 29.12.13.1 節「data_locks 表格」。
data_lock_waits 表格具有下列欄位
ENGINE要求鎖定的儲存引擎。
REQUESTING_ENGINE_LOCK_ID儲存引擎所要求鎖定的 ID。若要取得鎖定的詳細資料,請將此欄位與
data_locks表格的ENGINE_LOCK_ID欄位聯結。REQUESTING_ENGINE_TRANSACTION_ID要求鎖定的交易的儲存引擎內部 ID。
REQUESTING_THREAD_ID要求鎖定的工作階段的執行緒 ID。
REQUESTING_EVENT_ID在要求鎖定的工作階段中造成鎖定請求的 Performance Schema 事件。
REQUESTING_OBJECT_INSTANCE_BEGIN要求鎖定的記憶體位址。
BLOCKING_ENGINE_LOCK_ID封鎖鎖定的 ID。若要取得鎖定的詳細資料,請將此欄位與
data_locks表格的ENGINE_LOCK_ID欄位聯結。BLOCKING_ENGINE_TRANSACTION_ID持有封鎖鎖定的交易的儲存引擎內部 ID。
BLOCKING_THREAD_ID持有封鎖鎖定的工作階段的執行緒 ID。
BLOCKING_EVENT_ID導致持有鎖定的工作階段中發生阻塞鎖的 Performance Schema 事件。
BLOCKING_OBJECT_INSTANCE_BEGIN阻塞鎖在記憶體中的位址。
data_lock_waits 資料表具有以下索引
索引於 (
REQUESTING_ENGINE_LOCK_ID,ENGINE)索引於 (
BLOCKING_ENGINE_LOCK_ID,ENGINE)索引於 (
REQUESTING_ENGINE_TRANSACTION_ID,ENGINE)索引於 (
BLOCKING_ENGINE_TRANSACTION_ID,ENGINE)索引於 (
REQUESTING_THREAD_ID,REQUESTING_EVENT_ID)索引於 (
BLOCKING_THREAD_ID,BLOCKING_EVENT_ID)
不允許對 data_lock_waits 資料表使用 TRUNCATE TABLE 指令。