★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 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内で設定される、設定パラメータによって制御されます (設定パラメータの設定についての詳細は第19章を参照してください)。

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要求を減らすことができます。 サーバが正しくシャットダウンした際は、統計情報がサーバの再起動を跨がって保持されるように、統計情報データの永続的なコピーがpg_statサブディレクトリに格納されます。 サーバ起動時にリカバリが実施される場合(例えば、即時シャットダウンやサーバクラッシュ、ポイントインタイムリカバリ)、統計カウンタをすべてリセットします。

28.2.2. 統計情報の表示

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

この統計情報を使用して、収集されるデータを監視する場合、この情報は即座に更新されないことを認識することが重要です。 個別のサーバプロセスは、待機状態になる直前に、新しい統計情報に関する数をコレクタに送信します。 ですので、実行中の問い合わせやトランザクションは表示上の総和には影響を与えません。 また、コレクタ自体もおよそPGSTAT_STAT_INTERVAL(サーバ構築時に変更しない限り500 ms)ミリ秒に一度新しい報告を出力します。 ですので、表示上の情報は実際の活動から遅れて表示されます。 しかし、track_activitiesで収集される現在の問い合わせの情報は常に最新です。

この他の重要なポイントは、いつサーバプロセスが統計情報を表示するように尋ねられるかです。 サーバプロセスは、まずコレクタによって発行された最も最近の報告を取り出します。 そして、現在のトランザクションが終わるまで、全ての統計情報ビューと関数においてこのスナップショットを使用し続けます。 ですから、現在のトランザクションを続けている間、統計情報は一定の情報を示します。 同様に、全セッションの現在の問い合わせに関する情報も、そうした情報がトランザクションで最初に要求された時に収集され、そのトランザクションの間同じ情報が表示されます。 これはバグではなく、特徴です。 なぜなら、これにより、知らない間に値が変更することを考慮することなく、統計情報に対して複数の問い合わせを実行し、その結果を相関することができるからです。 しかし、各問い合わせで新しい結果を取り出したい場合は、確実にトランザクションブロックの外側でその問い合わせを行ってください。 他にもpg_stat_clear_snapshot()を呼び出すこともできます。 これは現在のトランザクションの統計情報スナップショットを(もしあれば)破棄します。 次に統計情報を使用する場合に新しいスナップショットを取り出すことになります。

トランザクションからは、pg_stat_xact_all_tablespg_stat_xact_sys_tablespg_stat_xact_user_tablespg_stat_xact_user_functions、およびこれらのビューの元となっている関数を通じて、自身の統計情報(まだコレクタに送られていない)も参照することができます。 これらの数値はトランザクション中に継続的に更新されていくため上記の様な(静的な情報を示す)振る舞いとはなりません。

表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_subscription 1つのサブスクリプションにつき少なくとも1行の形式で、サブスクリプションワーカに関する情報を表示します。 詳細についてはpg_stat_subscriptionを参照してください。
pg_stat_ssl 接続(通常およびレプリケーション)あたり1行の形式で、接続に使われるSSLの情報を表示します。 詳しくはpg_stat_sslを参照して下さい。
pg_stat_progress_vacuum VACUUMを実行している(自動バキュームワーカプロセスを含んだ)それぞれのバックエンドごとに1行の形で、現在の進捗を示します。 28.4.1を参照してください。

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

ビュー名説明
pg_stat_archiver WALアーカイバプロセスの活動状況に関する統計情報を1行のみで表示します 詳細についてはpg_stat_archiverを参照してください。
pg_stat_bgwriter バックグラウンドライタプロセスの活動状況に関する統計情報を1行のみで表示します。 詳細についてはpg_stat_bgwriterを参照してください。
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_statio_ビューは主に、バッファキャッシュの効率を評価する際に有用です。 実ディスク読み取りの数がバッファヒットの数よりもかなり少ないのであれば、そのキャッシュはカーネル呼び出しを行うことなく、ほとんどの読み取り要求を満足させています。 しかし、PostgreSQLバッファキャッシュに存在しないデータはカーネルのI/Oキャッシュにある可能性があり、そのため、物理的な読み取りを行うことなく取り出される可能性があるというPostgreSQLのディスクI/Oの取り扱いのため、これらの統計情報は、完全な論拠を提供しません。 PostgreSQLのI/O動作に関するより詳細な情報を入手したいのであれば、PostgreSQL統計情報コレクタとカーネルのI/Oの取り扱いの監視を行うオペレーティングシステムユーティリティを組み合わせることを勧めます。

表28.3 pg_stat_activityビュー

