他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

28.2. 累積統計システム

PostgreSQL累積統計システムは、サーバ活動に関する情報の収集と報告をサポートしています。 現在、コレクタはテーブルとインデックスへのアクセスをディスクブロックおよび個々の行単位で数えることができます。 またこれは、各テーブル内の総行数、および、各テーブルでのバキュームやアナライズの実施情報を数えます。 有効になっている場合は、ユーザ定義関数の呼ばれた回数、それぞれの消費した総時間を数えます。

また、PostgreSQLは他のサーバプロセスによって現在実行されている正確なコマンドなど現在システム内で起きていること、またシステム内にどんな他の接続が存在するかということについての動的情報を正確に報告する機能を持ちます。 これは累積統計システムから独立している機能です。

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

統計情報の収集によって問い合わせの実行に少しオーバーヘッドが加わりますので、システムは情報を収集するようにもしないようにも設定できます。 これは通常はpostgresql.conf内で設定される、設定パラメータによって制御されます。 (設定パラメータの設定についての詳細は第20章を参照してください。)

track_activitiesパラメータは、任意のサーバプロセスで現在実行されているコマンドを監視するかどうかを指定できます。

track_countsパラメータは、テーブルおよびインデックスアクセスに関する累積統計を収集するかどうかを制御します。

track_functionsパラメータは、ユーザ定義関数の使用状況を追跡するかどうかを指定できます。

track_io_timingパラメータは、ブロック読み取りおよび書き込み時間を監視するかどうかを指定できます。

track_wal_io_timingパラメータは、WALの書き込み時間を監視するかどうかを指定できます。

通常、これらの変数は全てのサーバプロセスに適用できるようにpostgresql.conf内で設定されます。 しかし、SETコマンドを使用して、個別のセッションで有効または無効にできます。 (一般ユーザがその活動を管理者から隠すことを防止するために、スーパーユーザのみがSETを使用してこれらのパラメータを変更できます。)

累積統計情報は共有メモリに収集されます。 すべてのPostgreSQLプロセスがローカルで統計情報を収集し、適切な間隔で共有データを更新します。 物理レプリカを含むサーバがクリーンにシャットダウンすると、統計データの永続的なコピーがpg_statサブディレクトリに保存されます。 これにより、サーバの再起動後も統計情報を保持できます。 対照的に、クリーンでないシャットダウンから開始する場合(即時シャットダウン後、サーバクラッシュ、ベースバックアップから開始、ポイントインタイムリカバリなど)、すべての統計カウンタがリセットされます。

28.2.2. 統計情報の表示

システムの現在の状態を表示するために、いくつかの定義済みのビューがあり、表 28.1に一覧されています。 また、累積統計の収集結果を表示するために、他にもいくつかのビューがあり、表 28.2に一覧されています。 あるいはまた、28.2.24で説明する、基礎的な累積統計関数を使用した独自のビューを構築することもできます。

収集したデータを監視するために累積統計ビューや関数を使用する場合、この情報は即座に更新されないことを認識することが重要です。 個々のサーバプロセスは、待機状態になる直前に、累積統計を共有メモリにフラッシュしますが、PGSTAT_MIN_INTERVALミリ秒に1回以上の頻度でフラッシュすることはありません(サーバ構築時に変更しない限り1秒)。 したがって、まだ処理中の問い合わせやトランザクションは表示される合計に影響を与えず、表示される情報は実際のアクティビティより遅くなります。 しかし、track_activitiesで収集される現在の問い合わせの情報は常に最新です。

もう1つの重要なポイントは、サーバプロセスが累積された統計のいずれかを表示するように要求された場合、アクセスされた値はデフォルト構成で現在のトランザクションが終了するまでキャッシュされることです。 したがって、現在のトランザクションを続行しているかぎり、統計には静的な情報が表示されます。 同様に、すべてのセッションの現在の問合せに関する情報は、その情報がトランザクション内で最初に要求されたときに収集され、同じ情報がトランザクション全体にわたって表示されます。 これはバグではなく特徴です。 これにより、統計に対して複数の問合せを実行し、結果を相互に関連付ける際に、ユーザーの下で数値が変化することを心配する必要がないためです。 統計情報を対話的に分析する場合、または高価な問い合わせを使用する場合、個々の統計へのアクセス間の時間差によって、キャッシュされた統計に大幅な歪みが発生する可能性があります。 歪みを最小化するには、stats_fetch_consistencysnapshotに設定します。 ただし、不要な統計データをキャッシュするためのメモリー使用量が増加します。逆に、統計が一度しかアクセスされないことがわかっている場合は、アクセスされた統計のキャッシュは不要であり、stats_fetch_consistencynoneに設定することで回避できます。 pg_stat_clear_snapshot()を呼び出して、現在のトランザクションの統計スナップショットまたはキャッシュされた値(もしあれば)を破棄することができます。 次に統計情報を使用すると(スナップショットモードの場合)新しいスナップショットが作成され、(キャッシュモードの場合)アクセスされた統計がキャッシュされます。

トランザクションはまた、ビューのpg_stat_xact_all_tablespg_stat_xact_sys_tablespg_stat_xact_user_tables、およびpg_stat_xact_user_functionsを通じて、自身の統計情報(まだ共有メモリの統計情報にフラッシュされていない)も参照することができます。 これらの数値はトランザクション中に継続的に更新されていくため上記の様な(静的な情報を示す)振る舞いとはなりません。

表 28.1で表示される動的な統計ビューの情報の中にはセキュリティ制限があるものがあります。 一般ユーザは自身のセッション(メンバとなっているロールに属するセッション)に関する全情報だけを参照できます。 他セッションに関する行では多くの列がNULLになるでしょう。 しかしながら、セッションの存在とセッションのユーザとデータベースなどの一般的な属性は全ユーザに可視であることに注意してください。 スーパーユーザと組み込みロールpg_read_all_statsの権限を持つロール(22.5も参照してください)は全セッションに関する全情報を参照できます。

表28.1 動的統計情報ビュー

ビュー名説明
pg_stat_activity サーバプロセスあたり1行の形式で、状態や現在の問い合わせ等のプロセスの現在の活動状況に関連した情報を表示します。 詳細についてはpg_stat_activityを参照してください。
pg_stat_replication WAL送信プロセス毎に1行の形式で、送信サーバが接続したスタンバイサーバへのレプリケーションに関する統計情報を表示します。 詳細についてはpg_stat_replicationを参照してください。
pg_stat_wal_receiver 1行の形式で、受信サーバが接続したサーバからWAL受信サーバに関する統計情報を表示します。 詳細についてはpg_stat_wal_receiverを参照してください。
pg_stat_recovery_prefetch 1行の形式で、リカバリ中にプリフェッチされたブロックに関する統計情報を表示します。 詳細についてはpg_stat_recovery_prefetch を参照してください。
pg_stat_subscription 1つのサブスクリプションにつき少なくとも1行の形式で、サブスクリプションワーカーに関する情報を表示します。 詳細についてはpg_stat_subscriptionを参照してください。
pg_stat_ssl 接続(通常およびレプリケーション)あたり1行の形式で、接続に使われるSSLの情報を表示します。 詳細についてはpg_stat_sslを参照してください。
pg_stat_gssapi 接続(通常およびレプリケーション)あたり1行の形式で、接続に使われるGSSAPI認証と暗号化に関する情報を表示します。 詳細についてはpg_stat_gssapiを参照してください。
pg_stat_progress_analyze ANALYZEを実行している(自動バキュームワーカープロセスを含んだ)各バックエンドごとに1行の形式で、現在の進捗を表示します。 28.4.1を参照してください。
pg_stat_progress_create_index CREATE INDEXまたはREINDEXを実行している各バックエンドごとに1行の形式で、現在の進捗を表示します。 28.4.2を参照してください。
pg_stat_progress_vacuum VACUUMを実行している(自動バキュームワーカープロセスを含んだ)各バックエンドごとに1行の形式で、現在の進捗を表示します。 28.4.3を参照してください。
pg_stat_progress_cluster CLUSTERまたはVACUUM FULLを実行している各バックエンドごとに1行の形式で、現在の進捗を表示します。 28.4.4を参照してください。
pg_stat_progress_basebackup ベースバックアップをストリームしている各WAL送信プロセスごとに1行の形式で、現在の進捗を表示します。 28.4.5を参照してください。
pg_stat_progress_copy COPYを実行している各バックエンドごとに1行の形式で、現在の進捗を表示します。 28.4.6を参照してください。

表28.2 収集済み統計情報ビュー

ビュー名説明
pg_stat_archiver WALアーカイバプロセスの活動状況に関する統計情報を1行のみで表示します。 詳細についてはpg_stat_archiverを参照してください。
pg_stat_bgwriter バックグラウンドライタプロセスの活動状況に関する統計情報を1行のみで表示します。 詳細についてはpg_stat_bgwriterを参照してください。
pg_stat_wal WALの活動状況に関する統計情報を1行のみで表示します。 詳細についてはpg_stat_walを参照してください。
pg_stat_database データベース毎に1行の形式で、データベース全体の統計情報を表示します。 詳細についてはpg_stat_databaseを参照してください。
pg_stat_database_conflicts データベース毎に1行の形式で、スタンバイサーバにおける復旧との競合のためにキャンセルされた問い合わせについてのデータベース全体の統計情報を表示します。 詳細についてはpg_stat_database_conflictsを参照してください。
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_slru SLRUごとに1行の形で、操作に関する統計情報を示します。 詳細についてはpg_stat_slruを参照してください。
pg_stat_replication_slots レプリケーションスロットごとに1行の形式で、レプリケーションスロットの使用状況に関する統計情報を表示します。 詳細については pg_stat_replication_slotsを参照してください。
pg_stat_subscription_stats サブスクリプションごとに1行の形式で、エラーに関する統計を表示します。 詳細についてはpg_stat_subscription_statsを参照してください。

