↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3
历史版本PostgreSQL 7.3 已于 2007 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

10.3. 查看锁 #

另一个用于监视数据库活动的有用工具是 pg_locks 系统目录。它允许数据库管理员 查看锁管理器中当前存在的锁的信息。 例如,这个功能可以被用于:

  • 查看当前存在的所有锁、在一个特定数据库中的关系上所有的锁、在一个特定关系上所有的锁,或者由一个特定PostgreSQL会话持有的所有的锁。

  • 查看当前数据库中未授予 锁最多的关系(这可能是 数据库客户端之间争用的 来源)。

  • 判断锁竞争给数据库总体性能带来的影响,以及锁竞争随着整个数据库流量的变化范围。

For more information on locking and managing concurrency with PostgreSQL, refer to the PostgreSQL 7.3.21 用户指南.

注意

访问 pg_locks 视图时,内部 锁管理器数据结构会被短暂锁定, 并制作一个副本供该视图显示。这确保 该视图产生一致的结果集,同时 不会不必要地长时间阻塞 正常的锁管理器操作。尽管如此, 如果频繁查看这个视图,可能 会对数据库性能有一定影响。

表 10.3 给出了 pg_locks 各列的定义。 pg_locks 视图为每个可锁定 对象和请求的锁模式包含一行。因此,如果 多个事务正在持有或等待某个 对象上的锁,同一个可锁定对象可能 出现多次。可锁定对象是关系或 事务 ID。(注意这个视图只包含表级 锁,不包含行级锁。如果一个事务在等待 行级锁,它在视图中将显示为等待 该行锁当前持有者的事务 ID。)

表 10.3. 锁状态系统视图

列名 类型 描述
relation oid 被锁定关系的 OID;如果可锁定对象 是事务 ID 则为空。这一列可以与 pg_class 系统目录连接来获得被锁定 关系的更多信息。但注意这 只对当前数据库中的关系有效(即 database 列为 当前数据库的 OID 或零的 那些)。
database oid 被锁定关系所在数据库的 OID;如果 可锁定对象是事务 ID 则为空。如果 锁在全局共享的表上,这个字段为 零。这一列可以与 pg_database 系统目录连接来获得被锁定对象 所属数据库的更多信息。
transaction xid 事务的 ID;如果可锁定对象是 关系则为空。每个事务在其整个 期间都在自己的事务 ID 上持有 排他锁。如果一个事务发现 需要专门等待另一个 事务,它会通过试图获取 另一个事务 ID 上的共享锁来实现。这只有 在另一个事务终止并释放其锁 时才会成功。
pid integer 已获取或正在试图获取锁的会话 所属 PostgreSQL 后端的进程 ID。如果启用了 统计收集器,这一列可以与 pg_stat_activity 视图连接来获得 持有或等待持有该锁的 后端的更多信息。
mode text 在可锁定对象上请求或持有的锁的 模式。关于 PostgreSQL 中可用的各种锁 模式的更多信息,请参阅 PostgreSQL 7.3.21 用户指南。
isgranted boolean 如果锁已被授予(由该会话持有)则为 真。为假表示该会话当前正在等待 获取这个锁,这意味着某个其他会话 正在同一可锁定对象上持有 冲突的锁模式。这个 后端将休眠直到另一个锁被释放(或 检测到死锁)。单个后端 一次最多只能等待获取 一个锁。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。