説明
datidoid バックエンドが接続するデータベースのOIDです。
datnamename バックエンドが接続するデータベースの名前です。
pidinteger バックエンドのプロセスIDです。
usesysidoid バックエンドにログインしたユーザの識別子です。
usenamenameバックエンドに接続したユーザの名前です。
application_nametext バックエンドに接続したアプリケーションの名前です。
client_addrinet バックエンドに接続したクライアントのIPアドレスです。 このフィールドがNULLである場合、これはクライアントがサーバマシン上のUnixソケット経由で接続されたか、自動バキュームなど内部処理であることを示します。
client_hostnametext client_addrの逆引き検索により報告された、接続クライアントのホスト名です。 IP接続、かつlog_hostnameが有効である場合にのみこのフィールドは非NULLになります。
client_portinteger クライアントがバックエンドとの通信に使用するTCPポート、もしUnixソケットを使用する場合は-1です。
backend_starttimestamp with time zone プロセスが開始した時刻です。 クライアントのバックエンドについては、クライアントがサーバに接続した時刻です。
xact_starttimestamp with time zone プロセスの現在のトランザクションが開始した時刻です。 活動中のトランザクションがない場合はNULLです。 現在の問い合わせがトランザクションの先頭である場合、この列はquery_start列と同じです。
query_starttimestamp with time zone 現在有効な問い合わせが開始した時刻です。 もしstateactiveでない場合は直前の問い合わせが開始した時刻です。
state_changetimestamp with time zonestateの最終変更時刻です。
wait_event_typetext バックエンドが待機しているイベントがあれば、その型、なければNULLとなります。 以下のいずれかの値を取ることができます。
  • LWLock: バックエンドは軽量ロックを待っています。 このようなそれぞれのロックは、共有メモリ内の特定のデータ構造を保護します。 wait_eventには軽量ロックの目的を特定する名前が入ります。 (特定の名前がついたロックもあれば、似たような目的のロックのグループの一部となっているものもあります。)

  • Lock: バックエンドは重量ロックを待っています。 ロックマネージャロックや単にロックとしても知られている重量ロックは、主にテーブルのようなSQLで可視なオブジェクトを保護します。 しかし、それらはリレーション拡張のような、なんらかの内部操作のために相互排他的に確保するためにも使用されます。 wait_eventは、待たせているロックの型を識別します。

  • BufferPin: サーバプロセスは、ほかのどのプロセスもデータバッファを調べることができない期間に、データバッファにアクセスするために待機しています。 バッファピン待機は、他のプロセスが該当のバッファから最後に読み込んだデータのオープンカーソルを保持している場合に長引かされることがあります。

  • Activity: サーバプロセスはアイドル状態です。 システムプロセスがメインの処理ループ内で活動を待機している時に使用されます。 wait_eventによりその待機点が特定できます。

  • Extension: サーバプロセスは拡張モジュール内で活動を待機しています。 この分類は、カスタム待機点を追跡するモジュールで役に立ちます。

  • Client: サーバプロセスはユーザアプリケーションによるソケット上での何らかの活動を待機しており、またサーバはその内部プロセスとは無関係の何かが起きることを期待しています。 wait_eventによりその待機点が特定できます。

  • IPC: サーバプロセスは、サーバ内の別のプロセスによる何らかの活動を待機しています。 wait_eventによりその待機点が特定できます。

  • Timeout: サーバプロセスはタイムアウトが満了するのを待機しています。 wait_eventによりその待機点が特定できます。

  • IO: サーバプロセスは入出力が完了するのを待機しています。 wait_eventによりその待機点が特定できます。

wait_eventtext バックエンドが現在待機している場合は待機イベント名、その他はNULL。 詳細は表 28.4を参照してください。
statetext 現在のバックエンドの総体的な状態です。 以下のいずれかの値を取ることができます。
  • active: バックエンドは問い合わせを実行中です。

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

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

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

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

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

backend_xidxid もしあれば、このバックエンドの最上位のトランザクション識別子。
backend_xminxid 現在のバックエンドのxmin
querytext バックエンドの最も最近の問い合わせテキストです。 stateactiveの場合、現在実行中の問い合わせを意味します。 その他のすべての状態では、実行済みの最後の問い合わせを示します。 デフォルトでは問い合わせのテキストは1024文字で切り捨てられますが、この値はパラメータtrack_activity_query_sizeにより変更できます。
backend_typetext 現在のバックエンドの種別です。 取り得る値はautovacuum launcherautovacuum workerlogical replication launcherlogical replication workerparallel worker, background writerclient backendcheckpointerstartupwalreceiverwalsenderwalwriterです。 これに加えて、拡張によって登録されたバックグラウンドワーカは追加の型を持つかも知れません。

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

注記

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

表28.4 wait_eventの説明