インデックス単位の統計情報は、どのインデックスが使用され、どの程度効果があるのかを評価する際に、特に有用です。

pg_statio_ビューは主に、バッファキャッシュの効率を評価する際に有用です。 実ディスク読み取りの数がバッファヒットの数よりもかなり少ないのであれば、そのキャッシュはカーネル呼び出しを行うことなく、ほとんどの読み取り要求を満足させています。 しかし、PostgreSQLバッファキャッシュに存在しないデータはカーネルのI/Oキャッシュにある可能性があり、そのため、物理的な読み取りを行うことなく取り出される可能性があるというPostgreSQLのディスクI/Oの取り扱いのため、これらの統計情報は、完全な論拠を提供しません。 PostgreSQLのI/O動作に関するより詳細な情報を入手したいのであれば、PostgreSQL統計情報ビューとカーネルのI/Oの取り扱いの監視を行うオペレーティングシステムユーティリティを組み合わせることを勧めます。

28.2.3. pg_stat_activity

pg_stat_activityはサーバプロセス毎に、そのプロセスの現在の活動に関連する情報を表示する1行を持ちます。

表28.3 pg_stat_activityビュー

列 型

説明

datid oid

バックエンドが接続するデータベースのOIDです。

datname name

バックエンドが接続するデータベースの名前です。

pid integer

バックエンドのプロセスIDです。

leader_pid integer

このプロセスがパラレルクエリワーカーであればパラレルグループリーダーのプロセスIDです。 このプロセスがパラレルグループリーダーであるか、パラレルクエリに参加していないのであればNULLです。

usesysid oid

バックエンドにログインしたユーザのOIDです。

usename name

バックエンドにログインしたユーザの名前です。

application_name text

バックエンドに接続したアプリケーションの名前です。

client_addr inet

バックエンドに接続したクライアントのIPアドレスです。 このフィールドがNULLである場合、これはクライアントがサーバマシン上のUnixソケット経由で接続されたか、自動バキュームなど内部プロセスであることを示しています。

client_hostname text

client_addrのDNS逆引き検索により報告された、接続クライアントのホスト名です。 IP接続、かつlog_hostnameが有効である場合にのみこのフィールドは非NULLになります。

client_port integer

クライアントがバックエンドとの通信に使用するTCPポート番号、もしくはUnixソケットを使用する場合は-1です。 このフィールドがNULLであれば、内部のサーバプロセスであることを示しています。

backend_start timestamp with time zone

プロセスが開始した時刻です。 クライアントのバックエンドについては、クライアントがサーバに接続した時刻です。

xact_start timestamp with time zone

プロセスの現在のトランザクションが開始した時刻です。活動中のトランザクションがない場合はNULLです。 現在の問い合わせがトランザクションの先頭である場合、この列はquery_start列と同じです。

query_start timestamp with time zone

現在活動中の問い合わせが開始した時刻です。もしstateactiveでない場合は直前の問い合わせが開始した時刻です。

state_change timestamp with time zone

stateの最終変更時刻です。

wait_event_type text

バックエンドが待機しているイベントがあれば、その型、なければNULLとなります。 表 28.4を参照してください。

wait_event text

バックエンドが現在待機している場合は待機イベント名、そうでなければNULLとなります。 表 28.5から表 28.13までを参照してください。

state text

現在のバックエンドの総体的な状態です。 以下のいずれかの値を取ることができます。

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

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

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

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

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

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

backend_xid xid

もしあれば、このバックエンドの最上位のトランザクション識別子です。

backend_xmin xid

現在のバックエンドのxminです。

query_id bigint

バックエンドの直近の問い合わせ識別子です。 stateactiveの場合、このフィールドには現在実行中の問い合わせ識別子が表示されます。 他のすべての状態では、最後に実行された問い合わせ識別子が表示されます。 問い合わせ識別子はデフォルトでは計算されないため、compute_query_idパラメータが有効になっているか、問い合わせ識別子を計算するサードパーティモジュールが設定されていない限り、このフィールドはnullになります。

query text

バックエンドの最も最近の問い合わせテキストです。 stateactiveの場合、このフィールドは現在実行中の問い合わせを示します。 その他のすべての状態では、実行済みの最後の問い合わせを示します。 デフォルトでは問い合わせのテキストは1024バイトで切り詰められますが、この値はパラメータtrack_activity_query_sizeにより変更できます。

backend_type text

現在のバックエンドの種別です。 取り得る値はautovacuum launcherautovacuum workerlogical replication launcherlogical replication workerparallel worker, background writerclient backendcheckpointerarchiverstartupwalreceiverwalsenderwalwriterです。 これに加えて、拡張によって登録されたバックグラウンドワーカーは追加の型を持つかも知れません。


注記

wait_eventstate列は独立しています。 バックエンドがactive状態である場合、いくつかのイベントではwaitingかもしれませんし、そうでないかもしれません。 状態がactiveであり、wait_eventがNULLでない場合、問い合わせは実行中ですが、システム内のどこかでブロックされていることを意味します。

表28.4 待機イベント型

待機イベント型説明
Activity サーバプロセスはアイドル状態です。 このイベント型はプロセスがメインの処理ループ内で活動を待機していることを示します。 wait_eventによりその待機点が特定できます。 表 28.5を参照してください。
BufferPin サーバプロセスは、データバッファに排他的アクセスをするために待機しています。 バッファピン待機は、他のプロセスが該当のバッファから最後に読み込んだデータのオープンカーソルを保持している場合に長引かされることがあります。 表 28.6を参照してください。
Client サーバプロセスはユーザアプリケーションに接続しているソケット上での活動を待機しています。 それゆえ、サーバはその内部プロセスとは無関係の何かが起きることを期待しています。 wait_eventによりその待機点が特定できます。表 28.7を参照してください。
Extension サーバプロセスは拡張モジュールにより定義された条件を待機しています。 表 28.8を参照してください。
IO サーバプロセスは入出力が完了するのを待機しています。 wait_eventによりその待機点が特定できます。表 28.9を参照してください。
IPC サーバプロセスは、他のサーバプロセスとの相互作用を待機しています。 wait_eventによりその待機点が特定できます。表 28.10を参照してください。
Lock サーバプロセスは重量ロックを待機しています。 ロックマネージャロックや単にロックとしても知られている重量ロックは、主にテーブルのようなSQLで可視なオブジェクトを保護します。 しかし、それらはリレーション拡張のような、なんらかの内部操作のために相互排他を確実にするためにも使用されます。 wait_eventは、待たせているロックの型を識別します。 表 28.11を参照してください。
LWLock サーバプロセスは軽量ロックを待機しています。 ほとんどのこのようなロックは、共有メモリ内の特定のデータ構造を保護します。 wait_eventには軽量ロックの目的を特定する名前が入ります。 (特定の名前がついたロックもあれば、似たような目的のロックのグループの一部となっているものもあります。) 表 28.12を参照してください。
Timeout サーバプロセスはタイムアウトが満了するのを待機しています。 wait_eventによりその待機点が特定できます。表 28.13を参照してください。

表28.5 Activity型の待機イベント

Activity待機イベント説明
ArchiverMainアーカイバプロセスのメインループ内で待機しています。
AutoVacuumMain自動バキュームのランチャプロセスのメインループ内で待機しています。
BgWriterHibernateバックグラウンドライタプロセス内で待機し、休止状態になっています。
BgWriterMainバックグラウンドライタプロセスのメインループ内で待機しています。
CheckpointerMainチェックポインタプロセスのメインループ内で待機しています。
LogicalApplyMain論理レプリケーション適用プロセスのメインループ内で待機しています。
LogicalLauncherMain論理レプリケーションランチャプロセスのメインループ内で待機しています。
RecoveryWalStreamストリーミングリカバリ中に、起動プロセスのメインループ内でWALが到着するのを待機しています。
SysLoggerMainsysloggerプロセスのメインループ内で待機しています。
WalReceiverMainWAL受信プロセスのメインループ内で待機しています。
WalSenderMainWAL送信プロセスのメインループ内で待機しています。
WalWriterMainWAL書き込みプロセスのメインループ内で待機しています。

表28.6 BufferPin型の待機イベント

BufferPin待機イベント説明
BufferPinバッファ上の排他ピンを獲得するのを待機しています。

表28.7 Client型の待機イベント

Client待機イベント説明
ClientReadクライアントからのデータの読み込みを待機しています。
ClientWriteクライアントへのデータの書き込みを待機しています。
GSSOpenServerGSSAPIセッションを確立する際にクライアントからのデータ読み込みを待機しています。
LibPQWalReceiverConnectWAL受信プロセス内でリモートサーバへの接続が確立するのを待機しています。
LibPQWalReceiverReceiveWAL受信プロセス内でリモートサーバからデータを受信するのを待機しています。
SSLOpenServer接続試行中にSSLを待機しています。
WalSenderWaitForWALWAL送信プロセス内でWALがフラッシュされるのを待機しています。
WalSenderWriteDataWAL送信プロセス内でWAL受信者からの応答を処理している時に、何らかの活動を待機しています。

