pgrowlocks
模块提供了一个函数来显示指定表的行锁信息。
默认情况下,使用权限仅限于超级用户、具有 pg_stat_scan_tables
角色权限的角色以及对该表具有 SELECT
权限的用户。
pgrowlocks(text) returns setof record
参数是表的名称。结果是一组记录,表中的每一行锁对应一行。输出列如 表 F.20 所示。
表 F.20. pgrowlocks
输出列
名称 | 类型 | 描述 |
---|---|---|
locked_row |
tid |
已锁行的元组 ID (TID) |
locker |
xid |
锁定者的交易 ID,如果为多事务则为 multixact ID;参见 第 66.1 节 |
multi |
boolean |
如果锁定者是多事务,则为真 |
xids |
xid[] |
锁定者的交易 ID(如果为多事务,则超过一个) |
modes |
text[] |
锁定者的锁定模式(如果为多事务,则超过一个),一个 For Key Share 、For Share 、For No Key Update 、No Key Update 、For Update 、Update 数组。 |
pids |
integer[] |
锁定后端的进程 ID(如果为多事务,则超过一个) |
pgrowlocks
对目标表获取 AccessShareLock
并逐行读取以收集行锁信息。对于大型表,这速度并不快。请注意
如果对表获取了 ACCESS EXCLUSIVE
锁,则 pgrowlocks
将被阻塞。
pgrowlocks
不能保证生成自一致的快照。在执行过程中,可能会获取新的行锁或释放旧的锁。
pgrowlocks
不显示已锁行的内容。如果您想同时查看行内容,可以执行以下操作
SELECT * FROM accounts AS a, pgrowlocks('accounts') AS p WHERE p.locked_row = a.ctid;
但是请注意,此类查询效率非常低。
=# SELECT * FROM pgrowlocks('t1'); locked_row | locker | multi | xids | modes | pids ------------+--------+-------+-------+----------------+-------- (0,1) | 609 | f | {609} | {"For Share"} | {3161} (0,2) | 609 | f | {609} | {"For Share"} | {3161} (0,3) | 607 | f | {607} | {"For Update"} | {3107} (0,4) | 607 | f | {607} | {"For Update"} | {3107} (4 rows)
石井達夫
如果您在文档中发现任何不正确的内容,与您对特定功能的体验不符,或者需要进一步澄清,请使用 此表单 报告文档问题。