27.1. 标准Unix工具

PostgreSQL在大多数平台上修改ps输出的命令标题, 这样我们就很容易找出某个服务器进程。一个简单的显示如下:

$psauxww|grep^postgres
postgres9600.01.161041480pts/1SN13:170:00postgres-i
postgres9630.01.170841472pts/1SN13:170:00postgres:writerprocess
postgres9650.01.161521512pts/1SN13:170:00postgres:statscollectorprocess
postgres9980.02.365322992pts/1SN13:180:00postgres:tglrunbug127.0.0.1 idle
postgres10030.02.465323128pts/1SN13:190:00postgres:tglregression[local]SELECTwaiting
postgres10160.12.465323080pts/1SN13:190:00postgres:tglregression[local] idleintransaction

调用ps的方法因平台的不同而略有不同,显示出来的细节也有一些区别。 这个例子来自一个最近的Linux系统。这里显示出来的第一个进程是主服务器进程。 显示的命令参数和启动它的命令行参数相同。下面是由主服务器进程自动调用的两个统 计收集器后台进程,如果你设置了系统不启动统计收集器,那么它们不会出现。剩下的都 是一个个处理客户连接的服务器进程,每个这样的进程都用下面的形式显示:

postgres:userdatabasehostactivity

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

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

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