PostgreSQL 9.3.2文書 | ||||
---|---|---|---|---|
前のページ | 上に戻る | 第 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システムのものです。) この一覧の最初のプロセスはマスタサーバプロセスです。 表示されているコマンド引数は、起動時に使用されたものと同じものです。 次の5つのプロセスは、マスタプロセスから自動的に起動されるバックグランドワーカープロセスです。 ("自動バキュームランチャ"を無効にできることと同様に、システムを統計情報コレクタが起動しないように設定していた場合は"統計情報コレクタ"はありません)。 残るプロセスはそれぞれ、1つのクライアント接続を取り扱うサーバプロセスです。 それぞれのプロセスは、次の形式のコマンドライン表示を設定します。
postgres: user database host activity
ユーザ、データベース、(クライアント)ホストという項目はクライアントの存続期間中変更されることはありませんが、活動状況を示す部分は変わります。 活動状況は、idle(つまり、クライアントからのコマンド待ち状態)、idle in transaction(BEGINブロックの内側でのクライアントの待ち状態)、またはSELECTのようなコマンド種類名のいずれかとなります。 また、そのサーバプロセスが他のセッションによって保持されたロックを待っている状態の場合は、waitingが追加されます。 上の例では、プロセス15606はプロセス15610におけるトランザクションの完了とそれに伴うロックの解放を待っていると推測することができます。 (他に実行中のセッションがありませんので、プロセス15610がブロックしている側であるはずです。 もっと複雑な名合いではpg_locksシステムビューを検索し、どのプロセスがブロックしているか決定しなけれななりません)
update_process_titleを無効にした場合、活動情報を示す部分は更新されません。 新しいプロセスが起動した時に一度、プロセスの表題は設定されます。 プラットフォームの中には、これによりコマンドごとのオーバヘッドをかなり抑えられるものもありますし、まったく意味がないものもあります。
ティップ: Solarisでは特別な取り扱いが必要です。 /bin/psではなく、/usr/ucb/psを使用しなければなりません。 また、wフラグを1つではなく2つ使用しなければなりません。 さらに、元のpostgresの呼び出しに関するpsのステータス表示は、各サーバプロセスに関するステータス表示よりも短くなければなりません。 この3条件を全て満たさないと、各サーバプロセスのpsの出力は、元のpostgresのコマンドラインのものになってしまいます。