無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

27.2. 統計情報コレクタ

PostgreSQL 統計情報コレクタ はサーバの活動状況に関する情報を収集し、報告するサブシステムです。 現在、コレクタはテーブルとインデックスへのアクセスをディスクブロックおよび個々の行単位で数えることができます。 またこれは、各テーブル内の総行数、および、各テーブルでのVACUUMやANALYZEの実施情報を追跡します。 また、ユーザ定義関数の呼ばれた回数、それぞれの消費した総時間をカウントします。

また、 PostgreSQL は他のサーバプロセスによって現在実行されている問い合わせを正確に報告する機能を持ちます。 これはコレクタプロセスから独立している機能です。

27.2.1. 統計情報収集のための設定

統計情報の収集によって問い合わせの実行に少しオーバーヘッドが加わりますので、システムは情報を収集するようにもしないようにも設定することができます。 これは通常は 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.2.2. 収集した統計情報の表示

統計情報の収集結果を表示するための、多くの定義済みのビューがあり、 表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 現在のバックエンドの総体的な状態です。 以下のいずれかの値を取ることができます。

  • active : バックエンドは問い合わせを実行中です。

  • idle : バックエンドは新しいクライアントからのコマンドを待機しています。

  • idle in transaction : バックエンドはトランザクションの内部にいますが、現在実行中の問い合わせが現在ありません。

  • idle in transaction (aborted) : この状態は idle in transaction と似ていますが、トランザクション内のある文がエラーになっている点が異なります。

  • fastpath function call : バックエンドは近道関数を実行中です。

  • disabled : この状態は、このバックエンドで track_activities が無効である場合に報告されます。

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行を保持します。 マスタサーバでは競合は発生しませんので、スタンバイサーバ上の情報のみが保持されます。

27.2.3. 統計情報関数

統計情報を参照する他の方法は、上述の標準ビューによって使用される基礎的な統計情報アクセス関数と同じ関数を使用した問い合わせを作成することで設定することができます。 こうした関数の名前などに関する詳細については、標準ビューの定義を参照してください。 (例えば 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 現在のトランザクションが開始された時刻です。

powered by SEO.CUG.NET