25.6.17.7 NDB Cluster 锁表
cluster_locks 表提供了当前锁请求持有和等待锁的信息,用于 NDB 集群中的 NDB 表,并且是cluster_operations 表的伴侣表。从 cluster_locks 表中获取的信息可能有助于调查停滞和死锁。
cluster_locks 表包含以下列:
-
node_id报告节点的 ID
-
block_instance报告 LDM 实例的 ID
-
tableid包含该行的表 ID
-
fragmentid包含锁定的行 fragment 的 ID
-
rowid锁定的行 ID
-
transid事务 ID
-
mode锁请求模式
-
state锁状态
-
detail是否是该行锁队列中的第一个持有锁
-
op操作类型
-
duration_millis等待或持有锁的毫秒数
-
lock_num锁对象的 ID
-
waiting_for等待锁定ID
表ID(tableid 列)是内部分配的,同样用于其他 ndbinfo 表。它也在 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 来标识该行。