PostgreSQL 9.3.1 中文手册 | ||||
---|---|---|---|---|
Prev | Up | Chapter 27. 监控数据库的活动 | Next |
PostgreSQL在大多数平台上修改ps输出的命令标题, 这样我们就很容易找出某个服务器进程。 一个简单的显示如下:
$ ps auxww | grep ^postgres postgres 15551 0.0 0.1 57536 7132 pts/0 S 18:02 0:00 postgres -i postgres 15554 0.0 0.0 57536 1184 ? Ss 18:02 0:00 postgres: writer process postgres 15555 0.0 0.0 57536 916 ? Ss 18:02 0:00 postgres: checkpointer process postgres 15556 0.0 0.0 57536 916 ? Ss 18:02 0:00 postgres: wal writer process postgres 15557 0.0 0.0 58504 2244 ? Ss 18:02 0:00 postgres: autovacuum launcher process postgres 15558 0.0 0.0 17512 1068 ? Ss 18:02 0:00 postgres: stats collector process postgres 15582 0.0 0.0 58772 3080 ? Ss 18:04 0:00 postgres: joe runbug 127.0.0.1 idle postgres 15606 0.0 0.0 58772 3052 ? Ss 18:07 0:00 postgres: tgl regression [local] SELECT waiting postgres 15610 0.0 0.0 58772 3056 ? Ss 18:07 0:00 postgres: tgl regression [local] idle in transaction
调用ps的方法因平台的不同而略有不同,显示出来的细节也有一些区别。 这个例子来自一个最近的Linux系统。这里显示出来的第一个进程是主服务器进程。 显示的命令参数和启动它的命令行参数相同。 下面是由主服务器进程自动调用的五个统计收集器后台进程, 如果你设置了系统不启动统计收集器,那么它们不会出现。 同样的可用禁用"autovacuum发射器"。 剩下的都是一个个处理客户连接的服务器进程,每个这样的进程都用下面的形式显示:
postgres: user database host activity
在该客户端连接的生命期中,用户,数据库和(客户端)主机都保持不变, 但是活跃性指示符会变化。活跃性可以是空闲(等待客户端的命令)、 事务空闲(在一个BEGIN块里等待用户)、 或者一个命令类型名,比如SELECT。 同样,如果当前正在等待一个其它服务器进程持有的锁的时候, 会在信息后面附加waiting。在上面的例子中,我们可以推出: 进程15606正在等待15610完成其事务,这样才能释放一些锁。进程15610阻塞, 因为没有其他活动会话。在更复杂的情况下,有必要查看 pg_locks 系统视图来决定谁正在阻止他们。
如果关闭了update_process_title那么活跃性指示符将不会变化, 并且进程标题仅在新进程被启动的时候设置一次。 在某些平台上这样做可以节省每个命令的开销,但在其它平台上却没有这种差异。
Tip: Solaris需要特别的处理。 你必需使用/usr/ucb/ps而不是/bin/ps。 你还必需使用两个w标志,而不是一个。 另外,你最初调用postgres时 用到的命令行在ps状态显示中必须比 每个服务器进程显示的短。如果没满足这三个条件, 那么ps为每个服务器进程输出的将是最初的postgres的命令行。