您的位置:寻梦网首页编程乐园数据库PostgreSQL 7.2 Documentation

Chapter 10. 监控数据库的活动

一个数据库管理员常常想知道 "现在系统正在干什么呢?" . 本章讨论如何回答这个问题.

有一些工具可以用来监控数据库的活动以及分析性能. 本章大部分内容是用于描述 PostgreSQL 统计收集器(statistics collector) , 但我们也不能忽视普通的 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 的命令行.