这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

Vertica 数据库锁

当多个用户并发访问同一数据库信息时,数据处理可能会导致冲突并破坏数据完整性。发生这些冲突的原因是,某些事务会在事务完成前阻止其他操作。由于同时提交的事务应产生一致的结果,因此,Vertica 使用各种锁来维持数据并发性和一致性。Vertica 会根据对象状态,通过限制用户可对该对象执行的操作来自动控制锁定情况。

Vertica 使用对象锁和系统锁。对象锁用于对象,如表和投影。系统锁包括全局编录锁、本地编录锁和弹性群集锁。Vertica 支持全系列的标准 SQL 锁定模式,例如共享 (S) 和独占 (X)。

有关不同事务隔离级别中锁使用情况的相关信息,请参阅 READ COMMITTED 隔离SERIALIZABLE 隔离

1 - 锁定模式

Vertica 具有不同的锁定模式,这些锁定模式决定了锁在对象上如何发挥作用。每个锁定模式都具有一种锁定兼容性和锁定强度,反映了它在同一个环境中如何与其他锁交互。

锁兼容性

锁兼容性是指两个锁能在同一个对象上同时生效。

锁兼容性一览表

此一览表显示了哪些锁可在同一个对象上同时使用。

当锁定模式在标有项目符号 (•) 的单元格中相交时,它们兼容。如果请求的两个模式在空单元格相交,那么在第一个请求释放锁之前,不会向第二个模式授予锁。

锁升级一览表

此一览表显示了对象锁如何响应 INSERT 请求。

如果对象具有一个 S 锁,而您希望执行 INSERT,您的事务将请求 SI 锁。但是,如果某个对象具有 S 锁,而您希望执行要求 S 锁的操作,则不会发出锁定请求。

锁强度

锁强度是指一个锁定模式与另一个锁定模式交互的能力。O 锁是最强的锁,并且与所有其他锁不兼容。相反,U 锁是最弱的锁,可以与除 O 锁之外的所有其他锁同时运行。

下图描述了锁定模式的强度:

另请参阅:

2 - 锁定示例

在此示例中,两个会话 A 和 B 处于活动状态,并尝试处理表 T1。在示例开始时,表 T1 具有一列 (C1),但没有任何行。

这里的步骤说明的是从会话 A 和会话 B 可执行的一系列事务:

  1. 两个会话中的事务都获取了 S 锁,以便从表 T1 进行读取。

  2. 会话 B 释放了其针对 COMMIT 语句的 S 锁定。

  3. 会话 A 可升级到 SI 锁并插入到 T1,因为会话 B 释放了其 S 锁。

  4. 执行 COMMIT 语句后,会话 A 释放了其 SI 锁。

  5. 两个会话都可以获取 S 锁,因为会话 A 释放了其 SI 锁。

  6. 会话 A 无法获取 SI 锁,因为会话 B 未释放其 S 锁。SI 锁与 S 锁不兼容。

  7. 会话 B 释放了其针对 COMMIT 语句的 S 锁定。

  8. 会话 A 现在可以升级到 SI 锁并插入 T1。

  9. 会话 B 会尝试从 T1 删除一个行,但无法获取 X 锁,因为会话 A 未释放其 SI 锁。SI 锁与 X 锁不兼容。

  10. 会话 A 继续向 T1 插入内容。

  11. 会话 A 释放其 SI 锁。

  12. 会话 B 现在可以获取 X 锁并执行删除操作。

此图说明了前述步骤:

另请参阅:

Vertica 数据库锁 锁定模式

3 - 对锁定进行故障排除

LOCKSLOCK_USAGE 系统表有助于排查在使用 Vertica 数据库锁期间遇到的问题。

此示例显示了来自 LOCKS 系统表的一行。在此表中,您可以看到哪些类型的锁正在特定对象和节点上处于活动状态。

=> SELECT node_names, object_name, lock_mode, lock_scope FROM LOCKS;
node_names         | object_name                     | lock_mode | lock_scope
-------------------+---------------------------------+-----------+-----------
v_vmart_node0001   | Table:public.customer_dimension | X         | TRANSACTION

此示例显示了来自 LOCKS_USAGE 系统表的两行。您也可使用此表查看哪些锁正在特定对象和节点上使用。

=> SELECT node_name, object_name, mode FROM LOCK_USAGE;
node_name         | object_name      | mode
------------------+------------------+-------
v_vmart_node0001  | Cluster Topology | S
v_vmart_node0001  | Global Catalog   | X