云数据库 GAUSSDB-LOCK:参数说明

时间:2024-11-13 14:46:19

参数说明

表1 冲突的锁模式

请求的锁模式/当前锁模式

AC CES S SHARE

ROW SHARE

ROW EXCLUSIVE

SHARE UPDATE EXCLUSIVE

SHARE

SHARE ROW EXCLUSIVE

EXCLUSIVE

ACCESS EXCLUSIVE

ACCESS SHARE

-

-

-

-

-

-

-

X

ROW SHARE

-

-

-

-

-

-

X

X

ROW EXCLUSIVE

-

-

-

-

X

X

X

X

SHARE UPDATE EXCLUSIVE

-

-

-

X

X

X

X

X

SHARE

-

-

X

X

-

X

X

X

SHARE ROW EXCLUSIVE

-

-

X

X

X

X

X

X

EXCLUSIVE

-

X

X

X

X

X

X

X

ACCESS EXCLUSIVE

X

X

X

X

X

X

X

X

LOCK的参数说明如下所示:

  • name

    要锁定的表的名称,可以有模式修饰。

    LOCK TABLE命令中声明的表的顺序就是上锁的顺序。

    取值范围:已存在的表名。

    支持使用DATABASE LINK方式对远端表进行操作,使用方式详情请见DATABASE LINK

  • ONLY

    如果指定ONLY,只有该表被锁定。如果没有声明,该表和他的所有子表将都被锁定。

  • ACCESS SHARE

    ACCESS SHARE锁只允许对表进行读取,而禁止对表进行修改。所有对表进行读取而不修改的SQL语句都会自动请求这种锁。例如,SELECT命令会自动在被引用的表上请求一个ACCESS SHARE锁。

  • ROW SHARE

    ROW SHARE锁允许对表进行并发读取,禁止对表进行其他操作。

    SELECT FOR UPDATE和SELECT FOR SHARE命令会自动在目标表上请求ROW SHARE锁(且所有被引用但不是FOR SHARE/FOR UPDATE的其他表上,还会自动加上ACCESS SHARE锁)。

    对于分区表,SELECT FOR SHARE操作还会在DN上获取partition对象的ROW EXCLUSIVE锁进行并发控制。

  • ROW EXCLUSIVE

    ROW EXCLUSIVE锁与ROW SHARE锁相同,允许并发读取表,但是禁止修改表中数据。UPDATE、DELETE、INSERT命令会自动在目标表上请求这个锁(且所有被引用的其他表上还会自动加上的ACCESS SHARE锁)。通常情况下,所有会修改表数据的命令都会请求表的ROW EXCLUSIVE锁。

  • SHARE UPDATE EXCLUSIVE

    这个模式保护一个表的模式不被并发修改,以及禁止在目标表上执行垃圾回收命令(VACUUM)。

    VACUUM(不带FULL选项)、ANALYZE、CREATE INDEX CONCURRENTLY命令会自动请求这样的锁。

  • SHARE

    SHARE锁允许并发的查询,但是禁止对表进行修改。

    CREATE INDEX(不带CONCURRENTLY)语句会自动请求这种锁。

  • SHARE ROW EXCLUSIVE

    SHARE ROW EXCLUSIVE锁禁止对表进行任何的并发修改,而且是独占锁,因此一个会话中只能获取一次。

    任何SQL语句都不会自动请求这个锁模式。

  • EXCLUSIVE

    EXCLUSIVE锁允许对目标表进行并发查询,但是禁止任何其他操作。

    这个模式只允许并发加ACCESS SHARE锁,也就是说,只有对表的读动作可以和持有这个锁模式的事务并发执行。

    任何SQL语句都不会在用户表上自动请求这个锁模式。然而在某些操作的时候,会在某些系统表上请求它。

  • ACCESS EXCLUSIVE

    这个模式保证其所有者(事务)是可以访问该表的唯一事务。

    ALTER TABLE、DROP TABLE、TRUNCATE、REINDEX、CLUSTER、VACUUM FULL命令会自动请求这种锁。

    在LOCK TABLE命令没有明确声明需要的锁模式时,它是缺省锁模式。

  • NOWAIT

    声明LOCK TABLE不去等待任何冲突的锁释放,如果无法立即获取该锁,该命令退出并且发出一个错误信息。

    在不指定NOWAIT的情况下获取表级锁时,如果有其他互斥锁存在的话,则等待其他锁的释放。

  • CANCELABLE

    通过指定该参数允许等锁线程给持锁线程和等锁线程发送CANCEL信号。

    只允许重分布工具使用,其它用户使用将报错。

support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0646.html