待機イベント型待機イベント名説明
LWLockShmemIndexLock共有メモリ内に領域を発見する、もしくは割り当てるのを待っています。
OidGenLockOIDを割り当て、または付与するのを待っています。
XidGenLockトランザクションIDを割り当て、または付与するのを待っています。
ProcArrayLockトランザクションの終了にてスナップショットを取得、またはトランザクションIDを消去するのを待っています。
SInvalReadLock共有無効化キュー内のメッセージを検索、もしくは削除するのを待っています。
SInvalWriteLock共有無効化キュー内のメッセージを追加するのを待っています。
WALBufMappingLockWALバッファ内のページの置き換えを待っています。
WALWriteLockWALバッファがディスクに書き込まれるのを待っています。
ControlFileLock制御ファイルの読み込みもしくは更新、または新しいWALファイルの作成を待っています。
CheckpointLockチェックポイントを処理することを待っています。
CLogControlLockトランザクションの状態を読み込み、または更新するのを待っています。
SubtransControlLockサブトランザクション情報の読み込み、または更新するのを待っています。
MultiXactGenLock共有マルチトランザクション状態の読み込み、または更新するのを待っています。
MultiXactOffsetControlLockマルチトランザクションオフセットマッピングの読み込み、または更新するのを待っています。
MultiXactMemberControlLockマルチトランザクションメンバーマッピングの読み込み、または更新するのを待っています。
RelCacheInitLockリレーションキャッシュ初期化ファイルの読み込み、または書き込みするのを待っています。
CheckpointerCommLockfsyncリクエストを管理するために待機しています。
TwoPhaseStateLockプリペアードトランザクションの状態を読み込み、または更新するのを待っています。
TablespaceCreateLockテーブルスペースの作成、または削除するのを待っています。
BtreeVacuumLockB-Treeインデックスのバキュームに関連した情報の読み込み、または更新するのを待っています。
AddinShmemInitLock共有メモリの領域確保を管理するために待機しています。
AutovacuumLock自動バキュームワーカの現在の状態を更新、または読み込むために待機している自動バキュームワーカまたはランチャ。
AutovacuumScheduleLock バキューム対象として選定されたテーブルが、まだバキューム処理が必要であることを確認するために待っています。
SyncScanLock同期スキャンのためにテーブル上のスキャン開始位置を取得するのを待っています。
RelationMappingLock ファイルノードマッピングへカタログを格納するために使用される、リレーションマップファイルを更新するのを待っています。
AsyncCtlLock共有通知状態の読み込み、または更新するのを待っています。
AsyncQueueLock通知メッセージの読み込み、または更新するのを待っています。
SerializableXactHashLockシリアライザブルトランザクションに関する情報を検索、または格納するのを待っています。
SerializableFinishedListLock完了したシリアライザブルトランザクションの一覧へアクセスするのを待っています。
SerializablePredicateLockListLockシリアライザブルトランザクションによって保持されたロックの一覧への操作を処理するのを待っています。
OldSerXidLock衝突しているシリアライザブルトランザクションの読み込み、または記録するのを待っています。
SyncRepLock同期レプリカに関する情報の読み込み、または更新のために待機しています。
BackgroundWorkerLockバックグラウンドワーカ状態の読み込み、または更新するのを待っています。
DynamicSharedMemoryControlLock動的共有メモリ状態の読み込み、または更新するのを待っています。
AutoFileLockpostgresql.auto.confファイルの更新するのを待っています。
ReplicationSlotAllocationLockレプリケーションスロットの割り当て、または解放するのを待っています。
ReplicationSlotControlLockレプリケーションスロット状態の読み込み、または更新するのを待っています。
CommitTsControlLockトランザクションコミットタイムスタンプの読み込み、または更新するのを待っています。
CommitTsLockトランザクションタイムスタンプのために設定された最新の値を読み込み、または更新するのを待っています。
ReplicationOriginLockレプリケーションオリジンのセットアップ、削除、または使用を待っています。
MultiXactTruncationLockマルチトランザクション情報の読み込み、またはトランケートを行うのを待っています。
OldSnapshotTimeMapLock古いスナップショット制御情報の読み込み、または更新するのを待っています。
BackendRandomLock乱数の生成を待機しています。
LogicalRepWorkerLock論理レプリケーションワーカの動作が完了するのを待機しています。
CLogTruncationLockWaiting to execute txid_status or update the oldest transaction id available to it.
clogclog(トランザクション状態)バッファのI/Oを待機しています。
commit_timestampコミットタイムスタンプバッファのI/Oを待機しています。
subtransサブトランザクションバッファのI/Oを待機しています。
multixact_offsetマルチトランザクションオフセットバッファのI/Oを待機しています。
multixact_memberマルチトランザクションメンバーバッファのI/Oを待機しています。
async非同期(通知)バッファのI/Oを待機しています。
oldserxidoldserxidバッファのI/Oを待機しています。
wal_insertメモリバッファにWALを挿入するのを待っています。
buffer_contentメモリ内のデータページを読み込み、または書き込むのを待っています。
buffer_ioデータページのI/Oを待機しています。
replication_originレプリケーション進捗の読み込み、または更新するのを待っています。
replication_slot_ioレプリケーションスロットのI/Oを待機しています。
procファストパスロック情報の読み込み、または更新するのを待っています。
buffer_mappingデータブロックをバッファプール内のバッファと関連付けるのを待っています。
lock_managerバックエンドのロックの追加、もしくは検査するのを待っています。 または、(並列問い合わせによって使用される)ロッキンググループへ加わる、または抜けるのを待っています。
predicate_lock_manager述語ロック情報の追加、もしくは検査するのを待っています。
parallel_query_dsaパラレルクエリの動的共有メモリ割り当てロックを待機しています。
tbmTBM共有イテレータロックを待機しています。
parallel_appendパラレルアペンド計画を実行中に次のサブプランの選択を待機しています。
parallel_hash_joinパラレルハッシュ計画を実行中に、メモリチャンクまたは更新カウンタの割り当てまたは交換を待機しています。
Lockrelationリレーション上のロックを獲得するのを待っています。
extendリレーションを拡張するのを待っています。
pageリレーションのページ上のロックを獲得するのを待っています。
tupleタプル上のロックを獲得するのを待っています。
transactionidトランザクションが終了するのを待っています。
virtualxid仮想xidロックを獲得するのを待っています。
speculative token投機的挿入ロックを獲得するのを待っています。
object非リレーションデータベースオブジェクト上のロックを獲得するのを待っています。
userlockユーザロックを獲得するのを待っています。
advisory助言ユーザロックを獲得するのを待っています。
BufferPinBufferPinバッファ上のピンを獲得するのを待っています。
ActivityArchiverMainアーカイバプロセスのメインループ内で待機しています。
AutoVacuumMain自動バキュームのランチャプロセスのメインループ内で待機しています。
BgWriterHibernateバックグラウンドライタプロセス内で待機し、休止状態になっています。
BgWriterMainバックグラウンドライタプロセスのバックグラウンドワーカのメインループ内で待機しています。
CheckpointerMainチェックポインタプロセスのメインループ内で待機しています。
LogicalApplyMainロジカルアプライプロセスのメインループ内で待機しています。
LogicalLauncherMainロジカルランチャプロセスのメインループ内で待機しています。
PgStatMain統計情報収集プロセスのメインループ内で待機しています。
RecoveryWalAllリカバリ時にあらゆる種類のソース(ローカル、アーカイブ、またはストリーム)からのWALを待機しています。
RecoveryWalStreamリカバリ時にストリームからのWALを待機しています。
SysLoggerMainsysloggerプロセスのメインループ内で待機しています。
WalReceiverMainWAL受信プロセスのメインループ内で待機しています。
WalSenderMainWAL送信プロセスのメインループ内で待機しています。
WalWriterMainWAL書き込みプロセスのメインループ内で待機しています。
ClientClientReadクライアントからのデータの読み込みを待機しています。
ClientWriteクライアントへのデータの書き込みを待機しています。
LibPQWalReceiverConnectWAL受信プロセス内でリモートサーバへの接続が確立するのを待機しています。
LibPQWalReceiverReceiveWAL受信プロセス内でリモートサーバからデータを受信するのを待機しています。
SSLOpenServer接続試行中にSSLを待機しています。
WalReceiverWaitStart起動プロセスがストリーミングレプリケーションの初期データを送信するのを待機しています。
WalSenderWaitForWALWALがWAL送信プロセス内でフラッシュされるのを待機しています。
WalSenderWriteDataWAL送信プロセス内でWAL受信者からの応答を処理している時に、何らかの活動を待機しています。
ExtensionExtension拡張内で待機しています。
IPCBgWorkerShutdownバックグラウンドワーカがシャットダウンするのを待機しています。
BgWorkerStartupバックグラウンドワーカが起動するのを待機しています。
BtreePageパラレルBツリースキャンに必要なページ番号が利用可能になるのを待機しています。
ClogGroupUpdateトランザクション終了時にグループリーダによるトランザクション状態の更新を待機しています。
ExecuteGatherGatherノードの実行時に子プロセスの活動を待機しています。
Hash/Batch/Allocating選ばれたパラレルハッシュ参加者がハッシュテーブルを獲得するのを待機しています。
Hash/Batch/Electingハッシュテーブルを獲得するパラレルハッシュ参加者を選んでいます。
Hash/Batch/Loading他のパラレルハッシュ参加者がハッシュテーブルのロードを完了させるのを待機しています。
Hash/Build/Allocating選ばれたパラレルハッシュ参加者が初期ハッシュテーブルを獲得するのを待機しています。
Hash/Build/Electing初期ハッシュテーブルを獲得するパラレルハッシュ参加者を選んでいます。
Hash/Build/HashingInner他のパラレルハッシュ参加者がインナーリレーションのハッシュを完了させるのを待機しています。
Hash/Build/HashingOuter他のパラレルハッシュ参加者がアウターリレーションのパーティショニングを完了させるのを待機しています。
Hash/GrowBatches/Allocating選ばれたパラレルハッシュ参加者が追加バッチを獲得するのを待機しています。
Hash/GrowBatches/Deciding将来のバッチの増加を決めるパラレルハッシュ参加者を選んでいます。
Hash/GrowBatches/Electing追加バッチを獲得するパラレルハッシュ参加者を選んでいます。
Hash/GrowBatches/Finishing選ばれたパラレルハッシュ参加者が将来のバッチの増加を決めるのを待機しています。
Hash/GrowBatches/Repartitioning他のパラレルハッシュ参加者がリパーティショニングを完了させるのを待機しています。
Hash/GrowBuckets/Allocating選ばれたパラレルハッシュ参加者による追加バケット獲得の完了を待機しています。
Hash/GrowBuckets/Electing追加バケットを獲得するパラレルハッシュ参加者を選んでいます。
Hash/GrowBuckets/Reinserting他のパラレルハッシュ参加者が新しいバケットに対するタプル挿入を完了させるのを待機しています。
LogicalSyncData論理レプリケーションのリモートサーバが最初のテーブル同期のためのデータを送信するのを待機しています。
LogicalSyncStateChange論理レプリケーションのリモートサーバが状態を変更するのを待機しています。
MessageQueueInternal他のプロセスが共有メッセージキューにアタッチされるのを待機しています。
MessageQueuePutMessage共有メッセージキューにプロトコルのメッセージを書くのを待機しています。
MessageQueueReceive共有メッセージキューからバイトを受信するのを待機しています。
MessageQueueSend共有メッセージキューにバイトを送信するのを待機しています。
ParallelBitmapScanパラレルビットマップスキャンが初期化されるのを待機しています。
ParallelCreateIndexScanパラレルCREATE INDEXワーカーがヒープスキャンを完了させるのを待機しています。
ParallelFinishパラレルワーカが計算を完了するのを待機しています。
ProcArrayGroupUpdateトランザクション終了時にグループリーダがトランザクションIDをクリアするのを待機しています。
ReplicationOriginDropレプリケーションオリジンが削除できるよう非活動状態になるのを待機しています。
ReplicationSlotDropレプリケーションスロットが削除できるよう非活動状態になるのを待機しています。
SafeSnapshotREAD ONLY DEFERRABLEのトランザクションのスナップショットを待機しています。
SyncRep同期レプリケーション中に、リモートサーバからの確認を待機しています。
TimeoutBaseBackupThrottleスロットル活動時にベースバックアップで待機しています。
PgSleeppg_sleepを呼び出したプロセス内で待機しています。
RecoveryApplyDelayリカバリ時のWAL適用が遅延させられたため待機しています。
IOBufFileReadバッファファイルからの読み取りを待機しています。
BufFileWriteバッファファイルへの書き込みを待機しています。
ControlFileRead制御ファイルからの読み取りを待機しています。
ControlFileSync制御ファイルが安定したストレージに到達するのを待機しています。
ControlFileSyncUpdate制御ファイルの更新が安定したストレージに到達するのを待機しています。
ControlFileWrite制御ファイルへの書き込みを待機しています。
ControlFileWriteUpdate制御ファイルの更新の書き込みを待機しています。
CopyFileReadファイルコピーの操作の間、読み込みを待機しています。
CopyFileWriteファイルコピーの操作の間、書き込みを待機しています。
DataFileExtendリレーションのデータファイルが拡張されるのを待機しています。
DataFileFlushリレーションのデータファイルが安定したストレージに到達するのを待機しています。
DataFileImmediateSyncリレーションのデータファイルが安定したストレージに即座に同期されるのを待機しています。
DataFilePrefetchリレーションのデータファイルからの非同期プリフェッチを待機しています。
DataFileReadリレーションのデータファイルからの読み込みを待機しています。
DataFileSyncリレーションのデータファイルへの変更が安定したストレージに到達するのを待機しています。
DataFileTruncateリレーションのデータファイルが切り詰められるのを待機しています。
DataFileWriteリレーションのデータファイルへの書き込みを待機しています。
DSMFillZeroWrite動的共有メモリの背後のファイルにゼロのバイトを書き込むのを待機しています。
LockFileAddToDataDirReadデータディレクトリのロックファイルに行を追加する間の読み込みを待機しています。
LockFileAddToDataDirSyncデータディレクトリのロックファイルに行を追加する間、データが安定したストレージに到達するのを待機しています。
LockFileAddToDataDirWriteデータディレクトリのロックファイルに行を追加する間、書き込みを待機しています。
LockFileCreateReadデータディレクトリのロックファイルを作成する間、読み込みを待機しています。
LockFileCreateSyncデータディレクトリのロックファイルを作成する間、データが安定したストレージに到達するのを待機しています。
LockFileCreateWriteデータディレクトリのロックファイルを作成する間、書き込みを待機しています。
LockFileReCheckDataDirReadデータディレクトリのロックファイルを再検査する間に読み込みを待機しています。
LogicalRewriteCheckpointSyncチェックポイントの間に、論理的な再書き込みのマッピングがストレージに到達するのを待機しています。
LogicalRewriteMappingSync論理的な再書き込みの間に、マッピングデータが安定したストレージに到達するのを待機しています。
LogicalRewriteMappingWrite論理的な再書き込みの間に、マッピングデータの書き込みを待機しています。
LogicalRewriteSync論理的な再書き込みのマッピングが安定したストレージに到達するのを待機しています。
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二相の状態ファイルの書き込みを待機しています。
WALBootstrapSyncブートストラップ時にWALが安定したストレージに到達するのを待機しています。
WALBootstrapWriteブートストラップ時にWALページの書き込みを待機しています。
WALCopyRead既存のWALセグメントをコピーして新しいWALセグメントを作成する時に読み込みを待機しています。
WALCopySync既存のWALセグメントをコピーして作成した新しいWALセグメントが安定したストレージに到達するのを待機しています。
WALCopyWrite既存のWALセグメントをコピーして新しいWALセグメントを作成する時に書き込みを待機しています。
WALInitSync新しく初期化されたWALファイルが安定したストレージに到達するのを待機しています。
WALInitWrite新しいWALファイルを初期化している時に書き込みを待機しています。
WALReadWALファイルからの読み込みを待機しています。
WALSenderTimelineHistoryReadWAL送信サーバのタイムラインコマンドで、タイムラインの履歴ファイルの読み込みを待機しています。
WALSyncMethodAssignWALの同期方法を割り当てている時にデータが安定したストレージに到達するのを待機しています。
WALWriteWALファイルへの書き込みを待機しています。

