PostgreSQL 8.2.3 中文文档
后退快退章25. 监控数据库的活动快进前进

25.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: writer 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 系统。这里显示出来的第一个进程是主服务器进程。显示的命令参数和启动它的命令行参数相同。下面是由主服务器进程自动调用的两个统计收集器后台进程,如果你设置了系统不启动统计收集器,那么它们不会出现。剩下的都是一个个处理客户连接的服务器进程,每个这样的进程都用下面的形式显示:

postgres: user database host activity

在该客户端连接的生命期中,user, database, host(连接源主机)都保持不变,但是活跃性指示符会变化。活跃性可以是 idle(等待客户端的命令)、idle in transaction(在一个 BEGIN 块里等待用户)、或者一个命令类型名,比如 SELECT 。同样,如果当前正在等待一个其它服务器进程持有的锁的时候,会在信息后面附加 waiting 。在上面的例子中,我们可以推出:进程 1003 正在等待 1016 完成其事务,这样才能释放一些锁或者其它什么东西

如果关闭了 update_process_title 那么活跃性指示符将不会变化,并且进程标题仅在新进程被启动的时候设置一次。在某些平台上这样做可以节省每个命令的开销,但在其它平台上却没有这种差异。

【提示】Solaris 需要特别的处理。你必需使用 /usr/ucb/ps 而不是 /bin/ps 。你还必需使用两个 w 标志,而不是一个。另外,你最初调用 postgres 时用到的命令行在 ps 状态显示中必须比 ps 给每个服务器进程显示的短。如果没满足这三个条件,那么 ps 为每个服务器进程输出的将是最初的 postgres 的命令行。


后退首页前进
监控数据库的活动上一级统计收集器