表28.8 Extension型の待機イベント

Extension待機イベント説明
Extension拡張内で待機しています。

表28.9 IO型の待機イベント

IO待機イベント説明
BaseBackupReadベースバックアップがファイルから読み取るのを待機しています。
BaseBackupSyncベースバックアップによって書き込まれたデータが永続的ストレージに到達するのを待機しています。
BaseBackupWriteベースバックアップがファイルに書き込むのを待機しています。
BufFileReadバッファファイルからの読み取りを待機しています。
BufFileWriteバッファファイルへの書き込みを待機しています。
BufFileTruncateバッファファイルが切り捨てられるのを待機しています。
ControlFileReadpg_controlファイルからの読み取りを待機しています。
ControlFileSyncpg_controlファイルが永続的ストレージに到達するのを待機しています。
ControlFileSyncUpdatepg_controlファイルの更新が永続的ストレージに到達するのを待機しています。
ControlFileWritepg_controlファイルへの書き込みを待機しています。
ControlFileWriteUpdatepg_controlファイルの更新の書き込みを待機しています。
CopyFileReadファイルコピーの操作の間、読み込みを待機しています。
CopyFileWriteファイルコピーの操作の間、書き込みを待機しています。
DSMFillZeroWrite動的共有メモリの背後のファイルにゼロのバイトを書き込むのを待機しています。
DataFileExtendリレーションのデータファイルが拡張されるのを待機しています。
DataFileFlushリレーションのデータファイルが永続的ストレージに到達するのを待機しています。
DataFileImmediateSyncリレーションのデータファイルが永続的ストレージに即座に同期されるのを待機しています。
DataFilePrefetchリレーションのデータファイルからの非同期プリフェッチを待機しています。
DataFileReadリレーションのデータファイルからの読み込みを待機しています。
DataFileSyncリレーションのデータファイルへの変更が永続的ストレージに到達するのを待機しています。
DataFileTruncateリレーションのデータファイルが切り詰められるのを待機しています。
DataFileWriteリレーションのデータファイルへの書き込みを待機しています。
LockFileAddToDataDirReadデータディレクトリのロックファイルに行を追加する間の読み込みを待機しています。
LockFileAddToDataDirSyncデータディレクトリのロックファイルに行を追加する間、データが永続的ストレージに到達するのを待機しています。
LockFileAddToDataDirWriteデータディレクトリのロックファイルに行を追加する間の書き込みを待機しています。
LockFileCreateReadデータディレクトリのロックファイルを作成する間の読み込みを待機しています。
LockFileCreateSyncデータディレクトリのロックファイルを作成する間、データが永続的ストレージに到達するのを待機しています。
LockFileCreateWriteデータディレクトリのロックファイルを作成する間の書き込みを待機しています。
LockFileReCheckDataDirReadデータディレクトリのロックファイルを再検査する間の読み込みを待機しています。
LogicalRewriteCheckpointSyncチェックポイントの間に、論理的な再書き込みのマッピングが永続的ストレージに到達するのを待機しています。
LogicalRewriteMappingSync論理的な再書き込みの間に、マッピングデータが永続的ストレージに到達するのを待機しています。
LogicalRewriteMappingWrite論理的な再書き込みの間に、マッピングデータの書き込みを待機しています。
LogicalRewriteSync論理的な再書き込みのマッピングが永続的ストレージに到達するのを待機しています。
LogicalRewriteTruncate論理的な再書き込みの際にマッピングデータが切り詰められるのを待機しています。
LogicalRewriteWrite論理的な再書き込みのマッピングの書き込みを待機しています。
RelationMapReadリレーションのマップファイルの読み込みを待機しています。
RelationMapSyncリレーションのマップファイルが永続的ストレージに到達するのを待機しています。
RelationMapWriteリレーションのマップファイルの書き込みを待機しています。
ReorderBufferRead並べ替えのバッファ管理の間に読み込みを待機しています。
ReorderBufferWrite並べ替えのバッファ管理の間に書き込みを待機しています。
ReorderLogicalMappingRead並べ替えのバッファ管理の間に、論理マッピングの読み込みを待機しています。
ReplicationSlotReadレプリケーションスロットの制御ファイルからの読み込みを待機しています。
ReplicationSlotRestoreSyncレプリケーションスロットの制御ファイルをメモリにリストアする間、それが永続的ストレージに到達するのを待機しています。
ReplicationSlotSyncレプリケーションスロットの制御ファイルが永続的ストレージに到達するのを待機しています。
ReplicationSlotWriteレプリケーションスロットの制御ファイルへの書き込みを待機しています。
SLRUFlushSyncチェックポイントまたはデータベースのシャットダウン中に、SLRUデータが永続的ストレージに到達するのを待機しています。
SLRUReadSLRUページの読み込みを待機しています。
SLRUSyncページ書き込みの後、SLRUデータが永続的ストレージに到達するのを待機しています。
SLRUWriteSLRUページの書き込みを待機しています。
SnapbuildReadシリアライズされた通時的カタログのスナップショットの読み込みを待機しています。
SnapbuildSyncシリアライズされた通時的カタログのスナップショットが永続的ストレージに到達するのを待機しています。
SnapbuildWriteシリアライズされた通時的カタログのスナップショットの書き込みを待機しています。
TimelineHistoryFileSyncストリーミングレプリケーションを経由して受け取ったタイムラインの履歴ファイルが永続的ストレージに到達するのを待機しています。
TimelineHistoryFileWriteストリーミングレプリケーションを経由して受け取ったタイムラインの履歴ファイルの書き込みを待機しています。
TimelineHistoryReadタイムラインの履歴ファイルの読み込みを待機しています。
TimelineHistorySync新しく作成されたタイムラインの履歴ファイルが永続的ストレージに到達するのを待機しています。
TimelineHistoryWrite新しく作成されたタイムラインの履歴ファイルの書き込みを待機しています。
TwophaseFileRead二相の状態ファイルの読み込みを待機しています。
TwophaseFileSync二相の状態ファイルが永続的ストレージに到達するのを待機しています。
TwophaseFileWrite二相の状態ファイルの書き込みを待機しています。
VersionFileWriteデータベースの作成中にバージョンファイルが作成されるのを待機しています。
WALBootstrapSyncブートストラップ時にWALが永続的ストレージに到達するのを待機しています。
WALBootstrapWriteブートストラップ時にWALページの書き込みを待機しています。
WALCopyRead既存のWALセグメントをコピーして新しいWALセグメントを作成する時に読み込みを待機しています。
WALCopySync既存のWALセグメントをコピーして作成した新しいWALセグメントが永続的ストレージに到達するのを待機しています。
WALCopyWrite既存のWALセグメントをコピーして新しいWALセグメントを作成する時に書き込みを待機しています。
WALInitSync新しく初期化されたWALファイルが永続的ストレージに到達するのを待機しています。
WALInitWrite新しいWALファイルを初期化している時に書き込みを待機しています。
WALReadWALファイルからの読み込みを待機しています。
WALSenderTimelineHistoryReadWAL送信サーバのタイムラインコマンドで、タイムラインの履歴ファイルの読み込みを待機しています。
WALSyncWALファイルが永続的ストレージに達するのを待機しています。
WALSyncMethodAssign新しいWALの同期方法を割り当てている時にデータが永続的ストレージに到達するのを待機しています。
WALWriteWALファイルへの書き込みを待機しています。

表28.10 IPC型の待機イベント

