PostgreSQL 9.2.4文書 | ||||
---|---|---|---|---|
前のページ | 上に戻る | 第 27章データベース活動状況の監視 | 次のページ |
PostgreSQLの統計情報コレクタはサーバの活動状況に関する情報を収集し、報告するサブシステムです。 現在、コレクタはテーブルとインデックスへのアクセスをディスクブロックおよび個々の行単位で数えることができます。 またこれは、各テーブル内の総行数、および、各テーブルでのVACUUMやANALYZEの実施情報を追跡します。 また、ユーザ定義関数の呼ばれた回数、それぞれの消費した総時間をカウントします。
また、PostgreSQLは他のサーバプロセスによって現在実行されている問い合わせを正確に報告する機能を持ちます。 これはコレクタプロセスから独立している機能です。
統計情報の収集によって問い合わせの実行に少しオーバーヘッドが加わりますので、システムは情報を収集するようにもしないようにも設定することができます。 これは通常はpostgresql.conf内で設定される、設定パラメータによって制御されます (設定パラメータの設定についての詳細は第18章を参照してください)。
track_activitiesパラメータにより、すべてのサーバプロセスで現在実行されているコマンドを監視することができます。
track_countsパラメータは、テーブルおよびインデックスアクセスに関する統計情報を収集するかどうか制御します。
track_functionsパラメータは、ユーザ定義関数の使用状況を追跡するかどうかを指定できます。
track_io_timingパラメータは、ブロック読み取りおよび書き込み回数の監視するかどうかを指定できます。
通常、これらの変数は全てのサーバプロセスに適用できるようにpostgresql.conf内で設定されます。 しかし、SETコマンドを使用して、個別のセッションで有効または無効にすることができます (一般ユーザがその活動を管理者に隠すことを防止するために、スーパーユーザのみがSETを使用してこれらのパラメータを変更することができます。)
統計情報コレクタは収集した情報を他のPostgreSQLプロセスに一時ファイルを介して送信します。 これらのファイルはstats_temp_directoryで指名されたディレクトリ、デフォルトはpg_stat_tmp内に格納されます。 性能を向上させるために、stats_temp_directoryをRAMベースのファイルシステムを指し示すようにして、物理的なI/O要求を減らすことができます。 サーバがシャットダウンした際は、統計情報がサーバの再起動を跨がって保持されるように、統計情報データの永続的なコピーがglobalサブディレクトリに格納されます。
統計情報の収集結果を表示するための、多くの定義済みのビューがあり、表27-1に一覧表示されています。 他にも、項27.2.3で説明する、基礎的な統計情報関数を使用した独自のビューを構築することもできます。
この統計情報を使用して、現在の活動状況を監視する場合、この情報は即座に更新されないことを認識することが重要です。 個別のサーバプロセスは、待機状態になる直前に、新しい統計情報に関する数をコレクタに送信します。 ですので、実行中の問い合わせやトランザクションは表示上の総和には影響を与えません。 また、コレクタ自体もおよそPGSTAT_STAT_INTERVAL(サーバ構築時に変更しない限り500 ms)ミリ秒に一度新しい報告を出力します。 ですので、表示上の情報は実際の活動から遅れて表示されます。 しかし、track_activitiesで収集される現在の問い合わせの情報は常に最新です。
この他の重要なポイントは、いつサーバプロセスが統計情報を表示するように尋ねられるかです。
サーバプロセスは、まずコレクタによって発行された最も最近の報告を取り出します。
そして、現在のトランザクションが終わるまで、全ての統計情報ビューと関数においてこのスナップショットを使用し続けます。
ですから、現在のトランザクションを続けている間、統計情報は一定の情報を示します。
同様に、全セッションの現在の問い合わせに関する情報も、そうした情報がトランザクションで最初に要求された時に収集され、そのトランザクションの間同じ情報が表示されます。
これはバグではなく、特徴です。
なぜなら、これにより、知らない間に値が変更することを考慮することなく、統計情報に対して複数の問い合わせを実行し、その結果を相関することができるからです。
しかし、各問い合わせで新しい結果を取り出したい場合は、確実にトランザクションブロックの外側でその問い合わせを行ってください。
他にもpg_stat_clear_snapshot
()を呼び出すこともできます。
これは現在のトランザクションの統計情報スナップショットを(もしあれば)破棄します。
次に統計情報を使用する場合に新しいスナップショットを取り出すことになります。
トランザクションからは、pg_stat_xact_all_tables、pg_stat_xact_sys_tables、pg_stat_xact_user_tables、pg_stat_xact_user_functions、およびこれらのビューの元となっている関数を通じて、自身の統計情報(まだコレクタに送られていない)も参照することができます。 これらの数値はトランザクション中に継続的に更新されていくため上記の様な(静的な情報を示す)振る舞いとはなりません。
表 27-1. 標準統計情報ビュー
ビュー名 | 説明 |
---|---|
pg_stat_activity | サーバ当たり1行の形式で、状態や現在の問い合わせ等のプロセスの現在の活動状況に関連した情報を表示します。 詳細についてはpg_stat_activityを参照してください。 |
pg_stat_bgwriter | バックグラウンドライタプロセスの活動状況に関する統計情報を1行のみで表示します。 詳細についてはpg_stat_bgwriterを参照してください。 |
pg_stat_database | データベース当たり1行の形で、データベース全体の情報を表示します。 詳細についてはpg_stat_databaseを参照してください。 |
pg_stat_all_tables | 現在のデータベースの各テーブルごとに1行の形で、特定のテーブルへのアクセスに関する統計情報を示します。 詳細についてはpg_stat_all_tablesを参照してください。 |
pg_stat_sys_tables | システムテーブルのみが表示される点を除き、pg_stat_all_tablesと同じです。 |
pg_stat_user_tables | ユーザテーブルのみが表示される点を除き、pg_stat_all_tablesと同じです。 |
pg_stat_xact_all_tables | pg_stat_all_tablesと似ていますが、現在のトランザクションにて実施された処理結果をカウントします。(数値が見える時点では、これらの数値はpg_stat_all_tablesと関連するビューに含まれていません。) このビューでは、有効行数、無効行数、およびバキュームやアナライズの活動は表示しません。 |
pg_stat_xact_sys_tables | システムテーブルのみが表示される点を除き、pg_stat_xact_all_tablesと同じです。 |
pg_stat_xact_user_tables | ユーザテーブルのみが表示される点を除き、pg_stat_xact_all_tablesと同じです。 |
pg_stat_all_indexes | 現在のデータベースのインデックスごとに1行の形で、特定のインデックスへのアクセスに関する統計情報を示します。 詳細についてはpg_stat_all_indexesを参照してください。 |
pg_stat_sys_indexes | システムテーブルのインデックスのみが表示される点を除き、pg_stat_all_indexesと同じです。 |
pg_stat_user_indexes | ユーザテーブルのインデックスのみが表示される点を除き、pg_stat_all_indexesと同じです。 |
pg_statio_all_tables | 現在のデータベース内のテーブルごとに1行の形で、特定のテーブルに対するI/Oに関する統計情報を示します。 詳細についてはpg_statio_all_tablesを参照してください。 |
pg_statio_sys_tables | システムテーブルのみが表示される点を除き、pg_statio_all_tablesと同じです。 |
pg_statio_user_tables | ユーザテーブルのみが表示される点を除き、pg_statio_all_tablesと同じです。 |
pg_statio_all_indexes | 現在のデータベース内のインデックスごとに1行の形で、特定のインデックスに対するI/Oに関する統計情報を示します。 詳細についてはpg_statio_all_indexesを示します。 |
pg_statio_sys_indexes | システムテーブルのインデックスのみが表示される点を除き、pg_statio_all_indexes と同じです。 |
pg_statio_user_indexes | ユーザテーブルのインデックスのみが表示される点を除き、pg_statio_all_indexesと同じです。 |
pg_statio_all_sequences | 現在のデータベース内のシーケンスごとに1行の形で、特定のシーケンスに対するI/Oに関する統計情報を示します。 詳細についてはpg_statio_all_sequencesを参照してください。 |
pg_statio_sys_sequences | システムシーケンスのみが表示される点を除き、pg_statio_all_sequencesと同じです (現時点では、システムシーケンスは定義されていませんので、このビューは常に空です)。 |
pg_statio_user_sequences | ユーザシーケンスのみが表示される点を除き、pg_statio_all_sequencesと同じです。 |
pg_stat_user_functions | 追跡された関数ごとに1行の形で、関数の実行に関する統計情報を示します。 詳細についてはpg_stat_user_functionsを参照してください。 |
pg_stat_xact_user_functions | pg_stat_user_functionsと似ていますが、現在のトランザクション中に呼び出されたものだけをカウントします。 (数値が見える時点では、これらの数値はpg_stat_user_functionsに含まれていません。) |
pg_stat_replication | WAL送信プロセス毎に1行の形式で、送信サーバが接続したスタンバイサーバへのレプリケーションに関する統計情報を表示します。 詳細についてはpg_stat_replicationを参照してください。 |
pg_stat_database_conflicts | データベース毎に1行の形式で、スタンバイサーバにおける復旧との競合のためにキャンセルされた問い合わせについてのデータベース全体の統計情報を表示します。 詳細についてはpg_stat_database_conflictsを参照してください。 |
インデックス単位の統計情報は、どのインデックスが使用され、どの程度効果があるのかを評価する際に、特に有用です。
pg_statio_ビューは主に、バッファキャッシュの効率を評価する際に有用です。 実ディスク読み取りの数がバッファヒットの数よりもかなり少ないのであれば、そのキャッシュはカーネル呼び出しを行うことなく、ほとんどの読み取り要求を満足させています。 しかし、PostgreSQLバッファキャッシュに存在しないデータはカーネルのI/Oキャッシュにある可能性があり、そのため、物理的な読み取りを行うことなく取り出される可能性があるというPostgreSQLのディスクI/Oの取り扱いのため、これらの統計情報は、完全な論拠を提供しません。 PostgreSQLのI/O動作に関するより詳細な情報を入手したいのであれば、PostgreSQL統計情報コレクタとカーネルのI/Oの取り扱いの監視を行うオペレーティングシステムユーティリティを組み合わせることを勧めます。
表 27-2. pg_stat_activityビュー
列 | 型 | 説明 |
---|---|---|
datid | oid | バックエンドが接続するデータベースのOIDです。 |
datname | name | バックエンドが接続するデータベースの名前です。 |
pid | integer | バックエンドのプロセスIDです。 |
usesysid | oid | バックエンドにログインしたユーザの識別子です。 |
usename | name | バックエンドに接続したユーザの名前です。 |
application_name | text | バックエンドに接続したアプリケーションの名前です。 |
client_addr | inet | バックエンドに接続したクライアントのIPアドレスです。 このフィールドがNULLである場合、これはクライアントがサーバマシン上のUnixソケット経由で接続されたか、自動バキュームなど内部処理であることを示します。 |
client_hostname | text | client_addrの逆引き検索により報告された、接続クライアントのホスト名です。 IP接続、かつlog_hostnameが有効である場合にのみこのフィールドは非NULLになります。 |
client_port | integer | クライアントがバックエンドとの通信に使用するTCPポート、もしUnixソケットを使用する場合は-1です。 |
backend_start | timestamp with time zone | プロセスが開始、つまりクライアントがサーバに接続した時刻です。 |
xact_start | timestamp with time zone | プロセスの現在のトランザクションが開始した時刻です。 活動中のトランザクションがない場合はNULLです。 現在の問い合わせがトランザクションの先頭である場合、この列はquery_start列と同じです。 |
query_start | timestamp with time zone | 現在有効な問い合わせが開始した時刻です。 もしstateがactiveでない場合は直前の問い合わせが開始した時刻です。 |
state_change | timestamp with time zone | stateの最終変更時刻です。 |
waiting | boolean | バックエンドが現在ロックを待機している場合は真です。 |
state | text | 現在のバックエンドの総体的な状態です。
以下のいずれかの値を取ることができます。
|
query | text | バックエンドの最も最近の問い合わせテキストです。 stateがactiveの場合、現在実行中の問い合わせを意味します。 その他のすべての状態では、実行済みの最後の問い合わせを示します。 |
pg_stat_activityはサーバプロセス毎に、そのプロセスの現在の活動に関連する情報を表示する1行を持ちます。
注意: waitingとstate列は独立しています。 バックエンドがactive状態である場合、waitingかもしれませんし、そうでないかもしれません。 状態がactiveであり、waitingが真である場合、問い合わせは実行中ですが、システム内の何らかのロックによりブロックされていることを意味します。
表 27-3. pg_stat_bgwriterビュー
列 | 型 | 説明 |
---|---|---|
checkpoints_timed | bigint | これまでに実行された、スケジュールされたチェックポイントの個数です。 |
checkpoints_req | bigint | これまでに実行された、要求されたチェックポイントの個数です。 |
checkpoint_write_time | double precision | チェックポイント処理におけるディスクにファイルを書き出す部分に費やされた、ミリ秒単位の総時間です。 |
checkpoint_sync_time | double precision | チェックポイント処理におけるディスクにファイルを同期する部分に費やされた、ミリ秒単位の総時間です。 |
buffers_checkpoint | bigint | チェックポイント期間に書き出されたバッファ数です。 |
buffers_clean | bigint | バックグラウンドライタにより書き出されたバッファ数です。 |
maxwritten_clean | bigint | バックグラウンドライタが書き出したバッファ数が多過ぎたために、整理用スキャンを停止した回数です。 |
buffers_backend | bigint | バックエンドにより直接書き出されたバッファ数です。 |
buffers_backend_fsync | bigint | バックエンドが独自にfsync 呼び出しを実行しなければならなかった回数です。
(通常は、バックエンドが独自に書き込んだ場合であっても、バックグラウンドライタがこれらを扱います。)
|
buffers_alloc | bigint | 割当られたバッファ数です。 |
stats_reset | timestamp with time zone | これらの統計情報がリセットされた最終時刻です。 |
pg_stat_bgwriterビューは常に、クラスタのグローバルデータに関する1つの行を持ちます。
表 27-4. pg_stat_databaseビュー
列 | 型 | 説明 |
---|---|---|
datid | oid | データベースのOIDです。 |
datname | name | データベースの名前です。 |
numbackends | integer | 現在データベースに接続しているバックエンドの個数です。 これは、このビューの中で、現在の状態を反映した値を返す唯一の列です。 他の列はすべて、最後にリセットされてから累積された値を返します。 |
xact_commit | bigint | このデータベースの中でコミットされたトランザクション数です。 |
xact_rollback | bigint | このデータベースの中でロールバックされたトランザクション数です。 |
blks_read | bigint | データベース内で読み取られたディスクブロック数です。 |
blks_hit | bigint | バッファキャッシュに既にあることが分かっているために読み取りが不要だったディスクブロック数です(これにはPostgreSQLのバッファキャッシュにおけるヒットのみが含まれ、オペレーティングシステムのファイルシステムキャッシュは含まれません)。 |
tup_returned | bigint | データベース内の問い合わせで返された行数です。 |
tup_fetched | bigint | データベース内の問い合わせで取り出された行数です。 |
tup_inserted | bigint | データベース内の問い合わせで挿入された行数です。 |
tup_updated | bigint | データベース内の問い合わせで更新された行数です。 |
tup_deleted | bigint | データベース内の問い合わせで削除された行数です。 |
conflicts | bigint | データベース内のリカバリで競合したためキャンセルされた問い合わせ数です。 (競合はスタンバイサーバ上でのみ起こります。詳細についてはpg_stat_database_conflictsを参照してください。) |
temp_files | bigint | データベース内の問い合わせによって書き出された一時ファイルの個数です。 一時ファイルが作成された理由(ソート処理やハッシュ処理)やlog_temp_filesの設定に関わらず、すべての一時ファイルが計上されます。 |
temp_bytes | bigint | データベース内の問い合わせによって一時ファイルに書き出されたデータ量です。 一時ファイルが作成された理由やlog_temp_filesの設定に関わらず、すべての一時ファイルが計上されます。 |
deadlocks | bigint | データベース内で検知されたデッドロック数です。 |
blk_read_time | double precision | データベース内でバックエンドによりデータファイルブロックの読み取りに費やされた、ミリ秒単位の時間です。 |
blk_write_time | double precision | データベース内でバックエンドによりデータファイルブロックの書き出しに費やされた、ミリ秒単位の時間です。 |
stats_reset | timestamp with time zone | 統計情報がリセットされた最終時刻です。 |
pg_stat_databaseには、クラスタ内のデータベース毎にデータベース全体の統計情報を示す1行が含まれます。
表 27-5. pg_stat_all_tablesビュー
列 | 型 | 説明 |
---|---|---|
relid | oid | テーブルのOIDです。 |
schemaname | name | テーブルが存在するスキーマの名前です。 |
relname | name | テーブルの名前です。 |
seq_scan | bigint | テーブル上で初期化されたシーケンシャルスキャンの個数です。 |
seq_tup_read | bigint | シーケンシャルスキャンによって取り出された有効行の個数です。 |
idx_scan | bigint | テーブル上で初期化されたインデックススキャンの個数です。 |
idx_tup_fetch | bigint | インデックススキャンによって取り出された有効行の個数です。 |
n_tup_ins | bigint | 挿入された行数です。 |
n_tup_upd | bigint | 更新された行数です。 |
n_tup_del | bigint | 削除された行数です。 |
n_tup_hot_upd | bigint | HOT更新(つまりインデックスの更新を別途必要としない)された行数です。 |
n_live_tup | bigint | 有効業の推定値です。 |
n_dead_tup | bigint | 不要行の推定値です。 |
last_vacuum | timestamp with time zone | テーブルが手作業でバキュームされた最終時刻です。(VACUUM FULLは含まれません)。 |
last_autovacuum | timestamp with time zone | 自動バキュームデーモンによりテーブルがバキュームされた最終時刻です。 |
last_analyze | timestamp with time zone | テーブルが手作業で解析された最終時刻です。 |
last_autoanalyze | timestamp with time zone | 自動バキュームデーモンによってテーブルが手作業で解析された最終時刻です。 |
vacuum_count | bigint | テーブルが手作業でバキュームされた回数です。(VACUUM FULLは含まれません)。 |
autovacuum_count | bigint | テーブルが自動バキュームデーモンによりバキュームされた回数です。 |
analyze_count | bigint | テーブルが手作業で解析された回数です。 |
autoanalyze_count | bigint | テーブルが自動バキュームデーモンによって解析された回数です。 |
pg_stat_all_tablesビューは現在のデータベース内のテーブル(TOASTテーブルを含む)毎に1行の形式で、特定のテーブルへのアクセスに関する統計情報を表示します。 pg_stat_user_tablesおよびpg_stat_sys_tablesビューにも同じ情報が含まれますが、それぞれユーザテーブルとシステムテーブルのみにフィルタされています。
表 27-6. pg_stat_all_indexesビュー
列 | 型 | 説明 |
---|---|---|
relid | oid | インデックス対象のテーブルのOIDです。 |
indexrelid | oid | インデックスのOIDです。 |
schemaname | name | インデックスが存在するスキーマの名前です。 |
relname | name | インデックス対象のテーブルの名前です。 |
indexrelname | name | インデックスの名前です。 |
idx_scan | bigint | インデックスに対して初期化されたインデックススキャンの個数です。 |
idx_tup_read | bigint | インデックスに対するスキャンにより返されたインデックス項目の個数です。 |
idx_tup_fetch | bigint | インデックスを使用する単純なインデックススキャンによって取り出された有効テーブル行数です。 |
pg_stat_all_indexesビューは、現在のデータベース内のインデックス毎に、特定のインデックスへのアクセスに関する統計情報を示す1行を保持します。 pg_stat_user_indexesとpg_stat_sys_indexesも同じ情報を保持しますが、ユーザ向けのインデックスとシステム向けのインデックスに対する行のみを保持するようにフィルタ処理されています。
単純インデックススキャンまたは"ビットマップ"インデックススキャンのいずれかを介してインデックスを使用することができます。 ビットマップスキャンでは、複数のインデックスの出力をANDやOR規則で組み合わせることができます。 このため、ビットマップスキャンが使用される場合、特定インデックスと個々のヒープ行の取り出しとを関連づけることが困難です。 したがってビットマップスキャンでは、使用したインデックスのpg_stat_all_indexes.idx_tup_read個数を増やし、そのテーブルのpg_stat_all_tables.idx_tup_fetch個数を増やしますが、pg_stat_all_indexes.idx_tup_fetchを変更しません。
注意: idx_tup_readとidx_tup_fetch個数は、ビットマップスキャンがまったく使用されていない場合でも異なります。 idx_tup_readはインデックスから取り出したインデックス項目を計上し、idx_tup_fetchはテーブルから取り出した有効行を計上するからです。 インデックスを用いて不要行やまだコミットされていない行が取り出された場合やインデックスオンリースキャン法によりヒープの取り出しが回避された場合に、後者は減少します。
表 27-7. pg_statio_all_tablesビュー
列 | 型 | 説明 |
---|---|---|
relid | oid | テーブルのOIDです。 |
schemaname | name | テーブルが存在するスキーマの名前です。 |
relname | name | テーブルの名前です。 |
heap_blks_read | bigint | テーブルから読み取られたディスクブロック数です。 |
heap_blks_hit | bigint | テーブル内のバッファヒット数です。 |
idx_blks_read | bigint | テーブル上のすべてのインデックスから読み取られたディスクブロック数です。 |
idx_blks_hit | bigint | テーブル上のすべてのインデックス内のバッファヒット数です。 |
toast_blks_read | bigint | テーブルのTOASTテーブル(もしあれば)から読み取られたディスクブロック数です。 |
toast_blks_hit | bigint | テーブルのTOASTテーブル(もしあれば)におけるバッファヒット数です。 |
tidx_blks_read | bigint | テーブルのTOASTテーブルのインデックス(もしあれば)から読み取られたディスクブロック数です。 |
tidx_blks_hit | bigint | テーブルのTOASTテーブルのインデックス(もしあれば)におけるバッファヒット数です。 |
pg_statio_all_tablesビューは現在のデータベース内のテーブル(TOASTテーブルを含む)ごとに、特定のテーブルのI/Oに関する統計情報情報を示す1行を保持します。 pg_statio_user_tablesとpg_statio_sys_tablesには同じ情報が保持されますが、ユーザテーブルとシステムテーブルに関する行のみを持つようにフィルタ処理がなされています。
表 27-8. pg_statio_all_indexesビュー
列 | 型 | 説明 |
---|---|---|
relid | oid | このインデックスに対応するテーブルのOIDです。 |
indexrelid | oid | インデックスのOIDです。 |
schemaname | name | インデックスが存在するスキーマの名前です。 |
relname | name | このインデックスに対応するテーブルの名前です。 |
indexrelname | name | インデックスの名前です。 |
idx_blks_read | bigint | インデックスから読み取られたディスクブロック数です。 |
idx_blks_hit | bigint | インデックスにおけるバッファヒット数です。 |
pg_statio_all_indexesビューは、現在のデータベース内のインデックス毎に、特定のインデックスへのI/Oに関する統計情報を持つ1行を保持します。 pg_statio_user_indexesとpg_statio_sys_indexesも同じ情報を保持しますが、それぞれユーザ向けのインデックスとシステム向けのインデックスに対する行のみを保持するようにフィルタ処理されています。
表 27-9. pg_statio_all_sequencesビュー
列 | 型 | 説明 |
---|---|---|
relid | oid | シーケンスのOIDです。 |
schemaname | name | シーケンスが存在するスキーマの名前です。 |
relname | name | シーケンスの名前です。 |
blks_read | bigint | シーケンスから読み取られたディスクブロック数です。 |
blks_hit | bigint | シーケンスにおけるバッファヒット数です。 |
pg_statio_all_sequencesビューは現在のデータベース内のシーケンスごとに、特定シーケンスにおけるI/Oに関する統計情報を示す1行を保持します。
表 27-10. pg_stat_user_functionsビュー
列 | 型 | 説明 |
---|---|---|
funcid | oid | 関数のOIDです。 |
schemaname | name | 関数が存在するスキーマの名前です。 |
funcname | name | 関数の名前です。 |
calls | bigint | 関数が呼び出された回数です。 |
total_time | double precision | 関数とその関数から呼び出されるその他の関数で費やされた、ミリ秒単位の総時間です。 |
self_time | double precision | その関数から呼び出されるその他の関数で費やされた時間を含まない、関数自身で費やされた、ミリ秒単位の総時間です。 |
pg_stat_user_functionsビューは追跡された関数毎に、その関数の実行に関する統計情報を1行保持します。 track_functionsパラメータは関数が追跡されるかどうかを正確に制御します。
表 27-11. pg_stat_replicationビュー
列 | 型 | 説明 |
---|---|---|
pid | integer | WAL送信プロセスのプロセスIDです。 |
usesysid | oid | WAL送信プロセスにログインしたユーザのOIDです。 |
usename | name | WAL送信プロセスにログインしたユーザの名前です。 |
application_name | text | WAL送信処理に接続したアプリケーションの名前です。 |
client_addr | inet | WAL送信処理に接続したクライアントのIPアドレスです。 このフィールドがNULLの場合、クライアントがサーバマシン上のUnixソケット経由で接続したことを示します。 |
client_hostname | text | client_addrのDNS逆引き検索により報告された、接続クライアントのホスト名です。 IP接続、かつlog_hostnameが有効である場合にのみこのフィールドは非NULLになります。 |
client_port | integer | クライアントがWAL送信処理との通信に使用するTCPポート、もしUnixソケットを使用する場合は-1です。 |
backend_start | timestamp with time zone | プロセスが開始、つまりクライアントがWAL送信処理に接続した時刻です。 |
state | text | 現在のWAL送信処理の状態です。 |
sent_location | text | 接続上に送信された最後のトランザクションログ位置です。 |
write_location | text | スタンバイサーバによってディスクに書き出された最後のトランザクションログ位置です。 |
flush_location | text | スレーブによってディスクに吐き出された最後のトランザクションログ位置です。 |
replay_location | text | スタンバイサーバ上のデータベースに再生された最後のトランザクションログ位置です。 |
sync_priority | integer | このスタンバイサーバが同期スタンバイとして選択される優先度です。 |
sync_state | text | スタンバイサーバの同期状態です。 |
pg_stat_replicationビューには、WAL送信プロセス毎に、送信処理に接続したスタンバイサーバへのレプリケーションに関する統計情報を示す1行を保持します。 直接接続されたサーバのみが一覧表示されます。 下流のスタンバイサーバに関する情報はありません。
表 27-12. pg_stat_database_conflictsビュー
列 | 型 | 説明 |
---|---|---|
datid | oid | データベースのOIDです。 |
datname | name | データベースの名前です。 |
confl_tablespace | bigint | データベースにおいて、削除されたテーブル空間のためにキャンセルされた問い合わせの個数です。 |
confl_lock | bigint | データベースにおいて、ロック時間切れのためにキャンセルされた問い合わせの個数です。 |
confl_snapshot | bigint | データベースにおいて、古いスナップショットのためにキャンセルされた問い合わせの個数です。 |
confl_bufferpin | bigint | データベースにおいて、ピンが付いたバッファのためにキャンセルされた問い合わせの個数です。 |
confl_deadlock | bigint | データベースにおいて、デッドロックのためにキャンセルされた問い合わせの個数です。 |
pg_stat_database_conflictsビューは、データベース毎にスタンバイサーバでのリカバリと競合するためにキャンセルされた問い合わせに関するデータベース全体の統計情報を示す1行を保持します。 マスタサーバでは競合は発生しませんので、スタンバイサーバ上の情報のみが保持されます。
統計情報を参照する他の方法は、上述の標準ビューによって使用される基礎的な統計情報アクセス関数と同じ関数を使用した問い合わせを作成することで設定することができます。 こうした関数の名前などに関する詳細については、標準ビューの定義を参照してください。 (例えばpsqlでは\d+ pg_stat_activityを発行してください。) データベースごとの統計情報についてのアクセス関数は、どのデータベースに対して報告するのかを識別するためにデータベースのOIDを取ります。 テーブルごと、インデックスごとの関数はテーブルの、もしくはインデックスのOIDを取ります。 関数ごとの統計情報の関数は、関数のOIDを取ります。 これらの関数を使用して参照できるテーブルとインデックス、および関数は現在のデータベース内のものだけであることに注意してください)。
その他の統計情報収集に関連した関数を表27-13に示します。
表 27-13. その他の統計情報関数
関数 | 戻り値の型 | 説明 |
---|---|---|
pg_backend_pid() | integer | 現在のセッションを扱うサーバプロセスのプロセスID。 |
pg_stat_get_activity (integer) | setof record | PIDが指定された場合、それに該当するバックエンドの情報のレコード、NULLが指定された場合はシステム上のアクティブな各バックエンドの情報がレコードが返されます。返される情報内容はpg_stat_activityの一部と同じです。 |
pg_stat_clear_snapshot() | void | 現在の統計情報スナップショットを破棄します。 |
pg_stat_reset() | void | 現在のデータベースに関する統計カウンタすべてをゼロにリセットします(スーパーユーザ権限が必要です)。 |
pg_stat_reset_shared (text) | void | 引数に応じて、クラスタ全体の統計情報カウンタの一部をゼロに戻します(スーパーユーザ権限が必要です)。 pg_stat_reset_shared('bgwriter')を呼び出すと、pg_stat_bgwriterで示される値すべてがゼロになります。 |
pg_stat_reset_single_table_counters (oid) | void | 現在のデータベース内にある、ひとつのテーブルあるいはインデックスの統計情報をゼロにリセットします(スーパーユーザ権限が必要です)。 |
pg_stat_reset_single_function_counters (oid) | void | 現在のデータベース内にある、ひとつの関数の統計情報をゼロにリセットします(スーパーユーザ権限が必要です)。 |
pg_stat_activityビューの基礎となるpg_stat_get_activity
関数は、
各バックエンドプロセスに関して利用可能な情報をすべて含むレコード集合を返します。
この情報の一部のみを入手することがより簡便である場合があるかもしれません。
このような場合、表27-14に示す、古めのバックエンド単位の統計情報アクセス関数を使用することができます。
これらのアクセス関数は、1から現在活動中のバックエンドの個数までの値を取る、バックエンドID番号を使用します。
pg_stat_get_backend_idset
関数は、これらの関数を呼び出すために、活動中のバックエンド毎に1行を生成する簡便な方法を提供します。
例えば以下はすべてのバックエンドについてPIDと現在の問い合わせを示します。
SELECT pg_stat_get_backend_pid(s.backendid) AS pid, pg_stat_get_backend_activity(s.backendid) AS query FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;
表 27-14. バックエンド単位の統計情報関数
関数 | 戻り値の型 | 説明 |
---|---|---|
pg_stat_get_backend_idset() | setof integer | 現在活動中のバックエンドID番号(1から活動中のバックエンドの個数まで)を設定します。 |
pg_stat_get_backend_activity(integer) | text | バックエンドが最後に行った問い合わせテキストです。 |
pg_stat_get_backend_activity_start(integer) | timestamp with time zone | 最後の問い合わせが開始された時刻です。 |
pg_stat_get_backend_client_addr(integer) | inet | バックエンドに接続したクライアントのIPアドレスです。 |
pg_stat_get_backend_client_port(integer) | integer | クライアントが通信に使用しているTCPポート番号です。 |
pg_stat_get_backend_dbid(integer) | oid | バックエンドが接続するデータベースのOIDです。 |
pg_stat_get_backend_pid(integer) | integer | バックエンドのプロセスIDです。 |
pg_stat_get_backend_start(integer) | timestamp with time zone | プロセスが開始された時刻です。 |
pg_stat_get_backend_userid(integer) | oid | バックエンドにログインしたユーザのOIDです。 |
pg_stat_get_backend_waiting(integer) | boolean | バックエンドが現在ロックを待機している場合は真です。 |
pg_stat_get_backend_xact_start(integer) | timestamp with time zone | 現在のトランザクションが開始された時刻です。 |