注記

拡張によって登録されたトランシェでは、名称が拡張によって指定され、それがwait_eventとして表示されます。 ユーザが(動的共有メモリ内に割り当てを持つことにより)バックエンドの一つの中で、そのトランシェを登録することは十分考えられますが、その場合は他のバックエンドはその情報を持たないので、このような場合にはextensionと表示します。

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

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          | ProcArrayLock
(2 rows)

表28.5 pg_stat_replicationビュー

説明
pidintegerWAL送信プロセスのプロセスIDです。
usesysidoidWAL送信プロセスにログインしたユーザのOIDです。
usenamenameWAL送信プロセスにログインしたユーザの名前です。
application_nametextWAL送信処理に接続したアプリケーションの名前です。
client_addrinet WAL送信処理に接続したクライアントのIPアドレスです。 このフィールドがNULLの場合、クライアントがサーバマシン上のUnixソケット経由で接続したことを示します。
client_hostnametext client_addrのDNS逆引き検索により報告された、接続クライアントのホスト名です。 IP接続、かつlog_hostnameが有効である場合にのみこのフィールドは非NULLになります。
client_portintegerクライアントがWAL送信処理との通信に使用するTCPポート番号、もしUnixソケットを使用する場合は-1です。
backend_starttimestamp with time zoneプロセスが開始、つまりクライアントがWAL送信処理に接続した時刻です。
backend_xminxidhot_standby_feedbackにより報告されたこのスタンバイのxminです。
statetext WAL送信サーバの現在の状態です。 取り得る値は以下の通りです。
  • startup: このWAL送信サーバは起動するところです。

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

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

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

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

