Skip to content

局部锁-sys_locks

功能描述

sys_locks系统表用于管理数据库局部锁。

字段说明

序号字段名类型说明
0NODEIDINTEGER节点ID
1LOCK_TYPEINTEGER全局锁类型
2LOCK_IDBIGINT锁ID
3REFVARCHAR锁引用描述
4NODE_OWNVARCHAR节点持有锁
5NODE_REQVARCHAR节点请求锁
6WAIT_REVOKEVARCHAR等候归还锁

说明:

NODEID在较低版本的数据库不支持,详细信息请联系运维人员获取。

示例

  • 查询拥有局部锁的节点ID
  • 查询局部持有锁信息
  • NODE_REQ、WAIT_REVOKE在锁请求过程中产生
    sql
    -- 1号节点执行
    -- 创建表
    CREATE TABLE t1(id int);
    -- 设置非自动提交
    SET auto_commit off;
    -- 为t1表增加排他锁
    LOCK t1 IN EXCLUSIVE MODE;
    -- 此时1号节点持有 全局X锁
    SELECT * FROM sys_all_locks WHERE lock_id=576460756599457564;
    NODEID|LOCK_TYPE|LOCK_ID           |REF                         |NODE_OWN|NODE_REQ|WAIT_REVOKE|
    ------+---------+------------------+----------------------------+--------+--------+-----------+
        1|        3|576460756599457564|[S]0,[X]0,[IS]0,[IX]0,[SIX]0|S       |        |           |
        1|        2|576460756599457564|[S]0,[X]1,[IS]0,[IX]0,[SIX]0|X       |        |           |
    -- 2号节点执行查询
    select * from t1;
    -- 1号节点查询
    SELECT * FROM sys_all_locks WHERE lock_id=576460756599457564;
    NODEID|LOCK_TYPE|LOCK_ID           |REF                         |NODE_OWN|NODE_REQ|WAIT_REVOKE|
    ------+---------+------------------+----------------------------+--------+--------+-----------+
        1|        3|576460756599457564|[S]0,[X]0,[IS]0,[IX]0,[SIX]0|S       |        |           |
        1|        2|576460756599457564|[S]0,[X]1,[IS]0,[IX]0,[SIX]0|X       |        |IS         |
        2|        2|576460756599457564|[S]0,[X]0,[IS]0,[IX]0,[SIX]0|        |IS      |           |
    -- 第三行,2号节点请求IS锁
    -- 第二行,1号节点由于加了X锁,2号节点IS锁等候X锁归还

相关系统表

  • sys_lowners
  • sys_lwaiters