IPC待機イベント説明
AppendReadyAppendプランノードのサブプランノードの準備が整うのを待機しています。
ArchiveCleanupCommandarchive_cleanup_commandが完了するのを待機しています。
ArchiveCommandarchive_commandが完了するのを待機しています。
BackendTermination他のバックエンドの終了を待機しています。
BackupWaitWalArchiveバックアップに必要なWALファイルがアーカイブに成功するのを待機しています。
BgWorkerShutdownバックグラウンドワーカーがシャットダウンするのを待機しています。
BgWorkerStartupバックグラウンドワーカーが起動するのを待機しています。
BtreePageパラレルB-treeスキャンを継続するのに必要なページ番号が利用可能になるのを待機しています。
BufferIOバッファI/Oが完了するのを待機しています。
CheckpointDoneチェックポイントが完了するのを待機しています。
CheckpointStartチェックポイントが開始するのを待機しています。
ExecuteGatherGather計画ノードの実行時に子プロセスの活動を待機しています。
HashBatchAllocate選ばれたパラレルハッシュ参加者がハッシュテーブルを獲得するのを待機しています。
HashBatchElectハッシュテーブルを獲得するパラレルハッシュ参加者を選ぶのを待機しています。
HashBatchLoad他のパラレルハッシュ参加者がハッシュテーブルのロードを完了させるのを待機しています。
HashBuildAllocate選ばれたパラレルハッシュ参加者が初期ハッシュテーブルを獲得するのを待機しています。
HashBuildElect初期ハッシュテーブルを獲得するパラレルハッシュ参加者を選ぶのを待機しています。
HashBuildHashInner他のパラレルハッシュ参加者がインナーリレーションのハッシュを完了させるのを待機しています。
HashBuildHashOuter他のパラレルハッシュ参加者がアウターリレーションのパーティショニングを完了させるのを待機しています。
HashGrowBatchesAllocate選ばれたパラレルハッシュ参加者が追加バッチを獲得するのを待機しています。
HashGrowBatchesDecide将来のバッチの増加を決めるパラレルハッシュ参加者を選ぶのを待機しています。
HashGrowBatchesElect追加バッチを獲得するパラレルハッシュ参加者を選ぶのを待機しています。
HashGrowBatchesFinish選ばれたパラレルハッシュ参加者が将来のバッチの増加を決めるのを待機しています。
HashGrowBatchesRepartition他のパラレルハッシュ参加者がリパーティショニングを完了させるのを待機しています。
HashGrowBucketsAllocate選ばれたパラレルハッシュ参加者が追加バケット獲得を完了するのを待機しています。
HashGrowBucketsElect追加バケットを獲得するパラレルハッシュ参加者を選ぶのを待機しています。
HashGrowBucketsReinsert他のパラレルハッシュ参加者が新しいバケットに対するタプル挿入を完了させるのを待機しています。
LogicalSyncData論理レプリケーションのリモートサーバが最初のテーブル同期のためのデータを送信するのを待機しています。
LogicalSyncStateChange論理レプリケーションのリモートサーバが状態を変更するのを待機しています。
MessageQueueInternal他のプロセスが共有メッセージキューにアタッチされるのを待機しています。
MessageQueuePutMessage共有メッセージキューにプロトコルのメッセージを書くのを待機しています。
MessageQueueReceive共有メッセージキューからバイトを受信するのを待機しています。
MessageQueueSend共有メッセージキューにバイトを送信するのを待機しています。
ParallelBitmapScanパラレルビットマップスキャンが初期化されるのを待機しています。
ParallelCreateIndexScanパラレルCREATE INDEXワーカーがヒープスキャンを完了するのを待機しています。
ParallelFinishパラレルワーカーが計算を完了するのを待機しています。
ProcArrayGroupUpdateグループリーダーが並列操作の最後にトランザクションIDをクリアするのを待機しています。
ProcSignalBarrierバックエンドすべてでバリアイベントが処理されるのを待機しています。
Promoteスタンバイの昇格を待機しています。
RecoveryConflictSnapshotバキュームクリーンアップに対するリカバリ競合の解決を待機しています。
RecoveryConflictTablespaceテーブル空間の削除に対するリカバリ競合の解決を待機しています。
RecoveryEndCommandrecovery_end_commandが完了するのを待機しています。
RecoveryPauseリカバリが再開するのを待機しています。
ReplicationOriginDropレプリケーションオリジンが削除できるよう非活動状態になるのを待機しています。
ReplicationSlotDropレプリケーションスロットが削除できるよう非活動状態になるのを待機しています。
RestoreCommandWaiting for restore_commandが完了するのを待機しています。
SafeSnapshotREAD ONLY DEFERRABLEのトランザクションに対する有効なスナップショットの獲得を待機しています。
SyncRep同期レプリケーション中に、リモートサーバからの確認を待機しています。
WalReceiverExitWALレシーバが終了するのを待機しています。
WalReceiverWaitStartストリーミングレプリケーションの初期データを送信するための起動プロセスを待機しています。
XactGroupUpdateグループリーダーが並列操作の最後にトランザクション状態を更新するのを待機しています。

表28.11 Lock型の待機イベント

Lock待機イベント説明
advisory勧告的ユーザロックを獲得するのを待機しています。
extendリレーションを拡張するのを待機しています。
frozenidpg_database.datfrozenxidpg_database.datminmxidを更新するのを待機しています。
object非リレーションデータベースオブジェクト上のロックを獲得するのを待機しています。
pageリレーションのページ上のロックを獲得するのを待機しています。
relationリレーション上のロックを獲得するのを待機しています。
spectoken投機的挿入ロックを獲得するのを待機しています。
transactionidトランザクションが終了するのを待機しています。
tupleタプル上のロックを獲得するのを待機しています。
userlockユーザロックを獲得するのを待機しています。
virtualxid仮想トランザクションIDロックを獲得するのを待機しています。

表28.12 LWLock型の待機イベント

LWLock待機イベント説明
AddinShmemInit共有メモリの拡張の領域確保を管理するのを待機しています。
AutoFilepostgresql.auto.confファイルを更新するのを待機しています。
Autovacuum自動バキュームワーカーの現在の状態の読み込み、または更新を待機しています。
AutovacuumSchedule自動バキューム対象として選定されたテーブルが、まだバキューム処理が必要であることを確認するのを待機しています。
BackgroundWorkerバックグラウンドワーカー状態の読み込み、または更新を待機しています。
BtreeVacuumB-treeインデックスのバキュームに関連した情報の読み込み、または更新を待機しています。
BufferContentメモリ内のデータページへアクセスするのを待機しています。
BufferMappingデータブロックをバッファプール内のバッファと関連付けるのを待機しています。
CheckpointerCommfsyncリクエストを管理するのを待機しています。
CommitTsトランザクションコミットタイムスタンプのために設定された最新の値の読み込み、または更新を待機しています。
CommitTsBufferコミットタイムスタンプSLRUバッファでのI/Oを待機しています。
CommitTsSLRUコミットタイムスタンプSLRUキャッシュにアクセスするのを待機しています。
ControlFilepg_controlファイルの読み込みもしくは更新、または新しいWALファイルの作成を待機しています。
DynamicSharedMemoryControl動的共有メモリの割り当て情報の読み込み、または更新を待機しています。
LockFastPathプロセスのファストパスロック情報の読み込み、または更新を待機しています。
LockManager重量ロックに関する情報の読み込み、または更新を待機しています。
LogicalRepWorker論理レプリケーションワーカーの状態の読み込み、または更新を待機しています。
MultiXactGen共有マルチトランザクション状態の読み込み、または更新を待機しています。
MultiXactMemberBufferマルチトランザクションメンバSLRUバッファでのI/Oを待機しています。
MultiXactMemberSLRUマルチトランザクションメンバSLRUキャッシュにアクセスするのを待機しています。
MultiXactOffsetBufferマルチトランザクションオフセットSLRUバッファでのI/Oを待機しています。
MultiXactOffsetSLRUマルチトランザクションオフセットSLRUキャッシュにアクセスするのを待機しています。
MultiXactTruncationマルチトランザクション情報の読み込み、または切り詰めを待機しています。
NotifyBufferNOTIFYメッセージSLRUバッファでのI/Oを待機しています。
NotifyQueueNOTIFYメッセージの読み込み、または更新を待機しています。
NotifyQueueTailNOTIFYメッセージストレージの制限が更新されるのを待機しています。
NotifySLRUNOTIFYメッセージSLRUキャッシュにアクセスするのを待機しています。
OidGen新しいOIDを割り当てるのを待機しています。
OldSnapshotTimeMap古いスナップショット制御情報の読み込み、または更新を待機しています。
ParallelAppendパラレルアペンド計画を実行中に次のサブプランの選択を待機しています。
ParallelHashJoinパラレルハッシュ結合計画を実行中に、ワーカーの同期を待機しています。
ParallelQueryDSAパラレルクエリの動的共有メモリ割り当てを待機しています。
PerSessionDSAパラレルクエリの動的共有メモリ割り当てを待機しています。
PerSessionRecordType複合型に関するパラレルクエリの情報にアクセスするのを待機しています。
PerSessionRecordTypmod匿名レコード型を特定する型修飾子に関するパラレルクエリの情報にアクセスするのを待機しています。
PerXactPredicateListパラレルクエリの間に、現在のシリアライザブルトランザクションによって保持された述語ロックの一覧へアクセスするのを待機しています。
PredicateLockManagerシリアライザブルトランザクションによって使われる述語ロックの情報にアクセスするのを待機しています。
ProcArray(典型的には、スナップショットを得たりセッションのトランザクションIDを報告するために)共有のプロセスごとのデータ構造にアクセスするのを待機しています。
RelationMapping(特定のシステムカタログのファイルノードの割り当てを追跡するのに使われる)pg_filenode.mapファイルの読み込み、または更新を待機しています。
RelCacheInitpg_internal.initリレーションキャッシュ初期化ファイルの読み込み、または更新を待機しています。
ReplicationOriginレプリケーションオリジンの作成、削除、または使用を待機しています。
ReplicationOriginStateあるレプリケーションオリジンの進捗の読み込み、または更新を待機しています。
ReplicationSlotAllocationレプリケーションスロットの割り当て、または解放を待機しています。
ReplicationSlotControlレプリケーションスロット状態の読み込み、または更新を待機しています。
ReplicationSlotIOレプリケーションスロットでのI/Oを待機しています。
SerialBufferシリアライザブルトランザクション競合SLRUバッファでのI/Oを待機しています
SerializableFinishedList完了したシリアライザブルトランザクションの一覧へアクセスするのを待機しています。
SerializablePredicateListシリアライザブルトランザクションによって保持された述語ロックの一覧へアクセスするのを待機しています。
PgStatsDSA統計動的共有メモリアロケータアクセスを待機しています。
PgStatsHash統計共有メモリハッシュテーブルアクセスを待機しています。
PgStatsData共有メモリの統計データアクセスを待機しています。
SerializableXactHashシリアライザブルトランザクションに関する情報の読み込み、または更新を待機しています。
SerialSLRUシリアライザブルトランザクション競合SLRUキャッシュにアクセスするのを待機しています。
SharedTidBitmapパラレルビットマップインデックススキャンの間に、共有TIDにアクセスするのを待機しています。
SharedTupleStoreパラレルクエリの間に共有タプルストアにアクセスするのを待機しています。
ShmemIndex共有メモリ内に領域を発見する、もしくは割り当てるのを待機しています。
SInvalRead共有カタログ無効化キューからメッセージを取り出すのを待機しています。
SInvalWrite共有カタログ無効化キューにメッセージを追加するのを待機しています。
SubtransBufferサブトランザクションSLRUバッファのI/Oを待機しています。
SubtransSLRUサブトランザクションSLRUキャッシュにアクセスするのを待機しています。
SyncRep同期レプリケーションの状態に関する情報を読み込む、または更新するの待機しています。
SyncScan同期テーブルスキャンの開始位置を選ぶのを待機しています。
TablespaceCreateテーブルスペースの作成、または削除を待機しています。
TwoPhaseStateプリペアドトランザクションの状態の読み込み、または更新を待機しています。
WALBufMappingWALバッファ内のページの置き換えを待機しています。
WALInsertWALデータをメモリバッファに挿入するのを待機しています。
WALWriteWALバッファがディスクに書き込まれるのを待機しています。
WrapLimitsVacuumトランザクションIDとマルチトランザクションの消費の制限が更新されるのを待機しています。
XactBufferトランザクション状態SLRUバッファでのI/Oを待機しています。
XactSLRUトランザクション状態SLRUキャッシュにアクセスするのを待機しています。
XactTruncationpg_xact_statusを実行する、またはその関数で利用可能な最古のトランザクションIDを更新するのを待機しています。
XidGen新しいトランザクションIDを割り当てるのを待機しています。

