他のバージョンの文書 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_replicationWAL送信プロセス毎に1行の形式で、送信サーバが接続したスタンバイサーバへのレプリケーションに関する統計情報を表示します。 詳細についてはpg_stat_replicationを参照して下さい。
pg_stat_wal_receiver1行の形式で、受信サーバが接続したサーバからWALレシーバに関する統計情報を表示します。 詳細についてはpg_stat_wal_receiverを参照してください。
pg_stat_ssl接続(通常およびレプリケーション)あたり1行の形式で、接続に使われるSSLの情報を表示します。 詳しくはpg_stat_sslを参照して下さい。
pg_stat_progress_vacuumVACUUMを実行している(自動バキュームワーカプロセスを含んだ)それぞれのバックエンドごとに1行の形で、現在の進捗を示します。 28.4.1. VACUUM進捗状況のレポートを参照してください。

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

ビュー名説明
pg_stat_archiverWALアーカイバプロセスの活動状況に関する統計情報を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_tablespg_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_functionspg_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_hostnametextclient_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となります。 以下のいずれかの値を取ることができます。
  • LWLockNamed: バックエンドは、特定の名前が付けられた軽量ロックを待っています。 このようなそれぞれのロックは、共有メモリ内の特定のデータ構造を保護します。 wait_eventは軽量ロックの名称を含みます。

  • LWLockTranche: バックエンドは、関連する軽量ロックのグループの1つを待っています。 グループ内の全てのロックは、同様の関数を実行します。 wait_eventは、そのグループ内のロックの共通な用途を識別します。

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

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

wait_eventtextバックエンドが現在待機している場合は待機イベント名、その他はNULL。 詳細は表28.4「wait_eventの説明」を参照してください。
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の場合、現在実行中の問い合わせを意味します。 その他のすべての状態では、実行済みの最後の問い合わせを示します。

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

注記

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

表28.4 wait_eventの説明

待機イベント型待機イベント名説明
LWLockNamedShmemIndexLock共有メモリ内に領域を発見する、もしくは割り当てるのを待っています。
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古いスナップショット制御情報の読み込み、または更新するのを待っています。
LWLockTrancheclogclog(トランザクション状態)バッファの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述語ロック情報の追加、もしくは検査するのを待っています。
Lockrelationリレーション上のロックを獲得するのを待っています。
extendリレーションを拡張するのを待っています。
pageリレーションのページ上のロックを獲得するのを待っています。
tupleタプル上のロックを獲得するのを待っています。
transactionidトランザクションが終了するのを待っています。
virtualxid仮想xidロックを獲得するのを待っています。
speculative token推論的挿入ロックを獲得するのを待っています。
object非リレーションデータベースオブジェクト上のロックを獲得するのを待っています。
userlockユーザロックを獲得するのを待っています。
advisory助言ユーザロックを獲得するのを待っています。
BufferPinBufferPinバッファ上のピンを獲得するのを待っています。

注記

拡張によって登録されたトランシェのために、名称が拡張によって指定され、それが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 | LWLockNamed     | ProcArrayLock
(2 rows)

表28.5 pg_stat_replicationビュー

説明
pidintegerWAL送信プロセスのプロセスIDです。
usesysidoidWAL送信プロセスにログインしたユーザのOIDです。
usenamenameWAL送信プロセスにログインしたユーザの名前です。
application_nametextWAL送信処理に接続したアプリケーションの名前です。
client_addrinetWAL送信処理に接続したクライアントのIPアドレスです。 このフィールドがNULLの場合、クライアントがサーバマシン上のUnixソケット経由で接続したことを示します。
client_hostnametextclient_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送信処理の状態です。
sent_locationpg_lsn現在のWAL送信処理の状態です。
write_locationpg_lsnスタンバイサーバによってディスクに書き出された最後のトランザクションログ位置です。
flush_locationpg_lsnスタンバイサーバによってディスクに吐き出された最後のトランザクションログ位置です。
replay_locationpg_lsnスタンバイサーバ上のデータベースに再生された最後のトランザクションログ位置です。
sync_priorityintegerこのスタンバイサーバが同期スタンバイとして選択される優先度です。
sync_statetextスタンバイサーバの同期状態です。

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

表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レシーバによって使用されたレプリケーションスロット名
conninfotextセキュリティに重要な値が難読化された文字列を含む、WALレシーバによって使用された接続文字列。

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

表28.7 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.8 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.9 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.10 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.11 pg_stat_database_conflictsビュー

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

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

表28.12 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.13 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.14 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.15 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.16 pg_statio_all_sequencesビュー

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

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

表28.17 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.18「その他の統計情報関数」に示します。

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

関数戻り値の型説明
pg_backend_pid()integer現在のセッションを扱うサーバプロセスのプロセスID。
pg_stat_get_activity(integer)setof recordPIDが指定された場合、それに該当するバックエンドの情報のレコード、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.19「バックエンド単位の統計情報関数」に示す、古めのバックエンド単位の統計情報アクセス関数を使用することができます。 これらのアクセス関数は、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.19 バックエンド単位の統計情報関数

関数戻り値の型説明
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「wait_eventの説明」を参照してください。
pg_stat_get_backend_wait_event(integer)textバックエンドが現在待機中であれば、待機イベント名、さもなくばNULL。 詳細は表28.4「wait_eventの説明」を参照してください。
pg_stat_get_backend_xact_start(integer)timestamp with time zone現在のトランザクションが開始された時刻です。