データベース管理者はよく、"システムは今現在どうなっているか" を気にします。この章は監視する方法について説明します。
データベース活動状況の監視と性能解析用のツールは多く存在します。この章の大部分は PostgreSQL の 統計情報収集器 の説明に費やされていますが、ps や top などの通常の Unix 監視プログラムを無視すべきではありません。また、性能が悪い問い合わせであると認知された問い合わせは、その後、 PostgreSQL の EXPLAIN コマンドを使用して調査を行なう必要が発生します。 ユーザガイド では、個々の問い合わせの振舞いを理解するための、EXPLAIN などの方法について記載しています。
ほとんどのプラットホームでは、PostgreSQL は、個々のサーバプロセスが容易に識別できるように、ps によって報告されるコマンドタイトル部分を変更します。以下に表示例を示します。
$ ps auxww | grep ^postgres postgres 960 0.0 1.1 6104 1480 pts/1 SN 13:17 0:00 postmaster -i postgres 963 0.0 1.1 7084 1472 pts/1 SN 13:17 0:00 postgres: stats buffer 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 システムのものです。)この一覧の最初のプロセスは postmaster であり、マスタサーバプロセスです。表示されているコマンド引数は、起動時に指定したものと同じものです。次の 2 つのプロセスは、次節で詳細を説明する統計情報収集器を行なうものです。(システムを統計情報収集器を起動しないように設定していた場合はこれらはありません。) 残るプロセスはそれぞれ、1 つのクライアント接続を取り扱うサーバプロセスです。それぞれのプロセスは、次の形式のコマンドライン表示を設定します。
postgres: user database host activity
ユーザ、データベース、接続元ホストという項目はクライアントの存続期間中変更されることはありませんが、活動状況を示す部分は変わります。活動状況は、 idle (つまり、クライアントからのコマンド待ち状態)、 idle in transaction ( BEGINブロックの内側でのクライアントの待ち状態)、または SELECT のようなコマンド種類名のいずれかとなります。また、そのサーバが他のサーバプロセスによって保持されたロックを待っている状態の場合は、 waiting が付与されます。上の例では、1003 プロセスは 1016 プロセスにおけるトランザクションの完了とそれに伴うロックなどの解放を待っていると推測することができます。
Tip: Solaris では特別な取り扱いが必要です。 /bin/ps ではなく、/usr/ucb/ps を使用しなければなりません。また、w フラグを 1 つではなく 2 つ使用しなければなりません。更に、元の postmaster の呼び出しに関する ps のステータス表示は、各バックエンドに関するステータス表示よりも短くなければなりません。この 3条件を全て満たさないと、各バックエンドの ps の出力は、元の postmaster のコマンドラインのものになってしまいます。