文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


29.12.13.1 data_locks 表格

data_locks 表格顯示已持有和請求的資料鎖定。如需有關哪些鎖定請求被哪些已持有的鎖定封鎖的資訊,請參閱第 29.12.13.2 節「data_lock_waits 表格」

資料鎖定資訊範例

mysql> SELECT * FROM performance_schema.data_locks\G
*************************** 1. row ***************************
               ENGINE: INNODB
       ENGINE_LOCK_ID: 139664434886512:1059:139664350547912
ENGINE_TRANSACTION_ID: 2569
            THREAD_ID: 46
             EVENT_ID: 12
        OBJECT_SCHEMA: test
          OBJECT_NAME: t1
       PARTITION_NAME: NULL
    SUBPARTITION_NAME: NULL
           INDEX_NAME: NULL
OBJECT_INSTANCE_BEGIN: 139664350547912
            LOCK_TYPE: TABLE
            LOCK_MODE: IX
          LOCK_STATUS: GRANTED
            LOCK_DATA: NULL
*************************** 2. row ***************************
               ENGINE: INNODB
       ENGINE_LOCK_ID: 139664434886512:2:4:1:139664350544872
ENGINE_TRANSACTION_ID: 2569
            THREAD_ID: 46
             EVENT_ID: 12
        OBJECT_SCHEMA: test
          OBJECT_NAME: t1
       PARTITION_NAME: NULL
    SUBPARTITION_NAME: NULL
           INDEX_NAME: GEN_CLUST_INDEX
OBJECT_INSTANCE_BEGIN: 139664350544872
            LOCK_TYPE: RECORD
            LOCK_MODE: X
          LOCK_STATUS: GRANTED
            LOCK_DATA: supremum pseudo-record

與大多數 Performance Schema 資料收集不同,沒有控制是否收集資料鎖定資訊的工具,也沒有控制資料鎖定表格大小的系統變數。Performance Schema 會收集伺服器中已有的資訊,因此不會產生記憶體或 CPU 額外負擔來產生此資訊,也不需要控制其收集的參數。

使用data_locks表格來協助診斷在大量並行負載期間發生的效能問題。對於 InnoDB,請參閱第 17.15.2 節「InnoDB INFORMATION_SCHEMA 交易與鎖定資訊」中對此主題的討論。

data_locks表格具有下列欄位

  • ENGINE

    持有或請求鎖定的儲存引擎。

  • ENGINE_LOCK_ID

    儲存引擎所持有或請求的鎖定 ID。 (ENGINE_LOCK_ID, ENGINE) 值的 Tuple 是唯一的。

    鎖定 ID 格式是內部的,隨時可能變更。應用程式不應依賴於鎖定 ID 具有特定格式。

  • ENGINE_TRANSACTION_ID

    請求鎖定的交易之儲存引擎內部 ID。這可以被視為鎖定的擁有者,儘管鎖定可能仍處於擱置狀態,尚未實際授予 (LOCK_STATUS='WAITING')。

    如果交易尚未執行任何寫入作業 (仍被視為唯讀),則該欄包含使用者不應嘗試解讀的內部資料。否則,該欄就是交易 ID。

    對於 InnoDB,若要取得關於交易的詳細資訊,請將此欄與 INFORMATION_SCHEMA INNODB_TRX 表格的 TRX_ID 欄位聯結。

  • THREAD_ID

    建立鎖定的工作階段執行緒 ID。若要取得關於執行緒的詳細資訊,請將此欄與 Performance Schema threads 表格的 THREAD_ID 欄位聯結。

    可以將 THREAD_IDEVENT_ID 一起使用,以判斷鎖定資料結構在記憶體中建立時所發生的事件。(如果該資料結構用於儲存多個鎖定,則此事件可能發生在特定鎖定請求發生之前。)

  • EVENT_ID

    導致鎖定的 Performance Schema 事件。 (THREAD_ID, EVENT_ID) 值的元組隱式地在其他 Performance Schema 表格中識別父事件

    • events_waits_xxx 表格中的父等待事件

    • events_stages_xxx 表格中的父階段事件

    • events_statements_xxx 表格中的父語句事件

    • events_transactions_current 表格中的父交易事件

    若要取得父事件的詳細資訊,請將 THREAD_IDEVENT_ID 欄位與適當的父事件表格中具有相同名稱的欄位進行聯結。請參閱第 29.19.2 節,「取得父事件資訊」

  • OBJECT_SCHEMA

    包含鎖定表格的綱要。

  • OBJECT_NAME

    鎖定表格的名稱。

  • PARTITION_NAME

    鎖定分割區的名稱 (如果有的話);否則為 NULL

  • SUBPARTITION_NAME

    鎖定子分割區的名稱 (如果有的話);否則為 NULL

  • INDEX_NAME

    鎖定索引的名稱 (如果有的話);否則為 NULL

    實際上,InnoDB 一律會建立索引 (GEN_CLUST_INDEX),因此 INDEX_NAME 對於 InnoDB 表格而言是非 NULL 的。

  • OBJECT_INSTANCE_BEGIN

    鎖定在記憶體中的位址。

  • LOCK_TYPE

    鎖定的類型。

    該值取決於儲存引擎。對於 InnoDB,允許的值為:用於列級鎖定的 RECORD,以及用於表級鎖定的 TABLE

  • LOCK_MODE

    鎖定的請求方式。

    該值取決於儲存引擎。對於 InnoDB,允許的值為 S[,GAP]X[,GAP]IS[,GAP]IX[,GAP]AUTO_INCUNKNOWN。除了 AUTO_INCUNKNOWN 之外的鎖定模式,如果存在則表示間隙鎖定。有關 SXISIX 和間隙鎖定的資訊,請參閱第 17.7.1 節,「InnoDB 鎖定」

  • LOCK_STATUS

    鎖定請求的狀態。

    該值取決於儲存引擎。對於 InnoDB,允許的值為 GRANTED (持有鎖定) 和 WAITING (正在等待鎖定)。

  • LOCK_DATA

    與鎖定相關聯的資料 (如果有的話)。該值取決於儲存引擎。對於 InnoDB,如果 LOCK_TYPERECORD,則會顯示值,否則該值為 NULL。鎖定在主索引鍵索引上的鎖定會顯示鎖定記錄的主索引鍵值。鎖定在次要索引上的鎖定會顯示鎖定記錄的次要索引值,並附加主索引鍵值。如果沒有主索引鍵,LOCK_DATA 會根據 InnoDB 叢集索引使用規則,顯示所選唯一索引的索引鍵值或唯一的 InnoDB 內部資料列 ID 編號 (請參閱第 17.6.2.1 節,「叢集索引和次要索引」)。LOCK_DATA 會針對在至上虛擬記錄上取得的鎖定報告「至上虛擬記錄」。如果鎖定記錄所在的頁面在持有鎖定時寫入磁碟,因此不在緩衝池中,InnoDB 則不會從磁碟提取頁面。相反地,LOCK_DATA 會報告 NULL

data_locks 表格具有這些索引

  • 主索引鍵位於 (ENGINE_LOCK_ID, ENGINE)

  • 索引位於 (ENGINE_TRANSACTION_ID, ENGINE)

  • 索引位於 (THREAD_ID, EVENT_ID)

  • 索引位於 (OBJECT_SCHEMA, OBJECT_NAME, PARTITION_NAME, SUBPARTITION_NAME)

不允許對 data_locks 表格使用 TRUNCATE TABLE