标准Unix工具

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 27. 监控数据库的活动 | 下一页

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

    postgres: user database host activity

在该客户端连接的生命期中，用户，数据库和(客户端)主机都保持不变， 但是活跃性指示符会变化。活跃性可以是`空闲`(等待客户端的命令)、 `事务空闲`(在一个`BEGIN`块里等待用户)、 或者一个命令类型名，比如`SELECT`。 同样，如果当前正在等待一个其它服务器进程持有的锁的时候， 会在信息后面附加`waiting`。在上面的例子中，我们可以推出： 进程15606正在等待15610完成其事务，这样才能释放一些锁。进程15610阻塞， 因为没有其他活动会话。在更复杂的情况下，有必要查看 `pg_locks` 系统视图来决定谁正在阻止他们。

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

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

上一页 | 起始页 | 下一页
监控数据库的活动 | 上一级 | 统计收集器