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

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

第 23 章 监控数据库活动

数据库管理员常常会问:“系统现在正在做什么?”本章将讨论如何回答这个问题。

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

23.1. 标准 Unix 工具 #

在大多数平台上,PostgreSQL会修改由ps报告的命令标题,以便轻松识别各个服务器进程。以下是一个显示示例:

$ ps auxww | grep ^postgres
postgres   960  0.0  1.1  6104 1480 pts/1    SN   13:17   0:00 postgres -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 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。