注記

拡張は表 28.12に示す一覧にLWLock型を追加できます。 拡張によって割り当てられた名前がすべてのサーバプロセスでは利用可能でない場合があります。そのためLWLock待機イベントは、拡張が割り当てた名前ではなく単にextensionと報告されるかもしれません。

表28.13 Timeout型の待機イベント

Timeout待機イベント説明
BaseBackupThrottleスロットル活動時にベースバックアップで待機しています。
CheckpointWriteDelayチェックポイント実行中の書き込みの間で待機しています。
PgSleeppg_sleepまたは同系列の関数を呼び出したため待機しています。
RecoveryApplyDelay遅延設定によりリカバリ時のWAL適用を待機しています。
RecoveryRetrieveRetryIntervalWALデータがまだあらゆる種類のソース(pg_wal、アーカイブまたはストリーム)から得られない時にリカバリで待機しています。
RegisterSyncRequest要求キューがいっぱいのため、同期要求をチェックポインターに送信する間、待機しています。
VacuumDelayコストに基づくバキューム遅延ポイントで待機しています。
VacuumTruncateバキュームされたテーブルの最後にある空のロックをオフで切り捨てるために、排他的ページの獲得を待機しています。

以下に、待機イベントが表示される例を示します。

SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event is NOT NULL;
 pid  | wait_event_type | wait_event
------+-----------------+------------
 2540 | Lock            | relation
 6644 | LWLock          | ProcArray
(2 rows)

28.2.4. pg_stat_replication

pg_stat_replicationビューには、WAL送信プロセス毎に1行を含み、送信処理に接続したスタンバイサーバへのレプリケーションに関する統計情報を表示します。 直接接続されたスタンバイサーバのみが一覧表示されます。 下流のスタンバイサーバに関する情報はありません。

表28.14 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送信処理に接続した時刻です。

backend_xmin xid

hot_standby_feedbackにより報告されたこのスタンバイのxminです。

state text

WAL送信サーバの現在の状態です。 取り得る値は以下の通りです。

  • startup: このWAL送信サーバは起動するところです。

  • catchup: このWAL送信サーバが接続しているスタンバイはプライマリに追いつこうとしています。

  • streaming: このWAL送信サーバは、接続先のスタンバイサーバがプライマリに追いついた後、変更をストリームしています。

  • backup: このWAL送信サーバはバックアップを送信しています。

  • stopping: このWAL送信サーバは停止するところです。

sent_lsn pg_lsn

この接続で送信された最後の先行書き込みログの位置です。

write_lsn pg_lsn

このスタンバイサーバによってディスクに書き出された最後の先行書き込みログの位置です。

flush_lsn pg_lsn

このスタンバイサーバによってディスクにフラッシュされた最後の先行書き込みログの位置です。

replay_lsn pg_lsn

このスタンバイサーバ上のデータベースに再生された最後の先行書き込みログの位置です。

write_lag interval

最近のWALをローカルにフラッシュしてから、このスタンバイサーバがそれを書き出した(が、まだフラッシュしたり適用したりしていない)ことの通知を受け取るまでの経過時間です。 このサーバが同期スタンバイとして設定されているとして、コミット時にsynchronous_commitレベルのremote_writeが起こした遅延を正確に測定するために、これを使用することができます。

flush_lag interval

最近のWALをローカルにフラッシュしてから、このスタンバイサーバがそれを書き出してフラッシュした(が、まだ適用していない)ことの通知を受け取るまでの経過時間です。 このサーバが同期スタンバイとして設定されているとして、コミット時にsynchronous_commitレベルのonが起こした遅延を正確に測定するために、これを使用することができます。

replay_lag interval

最近のWALをローカルにフラッシュしてから、このスタンバイサーバがそれを書き出し、フラッシュし、そして適用したことの通知を受け取るまでの経過時間です。 このサーバが同期スタンバイとして設定されているとして、コミット時にsynchronous_commitレベルのremote_applyが起こした遅延を正確に測定するために、これを使用することができます。

sync_priority integer

優先度に基づく同期レプリケーションで、このスタンバイサーバが同期スタンバイとして選択される優先度です。 クォーラムに基づく同期レプリケーションでは効果がありません。

sync_state text

このスタンバイサーバの同期状態です。 取り得る値は以下の通りです。

  • async: このスタンバイサーバは非同期です。

  • potential: このスタンバイサーバは現在非同期ですが、現在同期中のサーバの一つが故障すると同期になる可能性があります。

  • sync: このスタンバイサーバは同期です。

  • quorum: このサーバはクォーラムのスタンバイの候補とみなされています。

reply_time timestamp with time zone

スタンバイサーバから受け取った最後の応答メッセージの送信時刻です。


pg_stat_replicationビューで報告される経過時間は、最近のWALが書き込まれ、フラッシュされ、再生されるのに要した時間の測定結果であり、また、送信サーバがそれを知るためのものです。 リモートサーバが同期スタンバイとして設定されている場合、これらの時間は、同期コミットの各レベルによって引き起こされた(あるいは引き起こされたであろう)コミットの遅延を表します。 非同期スタンバイの場合は、replay_lag列は最近のトランザクションが問い合わせに対して可視になったときまでの遅延を近似します。 スタンバイサーバが送信サーバに完全に追いつき、WALの活動がなくなった状態のときは、最も直近に測定された経過時間が短い間、表示され続け、その後はNULLとなります。

経過時間は物理レプリケーションの場合は自動的に機能します。 ロジカルデコーディングのプラグインはオプションで追跡メッセージを発することができますが、そうしなければ追跡機能は単にNULLの経過時間を表示します。

注記

報告される経過時間は、現在の再生速度の前提でスタンバイが送信サーバに追いつくのに要する時間を予測するものではありません。 そのようなシステムでは、新しいWALが生成されている間は類似した時間を示しますが、送信サーバがアイドル状態になると異なるものになるでしょう。 特に、スタンバイが完全に追いついたとき、pg_stat_replicationは、一部のユーザが期待するゼロではなく、最も最近に報告されたWAL位置を書き込み、フラッシュし、再生するのに要した時間を示します。 これは最近の書き込みトランザクションについて同期コミットおよびトランザクションの可視性の遅延を測定するという目的と首尾一貫しています。 経過時間について異なるモデルを期待するユーザの混乱を抑えるため、完全に再生されてアイドルになったシステムでは、経過時間の列は短い時間の後、NULLに戻ります。 監視システムでは、これをデータなしとする、ゼロとする、あるいは最後の既知の値を表示し続けるという選択をすることになります。

28.2.5. pg_stat_replication_slots

pg_stat_replication_slotsビューには、論理レプリケーションスロットごとに1行が含まれ、その使用状況に関する統計情報が表示されます。

表28.15 pg_stat_replication_slotsビュー

列 型

説明

slot_name text

クラスタ全体で一意なレプリケーションスロットの識別子です。

spill_txns bigint

WALからの変更をデコードするために論理デコードによって使用されるメモリがlogical_decoding_work_memを超えたときにディスクにあふれたトランザクション数です。 カウンタは、トップレベルのトランザクションとサブトランザクションの両方で増分されます。

spill_count bigint

このスロットのWALから変更をデコードしている間に、トランザクションがディスクにあふれた回数です。 このカウンタは、トランザクションがあふれるたびに増分され、同じトランザクションが複数回あふれることもあります。

spill_bytes bigint

このスロットのWALからの変更をデコード実行している間に、ディスクにあふれたデコード済みトランザクションデータ量です。 このカウンタと他のあふれカウンタは、論理デコード中に発生したI/Oを測定しlogical_decoding_work_memを調整できます。

stream_txns bigint

