该 cluster_locks
表提供了 NDB 集群中当前锁请求的信息,旨在与 cluster_operations
表一起使用。从 cluster_locks
表中获取的信息可能有助于调查停滞和死锁。
该 cluster_locks
表包含以下列:
-
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
注意事项
表 ID (tableid
列) 是内部分配的,同其他 ndbinfo
表中的 ID 相同,也显示在 ndb_show_tables 的输出中。
事务 ID (transid
列) 是 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
标识。