sent_lsnpg_lsnこの接続で送信された最後の先行書き込みログの位置です。
write_lsnpg_lsnこのスタンバイサーバによってディスクに書き出された最後の先行書き込みログ位置です。
flush_lsnpg_lsnこのスタンバイサーバによってディスクに吐き出された最後の先行書き込みログ位置です。
replay_lsnpg_lsnこのスタンバイサーバ上のデータベースに再生された最後の先行書き込みログ位置です。
write_laginterval 最近のWALをローカルに吐き出してから、このスタンバイサーバがそれを書き出した(が、まだ吐き出したり適用したりしていない)ことの通知を受け取るまでの経過時間です。 このサーバが同期スタンバイとして設定されているとして、コミット時にsynchronous_commitレベルのremote_writeが起こした遅延を正確に測定するために、これを使用することができます。
flush_laginterval 最近のWALをローカルに吐き出してから、このスタンバイサーバがそれを書き出して吐き出した(が、まだ適用していない)ことの通知を受け取るまでの経過時間です。 このサーバが同期スタンバイとして設定されているとして、コミット時にsynchronous_commitレベルのonが起こした遅延を正確に測定するために、これを使用することができます。
replay_laginterval 最近のWALをローカルに吐き出してから、このスタンバイサーバがそれを書き出し、吐き出し、そして適用したことの通知を受け取るまでの経過時間です。 このサーバが同期スタンバイとして設定されているとして、コミット時にsynchronous_commitレベルのremote_applyが起こした遅延を正確に測定するために、これを使用することができます。
sync_priorityinteger 優先度に基づくの同期レプリケーションで、このスタンバイサーバが同期スタンバイとして選択される優先度です。 クォーラムに基づくの同期レプリケーションでは効果がありません。
sync_statetext このスタンバイサーバの同期状態です。 取り得る値は以下の通りです。
  • async: このスタンバイサーバは非同期です。

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

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

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


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

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

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

