局部锁-SYS_LOCKS
📄字数 793
👁️阅读量 加载中...
功能描述
SYS_LOCKS系统表用于管理数据库当前节点局部锁。
字段说明
序号 | 字段名 | 类型 | 说明 | V11 | V12 |
---|---|---|---|---|---|
0 | NODEID | INTEGER | 节点ID | × | √ |
1 | LOCK_TYPE | INTEGER | 全局锁类型 | √ | √ |
2 | LOCK_ID | BIGINT | 锁ID | √ | √ |
3 | REF | VARCHAR | 锁引用描述 | √ | √ |
4 | NODE_OWN | VARCHAR | 节点持有锁 | √ | √ |
5 | NODE_REQ | VARCHAR | 节点请求锁 | √ | √ |
6 | WAIT_REVOKE | VARCHAR | 等候归还锁 | √ | √ |
应用举例
- 查询拥有局部锁的节点ID
- 查询局部持有锁信息
- NODE_REQ、WAIT_REVOKE在锁请求过程中产生
sql
-- 1号节点执行
-- 创建表
SQL> CREATE TABLE tab_lock(id int);
-- 设置非自动提交
SQL> SET auto_commit OFF;
-- 为t1表增加排他锁
SQL> LOCK tab_lock IN EXCLUSIVE MODE;
-- 此时1号节点持有全局X锁
SQL> SELECT * FROM SYS_LOCKS WHERE node_own = 'x';
+--------+-----------+--------------------+------------------------------+----------+----------+-------------+
| NODEID | LOCK_TYPE | LOCK_ID | REF | NODE_OWN | NODE_REQ | WAIT_REVOKE |
+--------+-----------+--------------------+------------------------------+----------+----------+-------------+
| 1 | 2 | 576460756599439393 | [S]0,[X]1,[IS]0,[IX]0,[SIX]0 | X | | |
+--------+-----------+--------------------+------------------------------+----------+----------+-------------+
-- 2号节点执行查询
SQL> SELECT * FROM tab_lock;
-- 1号节点查询
SQL> SELECT * FROM SYS_ALL_LOCKS WHERE lock_id= 576460756599439393;
+--------+-----------+--------------------+------------------------------+----------+----------+-------------+
| NODEID | LOCK_TYPE | LOCK_ID | REF | NODE_OWN | NODE_REQ | WAIT_REVOKE |
+--------+-----------+--------------------+------------------------------+----------+----------+-------------+
| 1 | 3 | 576460756599439393 | [S]0,[X]0,[IS]0,[IX]0,[SIX]0 | S | | |
| 1 | 2 | 576460756599439393 | [S]0,[X]1,[IS]0,[IX]0,[SIX]0 | X | | IS |
| 2 | 2 | 576460756599439393 | [S]0,[X]0,[IS]0,[IX]0,[SIX]0 | | IS | |
+--------+-----------+--------------------+------------------------------+----------+----------+-------------+
-- 第三行,2号节点请求IS锁
-- 第二行,1号节点由于加了X锁,2号节点IS锁等候X锁归还