1. 插件kbrowlocks简介¶
kbrowlocks提供了一个函数来显示指定表的行级锁信息。默认仅限超级用户、pg_stat_scan_tables 角色的成员和在该表上拥有SELECT权限的用户使用。
-
插件名为 kbrowlocks
-
插件版本 V1.2
2. 插件kbrowlocks加载方式¶
CREATE EXTENSION kbrowlocks;
3. 插件kbrowlocks的参数配置¶
无需配置任何参数。
4. 插件kbrowlocks的使用方法¶
名称 | 类型 | 描述 |
---|---|---|
locked_row | tid | 该行的tid |
locker | xid | 持有锁的xid号 (可能是multi xid号) |
multi | boolean | locker是否是multi xid |
xids | xid[] | 持锁的实际xid |
modes | text[] | 持锁的模式 |
pids | integer[] | 持锁backend的pid |
kbrowlocks会为目标表加AccessShareLock并且逐行读取来收集锁信息,对于大表可能很慢。
注意
-
如果表被加了排他锁,kbrowlocks将被阻塞。
-
kbrowlocks没有用一个一致的快照扫描。在执行过程中,数据可能被加上新行锁,也可能有旧行锁被释放。kbrowlocks不显示被锁定行的内容。如果想同时查看行内容,可以这样做
SELECT * FROM accounts AS a, kbrowlocks('accounts') AS p WHERE p.locked_row = a.ctid;
但要注意,这样的查询将非常低效。
SELECT * FROM kbrowlocks('test_rowlocks'); locked_row | locker | multi | xids | modes | pids ------------+--------+-------+---------+---------------+-------- (0,1) | 19574 | f | {19574} | {"For Share"} | {5246} (1 row)
5. 插件kbrowlocks卸载方法¶
DROP EXTENSION kbrowlocks;
6. 插件kbrowlocks升级方法¶
通过 ALTER EXTENSION升级插件。
示例,升级到 1.1
ALTER EXTENSION kbrowlocks UPDATE TO '1.1';