注記

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

表28.6 pg_stat_wal_receiverビュー

説明
pidintegerWALレシーバプロセスのプロセスID
statustextWALレシーバプロセスの活動状態
receive_start_lsnpg_lsnWALレシーバが開始された時に使われる先行書き込みログの最初の位置
receive_start_tliintegerWALレシーバが開始された時に使われる初期タイムライン番号
received_lsnpg_lsnすでに受信し、ディスクにフラッシュされた先行書き込みログの最新位置。 この列の初期値は、WALレシーバが開始された時に使用される、最初のログ位置です。
received_tliinteger 受信済みでディスクにフラッシュされた先行書き込みログの最新位置のタイムライン番号。 この列の初期値は、WALレシーバが開始された時に使用される、最初のログ位置のタイムライン番号です。
last_msg_send_timetimestamp with time zoneオリジンWALセンダから受信した最新メッセージの送信時間
last_msg_receipt_timetimestamp with time zoneオリジンWALセンダから受信した最新メッセージの受信時間
latest_end_lsnpg_lsnオリジンWALセンダへ報告された最新の先行書き込みログ位置
latest_end_timetimestamp with time zoneオリジンWALセンダへ最新の先行書き込みログ位置が報告された時間
slot_nametextWALレシーバによって使用されたレプリケーションスロット名
sender_hosttext WALレシーバーが接続しているPostgreSQLインスタンスのホスト。 これはホスト名、IPアドレス、あるいはUNIXソケットで接続している場合はディレクトリのパスです。 (パスは、常に/で始まる絶対パスなので、パスであることを識別できます。)
sender_portinteger WALレシーバーが接続しているPostgreSQLインスタンスのポート番号
conninfotext セキュリティに重要な値が難読化された文字列を含む、WALレシーバによって使用された接続文字列。

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

表28.7 pg_stat_subscription View

説明
subidoidサブスクリプションのOID
subnametextサブスクリプションの名前
pidintegerサブスクリプションのワーカプロセスのプロセスID
relidOidワーカが同期しているリレーションのOID、メインの適用ワーカの場合はNULL
received_lsnpg_lsn最後に受け取った先行書き込みログ位置、このフィールドの初期値は0
last_msg_send_timetimestamp with time zoneオリジンWAL送信サーバから受け取った最後のメッセージの送信時刻
last_msg_receipt_timetimestamp with time zoneオリジンWAL送信サーバから受け取った最後のメッセージの受信時刻
latest_end_lsnpg_lsnオリジンWAL送信サーバに最後に報告された先行書き込みログ位置
latest_end_timetimestamp with time zoneオリジンWAL送信サーバかに最後の先行書き込みログ位置が報告された時刻

pg_stat_subscriptionには、各サブスクリプションのメインワーカに対して1行が含まれ(ワーカが実行中でないときはPIDがNULLになります)、さらにサブスクライブされたテーブルの初期データコピーを処理するワーカについて別の行があります。

表28.8 pg_stat_sslビュー

説明
pidintegerバックエンドプロセスまたはWAL送信プロセスのプロセスIDです。
sslbooleanこの接続でSSLが使用されていれば真になります。
versiontext使用されているSSLのバージョン、この接続でSSLが使用されていなければNULLになります。
ciphertext使用されているSSL暗号の名前、この接続でSSLが使用されていなければNULLになります。
bitsinteger使用されている暗号アルゴリズムのビット数、この接続でSSLが使用されていなければNULLになります。
compressionbooleanSSL圧縮が使用されていれば真、使用されていなければ偽、この接続でSSLが使用されていなければNULLになります。
clientdntext 使用されているクライアント証明書の識別名(DN)フィールド、クライアント証明書が提供されなかった場合、およびこの接続でSSLが使用されていない場合はNULLになります。 このフィールドは、DNフィールドがNAMEDATALEN(標準ビルドでは64文字)より長いと切り詰められます。

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

表28.9 pg_stat_archiverビュー

説明
archived_countbigintアーカイブに成功したWALファイルの数
last_archived_waltextアーカイブに成功した最後のWALファイルの名前
last_archived_timetimestamp with time zone最後に成功したアーカイブ操作の時刻
failed_countbigintWALファイルのアーカイブに失敗した回数
last_failed_waltext最後にアーカイブ操作に失敗したWALファイルの名前
last_failed_timetimestamp with time zone最後にアーカイブ操作に失敗した時刻
stats_resettimestamp with time zoneこの統計が最後にリセットされた時刻

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

表28.10 pg_stat_bgwriterビュー