このスロットのWALからの変更をデコードするために論理デコードが使用するメモリがlogical_decoding_work_memを超えた後にデコード出力プラグインにストリーミングされた進行中のトランザクション数です。 ストリーミングはトップレベルのトランザクションでのみ機能するため (サブトランザクションは独立してストリーミングできません)、サブトランザクションではカウンタは増分されません。

stream_countbigint

このスロットのWALからの変更をデコードしている間に、進行中のトランザクションがデコード出力プラグインにストリーミングされた回数です。 このカウンタは、トランザクションがストリーミングされるたびに増分され、同じトランザクションが複数回ストリーミングされる可能性があります。

stream_bytesbigint

このスロットのWALからの変更をデコードしている間に、進行中のトランザクションをデコード出力プラグインにストリーミングするためにデコードされたトランザクションデータ量です。 このカウンタと他のストリーミングカウンタは、logical_decoding_work_memを調整するために使用できます。

total_txns bigint

このスロットのデコード出力プラグインに送信されたデコードされたトランザクション数です。 これはトップレベルのトランザクションのみ数えられ、サブトランザクションは数えられません。 これには、ストリーミングされたトランザクションやあふれたトランザクションが含まれることに注意してください。

total_bytesbigint

このスロットのWALからの変更をデコードしながら、デコード出力プラグインにトランザクションを送信するためにデコードされたトランザクションデータ量です。 これには、ストリーミングされたデータやあふれたデータが含まれることに注意してください。

stats_reset timestamp with time zone

統計情報がリセットされた最終時刻です。


28.2.6. pg_stat_wal_receiver

pg_stat_wal_receiverビューは、1行のみの形式で、受信サーバが接続したサーバからWALレシーバに関する統計情報を表示します。

表28.16 pg_stat_wal_receiverビュー

列 型

説明

pid integer

WALレシーバプロセスのプロセスIDです。

status text

WALレシーバプロセスの活動状態です。

receive_start_lsn pg_lsn

WALレシーバが開始された時に使われる先行書き込みログの最初の位置です。

receive_start_tli integer

WALレシーバが開始された時に使われる初期タイムライン番号です。

written_lsn pg_lsn

すでに受信し、ディスクに書き出されたもののまだフラッシュされていない先行書き込みログの最新位置です。 これはデータの完全性の確認のためには使うべきではありません。

flushed_lsn pg_lsn

すでに受信し、ディスクにフラッシュされた先行書き込みログの最新位置です。 この列の初期値は、WALレシーバが開始された時に使用される、最初のログ位置です。

received_tli integer

受信済みでディスクにフラッシュされた先行書き込みログの最新位置のタイムライン番号です。 この列の初期値は、WALレシーバが開始された時に使用される、最初のログ位置のタイムライン番号です。

last_msg_send_time timestamp with time zone

オリジンWAL送信サーバから受け取った最後のメッセージの送信時刻です。

last_msg_receipt_time timestamp with time zone

オリジンWAL送信サーバから受け取った最後のメッセージの受信時刻です。

latest_end_lsn pg_lsn

オリジンWAL送信サーバに最後に報告された先行書き込みログ位置です。

latest_end_time timestamp with time zone

オリジンWAL送信サーバへ最新の先行書き込みログ位置が報告された時間です。

slot_name text

WALレシーバによって使用されたレプリケーションスロット名です。

sender_host text

WALレシーバーが接続しているPostgreSQLインスタンスのホストです。 これはホスト名、IPアドレス、あるいはUNIXソケットで接続している場合はディレクトリのパスです。 (パスは、常に/で始まる絶対パスなので、パスであることを識別できます。)

sender_port integer

WALレシーバーが接続しているPostgreSQLインスタンスのポート番号です。

conninfo text

セキュリティに重要な値が難読化された文字列を含む、WALレシーバによって使用された接続文字列です。


28.2.7. pg_stat_recovery_prefetch

pg_stat_recovery_prefetchビューは1行のみの形式です。 wal_distanceblock_distanceio_depthの列は現在の値を示し、他の列はpg_stat_reset_shared関数でリセット可能な累積カウンタを示します。

表28.17 pg_stat_recovery_prefetchビュー

列 型

説明

stats_reset timestamp with time zone

統計情報がリセットされた最終時刻です。

prefetch bigint

バッファプールになかったためにプリフェッチされたブロックの数です。

hit bigint

すでにバッファプールにあったためプリフェッチされなかったブロックの数です。

skip_init bigint

ゼロで初期化されるためプリフェッチされなかったブロックの数です。

skip_new bigint

まだ存在しなかったためにプリフェッチされなかったブロックの数です。

skip_fpw bigint

フルページイメージがWALに含まれていたためにプリフェッチされなかったブロックの数です。

skip_rep bigint

すでに最近プリフェッチされていたためにプリフェッチされなかったブロックの数です。

wal_distance int

プリフェッチャーが参照しているバイト数です。

block_distance int

プリフェッチャーが参照している前方のブロック数です。

io_depth int

開始されたがまだ完了していないプリフェッチの数です。


28.2.8. pg_stat_subscription

表28.18 pg_stat_subscriptionビュー

列 型

説明

subid oid

サブスクリプションのOIDです。

subname name

サブスクリプションの名前です。

pid integer

サブスクリプションのワーカープロセスのプロセスIDです。

relid oid

ワーカーが同期しているリレーションのOIDです。メインの適用ワーカーの場合はNULLです。

received_lsn pg_lsn

最後に受け取った先行書き込みログ位置です。このフィールドの初期値は0です。

last_msg_send_time timestamp with time zone

オリジンWAL送信サーバから受け取った最後のメッセージの送信時刻です。

last_msg_receipt_time timestamp with time zone

オリジンWAL送信サーバから受け取った最後のメッセージの受信時刻です。

latest_end_lsn pg_lsn

オリジンWAL送信サーバに最後に報告された先行書き込みログ位置です。

latest_end_time timestamp with time zone

オリジンWAL送信サーバに最後の先行書き込みログ位置が報告された時刻です。


28.2.9. pg_stat_subscription_stats

pg_stat_subscription_statsビューにはサブスクリプションごとに1行が含まれます。

表28.19 pg_stat_subscription_statsビュー

列 型

説明

subid oid

サブスクリプションのOIDです。

subname name

サブスクリプションの名前です。

apply_error_count bigint

変更の適用中にエラーが発生した回数です。

sync_error_count bigint

初期テーブル同期中にエラーが発生した回数です。

stats_reset timestamp with time zone

統計情報がリセットされた最終時刻です。


28.2.10. pg_stat_ssl

pg_stat_sslビューは、バックエンドプロセスおよびWAL送信プロセスごとに1行を保持し、接続上でのSSLの使用に関する統計情報を示します。 pg_stat_activityまたはpg_stat_replicationpid列で結合することで、接続に関するより詳細な情報を取得できます。

表28.20 pg_stat_sslビュー

列 型

説明

pid integer

バックエンドプロセスまたはWAL送信プロセスのプロセスIDです。

ssl boolean

この接続でSSLが使用されていれば真になります。

version text

使用されているSSLのバージョンです。この接続でSSLが使用されていなければNULLになります。

cipher text

使用されているSSL暗号の名前です。この接続でSSLが使用されていなければNULLになります。

bits integer

使用されている暗号アルゴリズムのビット数です。この接続でSSLが使用されていなければNULLになります。

client_dn text

使用されているクライアント証明書の識別名(DN)フィールドです。クライアント証明書が提供されなかった場合、およびこの接続でSSLが使用されていない場合はNULLになります。 このフィールドは、DNフィールドがNAMEDATALEN(標準ビルドでは64文字)より長いと切り詰められます。

client_serial numeric

クライアント証明書のシリアル番号です。この接続でクライアント証明書が提供されていないかSSLが使われていない場合にNULLになります。 証明書のシリアル番号と証明書発行者の組み合わせは(発行者が誤ってシリアル番号を再使用しない限り)証明書を一意に識別します。

issuer_dn text

クライアント証明書の発行者のDNです。この接続でクライアント証明書が提供されていないかSSLが使われていない場合にNULLになります。 このフィールドはclient_dnと同様に切り詰められます。


28.2.11. pg_stat_gssapi

pg_stat_gssapiビューはバックエンド毎に1行で構成され、接続でのGSSAPI使用に関する情報を表示します。 接続に関する更なる詳細を得るため、これをpg_stat_activitypg_stat_replicationpid列で結合できます。

表28.21 pg_stat_gssapiビュー

列 型

説明

pid integer

バックエンドのプロセスIDです。

gss_authenticated boolean

この接続にGSSAPI認証が使われていたなら真です。

principal text

この接続の認証に使われているプリンシパルです。接続の認証にGSSAPIが使われていない場合にはNULLです。 このフィールドはプリンシパルがNAMEDATALEN(標準ビルドでは64文字)よりも長い場合には切り詰められます。

encrypted boolean

この接続でGSSAPI暗号化が使われているなら真です。


28.2.12. pg_stat_archiver

pg_stat_archiverビューは常に、クラスタのアーカイバプロセスに関するデータを含む1つの行を持ちます。

表28.22 pg_stat_archiverビュー

列 型

説明

archived_count bigint

アーカイブに成功したWALファイルの数です。

last_archived_wal text

最後にアーカイブに成功したWALファイルの名前です。

last_archived_time timestamp with time zone

最後にアーカイブに成功した操作の時刻です。

failed_count bigint

WALファイルのアーカイブに失敗した回数です。

last_failed_wal text

最後にアーカイブ操作に失敗したWALファイルの名前です。

