cluster_locks 表提供有关当前在 NDB 集群的 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 表中使用的相同。它也显示在 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 所标识。