server_locks 表格的結構與 cluster_locks 表格相似,並提供後者表格中一部分的資訊,但這些資訊是特定於 SQL 節點 (MySQL 伺服器) 所在的節點。( cluster_locks 表格提供叢集中所有鎖定的相關資訊。) 更精確地說,server_locks 包含目前 mysqld 執行個體所屬執行緒所要求的鎖定相關資訊,並作為 server_operations 的配套表格。這對於將鎖定模式與特定的 MySQL 使用者工作階段、查詢或使用案例進行關聯可能會很有用。
server_locks 表格包含以下欄位:
mysql_connection_idMySQL 連線 ID
node_id報告節點的 ID
block_instance報告 LDM 執行個體的 ID
tableid包含此資料列的表格 ID
fragmentid包含已鎖定資料列的片段 ID
rowid已鎖定資料列的 ID
transid交易 ID
mode鎖定請求模式
state鎖定狀態
detail這是否為資料列鎖定佇列中的第一個持有鎖定
op作業類型
duration_millis等待或持有鎖定所花費的毫秒數
lock_num鎖定物件的 ID
waiting_for正在等待具有此 ID 的鎖定
注意事項
mysql_connection_id 欄位會顯示 MySQL 連線或執行緒 ID,如 SHOW PROCESSLIST 所示。
block_instance 指的是核心區塊的執行個體。結合區塊名稱,此數字可用於在 threadblocks 表格中查找給定的執行個體。
tableid 是由 NDB 指定給表格;此表格在其他 ndbinfo 表格以及 ndb_show_tables 的輸出中會使用相同的 ID。
transid 欄位中顯示的交易 ID 是由 NDB API 為要求或持有目前鎖定的交易產生的識別碼。
mode 欄位會顯示鎖定模式,其值一律為 S (共用鎖定) 或 X (獨佔鎖定) 其中之一。如果交易在給定資料列上具有獨佔鎖定,則該資料列上的所有其他鎖定都具有相同的交易 ID。
state 欄位會顯示鎖定狀態。其值一律為 H (持有) 或 W (等待) 其中之一。等待鎖定請求會等待不同交易持有的鎖定。
detail 欄位會指出此鎖定是否為受影響資料列的鎖定佇列中的第一個持有鎖定,如果是,則它包含一個 * (星號字元);否則,此欄位為空白。此資訊可用於協助識別鎖定請求清單中的唯一項目。
op 欄位會顯示要求鎖定的作業類型。其值一律為 READ、INSERT、UPDATE、DELETE、SCAN 或 REFRESH 其中之一。
duration_millis 欄位會顯示此鎖定請求已等待或持有鎖定的毫秒數。當授與等待請求的鎖定時,此值會重設為 0。
鎖定 ID ( lockid 欄位) 對於此節點和區塊執行個體而言是唯一的。
如果 lock_state 欄位的值為 W,則表示此鎖定正在等待授與,而 waiting_for 欄位會顯示此請求正在等待的鎖定物件的鎖定 ID。否則,waiting_for 為空白。waiting_for 只能參照同一個資料列上的鎖定 (如 node_id、block_instance、tableid、fragmentid 和 rowid 所識別)。