last_failed_time timestamp with time zone

最後にアーカイブ操作に失敗した時刻です。

stats_reset timestamp with time zone

統計情報がリセットされた最終時刻です。


通常、WALファイルは古いものから新しいものの順にアーカイブされますが、これは保証されておらず、スタンバイをプロモートしたときやクラッシュリカバリ後のような特別な状況では保持されません。 したがって、last_archived_walより古いすべてのファイルも正常にアーカイブされたと考えるのは安全ではありません。

28.2.13. pg_stat_bgwriter

pg_stat_bgwriterビューは常に、クラスタのグローバルデータに関する1つの行を持ちます。

表28.23 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

統計情報がリセットされた最終時刻です。


28.2.14. pg_stat_wal

pg_stat_walビューは常に、クラスタのWAL活動状況のデータに関する1つの行を持ちます。

表28.24 pg_stat_walビュー

列 型

説明

wal_records bigint

生成されたWALレコードの総数です。

wal_fpi bigint

生成されたWALフルページイメージの総数です。

wal_bytes numeric

生成されたWALのバイト単位の総量です。

wal_buffers_full bigint

WALバッファが満杯になったため、WALデータがディスクに書き込まれた回数です。

wal_write bigint

WALバッファがXLogWrite要求によりディスクに書き出された回数です。 内部WAL関数XLogWriteの詳細については、30.5を参照してください。

wal_sync bigint

WALファイルがissue_xlog_fsync要求によりディスクに同期された回数(fsynconかつwal_sync_methodfdatasyncまたはfsyncまたはfsync_writethroughのいずれかである場合、そうでなければゼロ)です。 内部WAL関数issue_xlog_fsyncの詳細については、30.5を参照してください。

wal_write_time double precision

XLogWriteの要求を介してWALバッファをディスクに書き込むのに費やされたミリ秒単位の合計時間(track_wal_io_timing が有効である場合、そうでなければゼロ)です。 これにはwal_sync_methodopen_datasyncまたはopen_syncの場合の同期時間が含まれます。

wal_sync_time double precision

issue_xlog_fsync要求を介してWALファイルのディスクへの同期に費やされたミリ秒単位の合計時間(track_wal_io_timingが有効、かつfsyncon、かつwal_sync_methodfdatasyncまたはfsyncまたはfsync_writethroughのいずれかの場合、それ以外の場合は0)です。

stats_reset timestamp with time zone

統計情報がリセットされた最終時刻です。


28.2.15. pg_stat_database

pg_stat_databaseビューには、クラスタ内のデータベース毎に1行と加えて共有オブジェクトのための1行が含まれ、データベース全体の統計情報を示します。

表28.25 pg_stat_databaseビュー

列 型

説明

datid oid

データベースのOIDです。共有リレーションに属するオブジェクトについては0になります。

datname name

データベース名です。共有オブジェクトについてはNULLになります。

numbackends integer

現在データベースに接続しているバックエンドの個数です。共有オブジェクトについてはNULLになります。 これは、このビューの中で、現在の状態を反映した値を返す唯一の列です。 他の列はすべて、最後にリセットされてから累積された値を返します。

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

データベース内で検知されたデッドロック数です。

checksum_failures bigint

データベース(あるいは共有オブジェクト)内で検出されたデータページチェックサムの検査失敗数です。データチェックサムが無効の場合にはNULLです。

checksum_last_failure timestamp with time zone

データベース(または共有オブジェクト)内で最後にデータページチェックサムの検査失敗が検知された時刻です。データチェックサムが無効の場合にはNULLです。

blk_read_time double precision

データベース内でバックエンドによりデータファイルブロックの読み取りに費やされた、ミリ秒単位の時間です(track_io_timingが有効な場合。そうでなければゼロです)。

blk_write_time double precision

データベース内でバックエンドによりデータファイルブロックの書き出しに費やされた、ミリ秒単位の時間です(track_io_timingが有効な場合。そうでなければゼロです)。

session_time double precision

このデータベースでデータベースセッションに費やされた、ミリ秒単位の時間です(統計はセッションの状態が変化したときのみ更新されるため、セッションが長い間アイドル状態の場合、このアイドル時間は含まれません)。

active_time double precision

このデータベースでSQL文実行に費やされた、ミリ秒単位の時間です(これはpg_stat_activityactivefastpath function call状態に対応します)。

idle_in_transaction_time double precision

このデータベースでトランザクション中にアイドル状態であった、ミリ秒単位の時間です(これはpg_stat_activityidle in transactionidle in transaction (aborted)状態に対応します)。

sessions bigint

このデータベースに対して確立されたセッションの総数です。

sessions_abandoned bigint

このデータベースに対するデータベースセッションのうち、クライアントとの接続が失われたために終了したセッションの数です。

sessions_fatal bigint

このデータベースに対するデータベースセッションのうち、致命的なエラーによって終了したセッションの数です。

sessions_killed bigint

このデータベースに対するデータベースセッションのうち、オペレータの介入によって終了したセッションの数です。

stats_reset timestamp with time zone

統計情報がリセットされた最終時刻です。


28.2.16. pg_stat_database_conflicts

pg_stat_database_conflictsビューは、データベースごとに1行を保持し、スタンバイサーバでのリカバリと競合するためにキャンセルされた問い合わせに関するデータベース全体の統計情報を示します。 プライマリサーバでは競合は発生しませんので、スタンバイサーバ上の情報のみが保持されます。

表28.26 pg_stat_database_conflictsビュー

列 型

説明

datid oid

データベースのOIDです。

datname name

データベースの名前です。

confl_tablespace bigint

データベースにおいて、削除されたテーブル空間のためにキャンセルされた問い合わせの個数です。

confl_lock bigint

データベースにおいて、ロック時間切れのためにキャンセルされた問い合わせの個数です。

confl_snapshot bigint

データベースにおいて、古いスナップショットのためにキャンセルされた問い合わせの個数です。

confl_bufferpin bigint

データベースにおいて、ピンが付いたバッファのためにキャンセルされた問い合わせの個数です。

confl_deadlock bigint

データベースにおいて、デッドロックのためにキャンセルされた問い合わせの個数です。


28.2.17. pg_stat_all_tables

pg_stat_all_tablesビューは現在のデータベース内のテーブル(TOASTテーブルを含む)ごと1行の形式で、特定のテーブルへのアクセスに関する統計情報を表示します。 pg_stat_user_tablesおよびpg_stat_sys_tablesビューにも同じ情報が含まれますが、それぞれユーザテーブルとシステムテーブルのみにフィルタされています。

表28.27 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

更新された行数です(HOT更新された行数を含みます)。

n_tup_del bigint

削除された行数です。

n_tup_hot_upd bigint

HOT更新(つまりインデックスの更新を別途必要としない)された行数です。

n_live_tup bigint

有効な行数の推定値です。

n_dead_tup bigint

無効な行数の推定値です。

n_mod_since_analyze bigint

このテーブルが最後に解析されてから変更された行数の推定値です。

n_ins_since_vacuum 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

テーブルが自動バキュームデーモンによって解析された回数です。


28.2.18. pg_stat_all_indexes

pg_stat_all_indexesビューは、現在のデータベース内のインデックスごとに1行の形式で、特定のインデックスへのアクセスに関する統計情報を表示します。 pg_stat_user_indexespg_stat_sys_indexesも同じ情報を保持しますが、ユーザ向けのインデックスとシステム向けのインデックスに対する行のみを保持するようにフィルタ処理されています。

表28.28 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

インデックスを使用する単純なインデックススキャンによって取り出された有効テーブル行数です。


単純なインデックススキャン、ビットマップインデックススキャン、あるいはオプティマイザによりインデックスが使用されることがあります。 ビットマップスキャンでは、複数のインデックスの出力を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_readidx_tup_fetch個数は、ビットマップスキャンがまったく使用されていない場合でも異なります。 idx_tup_readはインデックスから取り出したインデックス項目を計上し、idx_tup_fetchはテーブルから取り出した有効行を計上するからです。 インデックスを用いて無効行やまだコミットされていない行が取り出された場合やインデックスオンリースキャン法によりヒープの取り出しが回避された場合に、後者は減少します。

28.2.19. pg_statio_all_tables

pg_statio_all_tablesビューは現在のデータベース内のテーブル(TOASTテーブルを含む)ごとに1行の形式で、特定のテーブルのI/Oに関する統計情報を表示します。 pg_statio_user_tablespg_statio_sys_tablesには同じ情報が保持されますが、ユーザテーブルとシステムテーブルに関する行のみを持つようにフィルタ処理がなされています。

表28.29 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テーブルのインデックス(もしあれば)におけるバッファヒット数です。


28.2.20. pg_statio_all_indexes

pg_statio_all_indexesビューは、現在のデータベース内のインデックスごとに1行の形式で、特定のインデックスへのI/Oに関する統計情報を表示します。 pg_statio_user_indexespg_statio_sys_indexesも同じ情報を保持しますが、それぞれユーザ向けのインデックスとシステム向けのインデックスに対する行のみを保持するようにフィルタ処理されています。

表28.30 pg_statio_all_indexesビュー

列 型

説明

relid oid

このインデックスに対応するテーブルのOIDです。

indexrelid oid

インデックスのOIDです。

schemaname name

インデックスが存在するスキーマの名前です。

relname name

このインデックスに対応するテーブルの名前です。

indexrelname name

