PostgreSQL 9.5.3 文档 | |||
---|---|---|---|
上一页 | 上一级 | 章 27. 监控数据库活动 | 下一页 |
在大部分 Unix 平台上,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 系统)。这里显示出来的第一个进程是主服务器进程。 为它显示的命令参数是启动它时使用的那些。接下来的五个进程是由主进程自动启动的后台工作者进程 (如果你已经设置系统为不启动统计收集器,"统计收集器"进程将不会出现; 同样"自动清理发动"进程也可以被禁用)。 剩余的每一个进程都是处理一个客户端连接的服务器进程。 每个这样的进程都会把它的命令行显示设置为这种形式
postgres: user database host activity
在该客户端连接的生命期中,用户、数据库以及(客户端)主机项保持不变, 但是活动指示器会改变。活动可以是闲置(即等待客户端的命令)、 在事务中闲置(在一个BEGIN块里等待客户端)或者一个命令类型名, 例如SELECT。还有,如果服务器进程正在等待一个其它会话持有的锁, 等待中会被追加到上述信息中。在上面的例子中,我们可以推断: 进程 15606 正在等待进程 15610 完成其事务并且因此释放一些锁(进程 15610 必定是阻塞者, 因为没有其他活动会话。在更复杂的情况中,可能需要查看 pg_locks 系统视图来决定谁阻塞了谁)。
如果已经配置了cluster_name, 那么在ps输出中也会显示集群名称:
$ psql -c 'SHOW cluster_name' cluster_name -------------- server1 (1 row) $ ps aux|grep server1 postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: server1: writer process ...
如果你已经关闭了update_process_title,那么活动指示器将不会被更新, 进程标题仅在新进程被启动的时候设置一次。在某些平台上这样做可以为每个命令节省可观的开销, 但在其它平台上却不明显。
提示: Solaris需要特别的处理。你必需使用/usr/ucb/ps 而不是/bin/ps。你还必需使用两个w标志,而不是一个。 另外,你对postgres命令的最初调用必须用一个比服务器进程提供的短的 ps状态显示。如果你没有满足全部三个要求,每个服务器进程的 ps输出将是原始的postgres命令行。