説明
checkpoints_timedbigint これまでに実行された、スケジュールされたチェックポイントの個数です。
checkpoints_reqbigint これまでに実行された、要求されたチェックポイントの個数です。
checkpoint_write_timedouble precision チェックポイント処理におけるディスクにファイルを書き出す部分に費やされた、ミリ秒単位の総時間です。
checkpoint_sync_timedouble precision チェックポイント処理におけるディスクにファイルを同期する部分に費やされた、ミリ秒単位の総時間です。
buffers_checkpointbigint チェックポイント期間に書き出されたバッファ数です。
buffers_cleanbigint バックグラウンドライタにより書き出されたバッファ数です。
maxwritten_cleanbigint バックグラウンドライタが書き出したバッファ数が多過ぎたために、整理用スキャンを停止した回数です。
buffers_backendbigint バックエンドにより直接書き出されたバッファ数です。
buffers_backend_fsyncbigint バックエンドが独自にfsync呼び出しを実行しなければならなかった回数です。 (通常は、バックエンドが独自に書き込んだ場合であっても、バックグラウンドライタがこれらを扱います。)
buffers_allocbigint 割当られたバッファ数です。
stats_resettimestamp with time zone これらの統計情報がリセットされた最終時刻です。

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

表28.11 pg_stat_databaseビュー

説明
datidoidデータベースのOIDです。
datnamenameデータベースの名前です。
numbackendsinteger 現在データベースに接続しているバックエンドの個数です。 これは、このビューの中で、現在の状態を反映した値を返す唯一の列です。 他の列はすべて、最後にリセットされてから累積された値を返します。
xact_commitbigint このデータベースの中でコミットされたトランザクション数です。
xact_rollbackbigint このデータベースの中でロールバックされたトランザクション数です。
blks_readbigint データベース内で読み取られたディスクブロック数です。
blks_hitbigint バッファキャッシュに既にあることが分かっているために読み取りが不要だったディスクブロック数です(これにはPostgreSQLのバッファキャッシュにおけるヒットのみが含まれ、オペレーティングシステムのファイルシステムキャッシュは含まれません)。
tup_returnedbigint データベース内の問い合わせで返された行数です。
tup_fetchedbigint データベース内の問い合わせで取り出された行数です。
tup_insertedbigint データベース内の問い合わせで挿入された行数です。
tup_updatedbigint データベース内の問い合わせで更新された行数です。
tup_deletedbigint データベース内の問い合わせで削除された行数です。
conflictsbigint データベース内のリカバリで競合したためキャンセルされた問い合わせ数です。 (競合はスタンバイサーバ上でのみ起こります。詳細についてはpg_stat_database_conflictsを参照してください。)
temp_filesbigint データベース内の問い合わせによって書き出された一時ファイルの個数です。 一時ファイルが作成された理由(ソート処理やハッシュ処理)やlog_temp_filesの設定に関わらず、すべての一時ファイルが計上されます。
temp_bytesbigint データベース内の問い合わせによって一時ファイルに書き出されたデータ量です。 一時ファイルが作成された理由やlog_temp_filesの設定に関わらず、すべての一時ファイルが計上されます。
deadlocksbigint データベース内で検知されたデッドロック数です。
blk_read_timedouble precision データベース内でバックエンドによりデータファイルブロックの読み取りに費やされた、ミリ秒単位の時間です。
blk_write_timedouble precision データベース内でバックエンドによりデータファイルブロックの書き出しに費やされた、ミリ秒単位の時間です。
stats_resettimestamp with time zone 統計情報がリセットされた最終時刻です。

pg_stat_databaseには、クラスタ内のデータベース毎にデータベース全体の統計情報を示す1行が含まれます。

表28.12 pg_stat_database_conflictsビュー

説明
datidoidデータベースのOIDです。
datnamenameデータベースの名前です。
confl_tablespacebigintデータベースにおいて、削除されたテーブル空間のためにキャンセルされた問い合わせの個数です。
confl_lockbigintデータベースにおいて、ロック時間切れのためにキャンセルされた問い合わせの個数です。
confl_snapshotbigintデータベースにおいて、古いスナップショットのためにキャンセルされた問い合わせの個数です。
confl_bufferpinbigintデータベースにおいて、ピンが付いたバッファのためにキャンセルされた問い合わせの個数です。
confl_deadlockbigintデータベースにおいて、デッドロックのためにキャンセルされた問い合わせの個数です。

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

表28.13 pg_stat_all_tablesビュー

説明
relidoidテーブルのOIDです。
schemanamenameテーブルが存在するスキーマの名前です。
relnamenameテーブルの名前です。
seq_scanbigint テーブル上で初期化されたシーケンシャルスキャンの個数です。
seq_tup_readbigint シーケンシャルスキャンによって取り出された有効行の個数です。
idx_scanbigint テーブル上で開始されたインデックススキャンの実行回数です。
idx_tup_fetchbigintインデックススキャンによって取り出された有効行の個数です。
n_tup_insbigint挿入された行数です。
n_tup_updbigint更新された行数です。(HOT更新された行数を含みます)
n_tup_delbigint削除された行数です。
n_tup_hot_updbigintHOT更新(つまりインデックスの更新を別途必要としない)された行数です。
n_live_tupbigint有効行の推定値です。
n_dead_tupbigint不要行の推定値です。
n_mod_since_analyzebigintこのテーブルが最後に解析されてから変更された行の推定値
last_vacuumtimestamp with time zone テーブルが手作業でバキュームされた最終時刻です(VACUUM FULLは含まれません)。
last_autovacuumtimestamp with time zone 自動バキュームデーモンによりテーブルがバキュームされた最終時刻です。
last_analyzetimestamp with time zone テーブルが手作業で解析された最終時刻です。
last_autoanalyzetimestamp with time zone 自動バキュームデーモンによりテーブルが解析された最終時刻です。
vacuum_countbigintテーブルが手作業でバキュームされた回数です。(VACUUM FULLは含まれません)。
autovacuum_countbigintテーブルが自動バキュームデーモンによりバキュームされた回数です。
analyze_countbigintテーブルが手作業で解析された回数です。
autoanalyze_countbigintテーブルが自動バキュームデーモンによって解析された回数です。

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

