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

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 / 7.2
历史版本PostgreSQL 7.2 已于 2007 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

第 10 章 监控数据库活动

数据库管理员常常想知道“系统现在 正在做什么?” 本章讨论如何弄清这个问题。

有多种工具可用于监控数据库活动和分析 性能。本章的大部分内容都在描述 PostgreSQL 的统计收集器, 但不应忽视常规的 Unix 监控程序,如 ps 和 top。此外,一旦识别出 性能不佳的查询,可能还需要用 PostgreSQL 的 EXPLAIN 命令做进一步 调查。 用户指南 讨论了 EXPLAIN 以及理解单个查询行为的 其他方法。

10.1. 标准 Unix 工具 #

在大多数平台上,PostgreSQL 会修改 ps 报告的命令标题,这样单个服务器 进程就可以很容易地识别。示例显示如下

$ ps auxww | grep ^postgres
postgres   960  0.0  1.1  6104 1480 pts/1    SN   13:17   0:00 postmaster -i
postgres   963  0.0  1.1  7084 1472 pts/1    SN   13:17   0:00 postgres: stats buffer process   
postgres   965  0.0  1.1  6152 1512 pts/1    SN   13:17   0:00 postgres: stats collector process   
postgres   998  0.0  2.3  6532 2992 pts/1    SN   13:18   0:00 postgres: tgl runbug 127.0.0.1 idle
postgres  1003  0.0  2.4  6532 3128 pts/1    SN   13:19   0:00 postgres: tgl regression [local] SELECT waiting
postgres  1016  0.1  2.4  6532 3080 pts/1    SN   13:19   0:00 postgres: tgl regression [local] idle in transaction

(ps 的适当调用方式随平台而异,显示内容的细节 也是如此。此示例来自较新的 Linux 系统。)这里列出的第一个进程是 postmaster,即主服务器进程。它显示的命令 参数与启动它时给出的相同。接下来的两个进程实现 统计收集器,下一节将详细描述它。(如果你已把系统设置为 不启动统计收集器,这两个进程将不存在。)其余的每个 进程都是处理一个客户端连接的服务器进程。每个这样的 进程都把它的命令行显示设置为如下形式

postgres: user database host activity

在客户端连接的整个生命周期内,用户、数据库和连接来源主机 这几项保持不变,但活动指示符会变化。 活动可以是 idle(即等待客户端命令)、 idle in transaction(在 BEGIN 块内等待客户端), 或者命令类型名称,例如 SELECT。此外, 如果服务器当前正在等待另一服务器进程持有的锁,会附上 waiting。在上面的示例中,我们可以推断 进程 1003 正在等待进程 1016 完成事务, 从而释放某个锁。

提示

Solaris 需要特殊处理。你必须 使用 /usr/ucb/ps 而不是 /bin/ps。还必须使用两个 w 标志,而不只是一个。此外,你最初调用 postmaster 时的 ps 状态显示必须比每个 后端提供的更短。如果这三点有 一点没做到,每个后端的 ps 输出就都是最初的 postmaster 命令行。

提交更正

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