↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 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.3 已结束支持。 请参阅 当前版本手册.

第 10 章 监控数据库活动

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

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

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.