表28.14 pg_stat_all_indexesビュー

説明
relidoidインデックス対象のテーブルのOIDです。
indexrelidoidインデックスのOIDです。
schemanamenameインデックスが存在するスキーマの名前です。
relnamenameインデックス対象のテーブルの名前です。
indexrelnamenameインデックスの名前です。
idx_scanbigint インデックスに対して開始されたインデックススキャンの実行回数です。
idx_tup_readbigint インデックスに対するスキャンにより返されたインデックス項目の個数です。
idx_tup_fetchbigint インデックスを使用する単純なインデックススキャンによって取り出された有効テーブル行数です。

pg_stat_all_indexesビューは、現在のデータベース内のインデックス毎に、特定のインデックスへのアクセスに関する統計情報を示す1行を保持します。 pg_stat_user_indexespg_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_readidx_tup_fetch個数は、ビットマップスキャンがまったく使用されていない場合でも異なります。 idx_tup_readはインデックスから取り出したインデックス項目を計上し、idx_tup_fetchはテーブルから取り出した有効行を計上するからです。 インデックスを用いて不要行やまだコミットされていない行が取り出された場合やインデックスオンリースキャン法によりヒープの取り出しが回避された場合に、後者は減少します。

表28.15 pg_statio_all_tablesビュー

説明
relidoidテーブルのOIDです。
schemanamenameテーブルが存在するスキーマの名前です。
relnamenameテーブルの名前です。
heap_blks_readbigintテーブルから読み取られたディスクブロック数です。
heap_blks_hitbigintテーブル内のバッファヒット数です。
idx_blks_readbigintテーブル上のすべてのインデックスから読み取られたディスクブロック数です。
idx_blks_hitbigintテーブル上のすべてのインデックス内のバッファヒット数です。
toast_blks_readbigintテーブルのTOASTテーブル(もしあれば)から読み取られたディスクブロック数です。
toast_blks_hitbigintテーブルのTOASTテーブル(もしあれば)におけるバッファヒット数です。
tidx_blks_readbigintテーブルのTOASTテーブルのインデックス(もしあれば)から読み取られたディスクブロック数です。
tidx_blks_hitbigintテーブルのTOASTテーブルのインデックス(もしあれば)におけるバッファヒット数です。

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

表28.16 pg_statio_all_indexesビュー

説明
relidoidこのインデックスに対応するテーブルのOIDです。
indexrelidoidインデックスのOIDです。
schemanamenameインデックスが存在するスキーマの名前です。
relnamenameこのインデックスに対応するテーブルの名前です。
indexrelnamenameインデックスの名前です。
idx_blks_readbigintインデックスから読み取られたディスクブロック数です。
idx_blks_hitbigintインデックスにおけるバッファヒット数です。

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

表28.17 pg_statio_all_sequencesビュー

説明
relidoidシーケンスのOIDです。
schemanamenameシーケンスが存在するスキーマの名前です。
relnamenameシーケンスの名前です。
blks_readbigintシーケンスから読み取られたディスクブロック数です。
blks_hitbigintシーケンスにおけるバッファヒット数です。

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

表28.18 pg_stat_user_functionsビュー

説明
funcidoid関数のOIDです。
schemanamename関数が存在するスキーマの名前です。
funcnamename関数の名前です。
callsbigint関数が呼び出された回数です。
total_timedouble precision 関数とその関数から呼び出されるその他の関数で費やされた、ミリ秒単位の総時間です。
self_timedouble precision その関数から呼び出されるその他の関数で費やされた時間を含まない、関数自身で費やされた、ミリ秒単位の総時間です。

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

28.2.3. 統計情報関数

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

その他の統計情報収集に関連した関数を表 28.19に示します。

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

関数戻り値の型説明
pg_backend_pid()integer 現在のセッションを扱うサーバプロセスのプロセスID。
pg_stat_get_activity(integer)setof record PIDが指定された場合、それに該当するバックエンドの情報のレコード、NULLが指定された場合はシステム上のアクティブな各バックエンドに関するレコードが返されます。 返される情報内容はpg_stat_activityの一部と同じです。
pg_stat_get_snapshot_timestamp()timestamp with time zone 現在の統計情報のスナップショットの時刻を返します。
pg_stat_clear_snapshot()void 現在の統計情報スナップショットを破棄します。
pg_stat_reset()void 現在のデータベースに関する統計カウンタすべてをゼロにリセットします(デフォルトでスーパーユーザ権限が必要ですが、この関数のEXCUTE権限は他のユーザに付与することができます)。
pg_stat_reset_shared(text)void 引数に応じて、クラスタ全体の統計情報カウンタの一部をゼロに戻します(デフォルトでスーパーユーザ権限が必要ですが、この関数のEXCUTE権限は他のユーザに付与することができます)。 pg_stat_reset_shared('bgwriter')を呼び出すと、pg_stat_bgwriterビューで示される値すべてがゼロになります。 pg_stat_reset_shared('archiver')を呼び出すと、pg_stat_archiverビューで示される値すべてがゼロになります。
pg_stat_reset_single_table_counters(oid)void 現在のデータベース内にある、ひとつのテーブルあるいはインデックスの統計情報をゼロにリセットします(デフォルトでスーパーユーザ権限が必要ですが、この関数のEXCUTE権限は他のユーザに付与することができます)。
pg_stat_reset_single_function_counters(oid)void 現在のデータベース内にある、ひとつの関数の統計情報をゼロにリセットします(デフォルトでスーパーユーザ権限が必要ですが、この関数のEXCUTE権限は他のユーザに付与することができます)。

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

関数戻り値の型説明
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.4を参照してください。
pg_stat_get_backend_xact_start(integer)timestamp with time zone現在のトランザクションが開始された時刻です。