インデックスの名前です。

idx_blks_read bigint

インデックスから読み取られたディスクブロック数です。

idx_blks_hit bigint

インデックスにおけるバッファヒット数です。


28.2.21. pg_statio_all_sequences

pg_statio_all_sequencesビューは現在のデータベース内のシーケンスごとに1行の形式で、特定シーケンスにおけるI/Oに関する統計情報を表示します。

表28.31 pg_statio_all_sequencesビュー

列 型

説明

relid oid

シーケンスのOIDです。

schemaname name

シーケンスが存在するスキーマの名前です。

relname name

シーケンスの名前です。

blks_read bigint

シーケンスから読み取られたディスクブロック数です。

blks_hit bigint

シーケンスにおけるバッファヒット数です。


28.2.22. pg_stat_user_functions

pg_stat_user_functionsビューは追跡された関数ごとに1行の形式で、その関数の実行に関する統計情報を表示します。 track_functionsパラメータは関数が追跡されるかどうかを正確に制御します。

表28.32 pg_stat_user_functionsビュー

列 型

説明

funcid oid

関数のOIDです。

schemaname name

関数が存在するスキーマの名前です。

funcname name

関数の名前です。

calls bigint

関数が呼び出された回数です。

total_time double precision

関数とその関数から呼び出されるその他の関数で費やされた、ミリ秒単位の総時間です。

self_time double precision

その関数から呼び出されるその他の関数で費やされた時間を含まない、関数自身で費やされた、ミリ秒単位の総時間です。


28.2.23. pg_stat_slru

PostgreSQLSLRU(simple least-recently-used)キャッシュ経由で特定のディスク上の情報にアクセスします。 pg_stat_slruビューは、追跡されたSLRUキャッシュごとに1行の形式で、キャッシュされたページへのアクセスに関する統計情報を表示します。

表28.33 pg_stat_slruビュー

列 型

説明

name text

SLRUの名前です。

blks_zeroed bigint

初期化中にゼロにされたブロックの数です。

blks_hit bigint

SLRUに既にあることが分かっているためにディスクブロックの読み取りが不要だった回数です(これにはSLRUにおけるヒットのみが含まれ、オペレーティングシステムのファイルシステムキャッシュは含まれません)。

blks_read bigint

SLRUから読み取られたディスクブロック数です。

blks_written bigint

SLRUに書き込まれたディスクブロック数です。

blks_exists bigint

SLRUで存在を検査されたブロック数です。

flushes bigint

SLRUでのダーティデータのフラッシュ数です。

truncates bigint

SLRUでの切り詰めの数です。

stats_reset timestamp with time zone

統計情報がリセットされた最終時刻です。


28.2.24. 統計情報関数

統計情報を参照する他の方法は、上述の標準ビューによって使用される基礎的な統計情報アクセス関数と同じ関数を使用した問い合わせを作成することで設定することができます。 こうした関数の名前などに関する詳細については、標準ビューの定義を参照してください。 (例えばpsqlでは\d+ pg_stat_activityを発行してください。) データベースごとの統計情報についてのアクセス関数は、どのデータベースに対して報告するのかを識別するためにデータベースのOIDを取ります。 テーブルごと、インデックスごとの関数はテーブルの、もしくはインデックスのOIDを取ります。 関数ごとの統計情報の関数は、関数のOIDを取ります。 これらの関数を使用して参照できるテーブルとインデックス、および関数は現在のデータベース内のものだけであることに注意してください。

その他の累積統計システムに関連した関数を表 28.34に示します。

表28.34 その他の統計情報関数

関数

説明

pg_backend_pid () → integer

現在のセッションにアタッチされたサーバプロセスのプロセスIDを返します。

pg_stat_get_activity ( integer ) → setof record

指定されたプロセスIDに該当するバックエンドの情報のレコードを、NULLが指定された場合はシステム上のアクティブな各バックエンドに関するレコードを返します。 返される情報内容はpg_stat_activityの一部と同じです。

pg_stat_get_snapshot_timestamp () → timestamp with time zone

現在の統計スナップショットのタイムスタンプを返します。 統計スナップショットが取得されていない場合はNULLを返します。 stats_fetch_consistencysnapshotに設定されている場合は、トランザクションで累積統計に初めてアクセスしたときにスナップショットが取得されます。

pg_stat_get_xact_blocks_fetched ( oid ) → bigint

現在のトランザクションにおけるテーブルまたはインデックスについてのブロック読み取り要求の数を返します。 この数からpg_stat_get_xact_blocks_hitを引いた数がカーネルread()呼び出しの数になります。 実際の物理的な読み取り数は通常、カーネルレベルのバッファリングにより低くなります。

pg_stat_get_xact_blocks_hit ( oid ) → bigint

現在トランザクションのテーブルまたはインデックスについて、キャッシュで検出されたブロック読み取り要求の数を返します(カーネルread()呼び出しを引き起こしません)。

pg_stat_clear_snapshot () → void

現在の統計スナップショットまたはキャッシュされた情報を破棄します。

pg_stat_reset () → void

現在のデータベースに関する統計情報カウンタすべてをゼロにリセットします。

この関数はデフォルトでスーパーユーザに限定されていますが、関数を実行できるように他のユーザにEXECUTE権限を付与できます。

pg_stat_reset_shared ( text ) → void

引数に応じて、クラスタ全体の統計情報カウンタの一部をゼロにリセットします。 引数にbgwriterを指定すると、pg_stat_bgwriterビューで示されるカウンタがすべてリセットされ、archiverを指定するとpg_stat_archiverビューで示されるカウンタがすべてリセットされ、walを指定するとpg_stat_walビューで示されるカウンタがすべてリセットされ、recovery_prefetchを指定するとpg_stat_recovery_prefetch ビュー示されるカウンタがすべてリセットされます。

この関数はデフォルトでスーパーユーザに限定されていますが、関数を実行できるように他のユーザにEXECUTE権限を付与できます。

pg_stat_reset_single_table_counters ( oid ) → void

現在のデータベース内にある、ひとつのテーブルまたはインデックス、あるいはクラスタ内のすべてのデータベースで共有されている統計情報をゼロにリセットします。

この関数はデフォルトでスーパーユーザに限定されていますが、関数を実行できるように他のユーザにEXECUTE権限を付与できます。

pg_stat_reset_single_function_counters ( oid ) → void

現在のデータベース内にある、ひとつの関数の統計情報をゼロにリセットします。

この関数はデフォルトでスーパーユーザに限定されていますが、関数を実行できるように他のユーザにEXECUTE権限を付与できます。

pg_stat_reset_slru ( text ) → void

ひとつのSLRUキャッシュ、またはクラスタ内のすべてのSLRUの統計情報をゼロにリセットします。 引数がNULLであれば、pg_stat_slruビューで示されているすべてのSLRUキャッシュに対するカウンタがリセットされます。 引数は、そのエントリのみに対応するカウンタをリセットするようCommitTsMultiXactMemberMultiXactOffsetNotifySerialSubtransXactの1つを指定できます。 引数がother(実際のところは、認められていない名前であれば何でも)であれば、拡張が定義したキャッシュのような、それ以外のSLRUキャッシュに対するカウンタがリセットされます。

この関数はデフォルトでスーパーユーザに限定されていますが、関数を実行できるように他のユーザにEXECUTE権限を付与できます。

pg_stat_reset_replication_slot ( text ) → void

引数で定義されたレプリケーションスロットの統計情報をリセットします。 引数がNULLの場合、すべてのレプリケーションスロットの統計情報をリセットします。

この関数はデフォルトでスーパーユーザに限定されていますが、関数を実行できるように他のユーザにEXECUTE権限を付与できます。

pg_stat_reset_subscription_stats ( oid ) → void

pg_stat_subscription_statsビューに表示されている単一サブスクリプションの統計をゼロにリセットします。 引数がNULLの場合は、すべてのサブスクリプションの統計をリセットします。

この関数はデフォルトでスーパーユーザに限定されていますが、関数を実行できるように他のユーザにEXECUTE権限を付与できます。


警告

pg_stat_reset()を使用すると、自動バキュームがバキュームまたはANALYZEを実行するタイミングを決定するために使用するカウンタもリセットされます。 これらのカウンタをリセットすると、自動バキュームが必要な作業を実行できなくなり、テーブルの膨張や期限切れのテーブル統計情報などの問題が発生する可能性があります。 統計情報がリセットになった後にデータベース全体でANALYZEを実行することをお勧めします。

pg_stat_activityビューの基礎となるpg_stat_get_activity関数は、各バックエンドプロセスに関して利用可能な情報をすべて含むレコード集合を返します。 この情報の一部のみを入手することがより簡便である場合があるかもしれません。 このような場合、表 28.35に示す、古めのバックエンド単位の統計情報アクセス関数を使用することができます。 これらのアクセス関数は、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;

表28.35 バックエンド単位の統計情報関数

関数

説明

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_wait_event_type ( integer ) → text

バックエンドが現在待機中であれば、待機イベント型名を、さもなくばNULLを返します。 詳細については表 28.4を参照してください。

pg_stat_get_backend_wait_event ( integer ) → text

バックエンドが現在待機中であれば、待機イベント名を、さもなくばNULLを返します。 詳細は表 28.5から表 28.13までを参照してください。

pg_stat_get_backend_xact_start ( integer ) → timestamp with time zone

バックエンドの現在のトランザクションが開始された時刻を返します。