PostgreSQLの統計情報コレクタはサーバの活動状況に関する情報を収集し、報告するサブシステムです。 現在、コレクタはテーブルとインデックスへのアクセスをディスクブロックおよび個々の行単位で数えることができます。 またこれは、各テーブル内の総行数、および、各テーブルでのバキュームやアナライズの実施情報を追跡します。 また、ユーザ定義関数の呼ばれた回数、それぞれの消費した総時間をカウントします。
また、PostgreSQLは他のサーバプロセスによって現在実行されている正確なコマンドなど現在システム内で起きていること、またシステム内にどんな他の接続が存在するかということについての動的情報を正確に報告する機能を持ちます。 これはコレクタプロセスから独立している機能です。
統計情報の収集によって問い合わせの実行に少しオーバーヘッドが加わりますので、システムは情報を収集するようにもしないようにも設定することができます。
これは通常は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.1に一覧されています。 また、統計情報の収集結果を表示するために、他にもいくつかのビューがあり、表 28.2に一覧されています。 他にも、28.2.3で説明する、基礎的な統計情報関数を使用した独自のビューを構築することもできます。
この統計情報を使用して、収集されるデータを監視する場合、この情報は即座に更新されないことを認識することが重要です。
個別のサーバプロセスは、待機状態になる直前に、新しい統計情報に関する数をコレクタに送信します。
ですので、実行中の問い合わせやトランザクションは表示上の総和には影響を与えません。
また、コレクタ自体もおよそPGSTAT_STAT_INTERVAL
(サーバ構築時に変更しない限り500 ms)ミリ秒に一度新しい報告を出力します。
ですので、表示上の情報は実際の活動から遅れて表示されます。
しかし、track_activities
で収集される現在の問い合わせの情報は常に最新です。
この他の重要なポイントは、いつサーバプロセスが統計情報を表示するように尋ねられるかです。
サーバプロセスは、まずコレクタによって発行された最も最近の報告を取り出します。
そして、現在のトランザクションが終わるまで、全ての統計情報ビューと関数においてこのスナップショットを使用し続けます。
ですから、現在のトランザクションを続けている間、統計情報は一定の情報を示します。
同様に、全セッションの現在の問い合わせに関する情報も、そうした情報がトランザクションで最初に要求された時に収集され、そのトランザクションの間同じ情報が表示されます。
これはバグではなく、特徴です。
なぜなら、これにより、知らない間に値が変更することを考慮することなく、統計情報に対して複数の問い合わせを実行し、その結果を相関することができるからです。
しかし、各問い合わせで新しい結果を取り出したい場合は、確実にトランザクションブロックの外側でその問い合わせを行ってください。
他にもpg_stat_clear_snapshot
()を呼び出すこともできます。
これは現在のトランザクションの統計情報スナップショットを(もしあれば)破棄します。
次に統計情報を使用する場合に新しいスナップショットを取り出すことになります。
トランザクションからは、pg_stat_xact_all_tables
、pg_stat_xact_sys_tables
、pg_stat_xact_user_tables
、pg_stat_xact_user_functions
、およびこれらのビューの元となっている関数を通じて、自身の統計情報(まだコレクタに送られていない)も参照することができます。
これらの数値はトランザクション中に継続的に更新されていくため上記の様な(静的な情報を示す)振る舞いとはなりません。
表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
ビュー
列 | 型 | 説明 |
---|---|---|
datid | oid | バックエンドが接続するデータベースのOIDです。 |
datname | name | バックエンドが接続するデータベースの名前です。 |
pid | integer | バックエンドのプロセスIDです。 |
usesysid | oid | バックエンドにログインしたユーザの識別子です。 |
usename | name | バックエンドに接続したユーザの名前です。 |
application_name | text | バックエンドに接続したアプリケーションの名前です。 |
client_addr | inet | バックエンドに接続したクライアントのIPアドレスです。 このフィールドがNULLである場合、これはクライアントがサーバマシン上のUnixソケット経由で接続されたか、自動バキュームなど内部処理であることを示します。 |
client_hostname | text |
client_addr の逆引き検索により報告された、接続クライアントのホスト名です。
IP接続、かつlog_hostnameが有効である場合にのみこのフィールドは非NULLになります。
|
client_port | integer |
クライアントがバックエンドとの通信に使用するTCPポート、もしUnixソケットを使用する場合は-1 です。
|
backend_start | timestamp with time zone | プロセスが開始した時刻です。 クライアントのバックエンドについては、クライアントがサーバに接続した時刻です。 |
xact_start | timestamp with time zone |
プロセスの現在のトランザクションが開始した時刻です。
活動中のトランザクションがない場合はNULLです。
現在の問い合わせがトランザクションの先頭である場合、この列はquery_start 列と同じです。
|
query_start | timestamp with time zone |
現在有効な問い合わせが開始した時刻です。
もしstate がactive でない場合は直前の問い合わせが開始した時刻です。
|
state_change | timestamp with time zone | state の最終変更時刻です。 |
wait_event_type | text |
バックエンドが待機しているイベントがあれば、その型、なければNULLとなります。
以下のいずれかの値を取ることができます。
|
wait_event | text | バックエンドが現在待機している場合は待機イベント名、その他はNULL。 詳細は表 28.4を参照してください。 |
state | text |
現在のバックエンドの総体的な状態です。
以下のいずれかの値を取ることができます。
|
backend_xid | xid | もしあれば、このバックエンドの最上位のトランザクション識別子。 |
backend_xmin | xid |
現在のバックエンドのxmin 。
|
query | text |
バックエンドの最も最近の問い合わせテキストです。
state がactive の場合、現在実行中の問い合わせを意味します。
その他のすべての状態では、実行済みの最後の問い合わせを示します。
デフォルトでは問い合わせのテキストは1024文字で切り捨てられますが、この値はパラメータtrack_activity_query_sizeにより変更できます。
|
backend_type | text |
現在のバックエンドの種別です。
取り得る値はautovacuum launcher 、autovacuum worker 、logical replication launcher 、logical replication worker 、parallel worker , background writer 、client backend 、checkpointer 、startup 、walreceiver 、walsender 、walwriter です。
これに加えて、拡張によって登録されたバックグラウンドワーカは追加の型を持つかも知れません。
|
pg_stat_activity
はサーバプロセス毎に、そのプロセスの現在の活動に関連する情報を表示する1行を持ちます。
wait_event
とstate
列は独立しています。
バックエンドがactive
状態である場合、いくつかのイベントではwaiting
かもしれませんし、そうでないかもしれません。
状態がactive
であり、wait_event
がNULLでない場合、問い合わせは実行中ですが、システム内のどこかでブロックされていることを意味します。
表28.4 wait_event
の説明
待機イベント型 | 待機イベント名 | 説明 |
---|---|---|
LWLock | ShmemIndexLock | 共有メモリ内に領域を発見する、もしくは割り当てるのを待っています。 |
OidGenLock | OIDを割り当て、または付与するのを待っています。 | |
XidGenLock | トランザクションIDを割り当て、または付与するのを待っています。 | |
ProcArrayLock | トランザクションの終了にてスナップショットを取得、またはトランザクションIDを消去するのを待っています。 | |
SInvalReadLock | 共有無効化キュー内のメッセージを検索、もしくは削除するのを待っています。 | |
SInvalWriteLock | 共有無効化キュー内のメッセージを追加するのを待っています。 | |
WALBufMappingLock | WALバッファ内のページの置き換えを待っています。 | |
WALWriteLock | WALバッファがディスクに書き込まれるのを待っています。 | |
ControlFileLock | 制御ファイルの読み込みもしくは更新、または新しいWALファイルの作成を待っています。 | |
CheckpointLock | チェックポイントを処理することを待っています。 | |
CLogControlLock | トランザクションの状態を読み込み、または更新するのを待っています。 | |
SubtransControlLock | サブトランザクション情報の読み込み、または更新するのを待っています。 | |
MultiXactGenLock | 共有マルチトランザクション状態の読み込み、または更新するのを待っています。 | |
MultiXactOffsetControlLock | マルチトランザクションオフセットマッピングの読み込み、または更新するのを待っています。 | |
MultiXactMemberControlLock | マルチトランザクションメンバーマッピングの読み込み、または更新するのを待っています。 | |
RelCacheInitLock | リレーションキャッシュ初期化ファイルの読み込み、または書き込みするのを待っています。 | |
CheckpointerCommLock | fsyncリクエストを管理するために待機しています。 | |
TwoPhaseStateLock | プリペアードトランザクションの状態を読み込み、または更新するのを待っています。 | |
TablespaceCreateLock | テーブルスペースの作成、または削除するのを待っています。 | |
BtreeVacuumLock | B-Treeインデックスのバキュームに関連した情報の読み込み、または更新するのを待っています。 | |
AddinShmemInitLock | 共有メモリの領域確保を管理するために待機しています。 | |
AutovacuumLock | 自動バキュームワーカの現在の状態を更新、または読み込むために待機している自動バキュームワーカまたはランチャ。 | |
AutovacuumScheduleLock | バキューム対象として選定されたテーブルが、まだバキューム処理が必要であることを確認するために待っています。 | |
SyncScanLock | 同期スキャンのためにテーブル上のスキャン開始位置を取得するのを待っています。 | |
RelationMappingLock | ファイルノードマッピングへカタログを格納するために使用される、リレーションマップファイルを更新するのを待っています。 | |
AsyncCtlLock | 共有通知状態の読み込み、または更新するのを待っています。 | |
AsyncQueueLock | 通知メッセージの読み込み、または更新するのを待っています。 | |
SerializableXactHashLock | シリアライザブルトランザクションに関する情報を検索、または格納するのを待っています。 | |
SerializableFinishedListLock | 完了したシリアライザブルトランザクションの一覧へアクセスするのを待っています。 | |
SerializablePredicateLockListLock | シリアライザブルトランザクションによって保持されたロックの一覧への操作を処理するのを待っています。 | |
OldSerXidLock | 衝突しているシリアライザブルトランザクションの読み込み、または記録するのを待っています。 | |
SyncRepLock | 同期レプリカに関する情報の読み込み、または更新のために待機しています。 | |
BackgroundWorkerLock | バックグラウンドワーカ状態の読み込み、または更新するのを待っています。 | |
DynamicSharedMemoryControlLock | 動的共有メモリ状態の読み込み、または更新するのを待っています。 | |
AutoFileLock | postgresql.auto.conf ファイルの更新するのを待っています。 | |
ReplicationSlotAllocationLock | レプリケーションスロットの割り当て、または解放するのを待っています。 | |
ReplicationSlotControlLock | レプリケーションスロット状態の読み込み、または更新するのを待っています。 | |
CommitTsControlLock | トランザクションコミットタイムスタンプの読み込み、または更新するのを待っています。 | |
CommitTsLock | トランザクションタイムスタンプのために設定された最新の値を読み込み、または更新するのを待っています。 | |
ReplicationOriginLock | レプリケーションオリジンのセットアップ、削除、または使用を待っています。 | |
MultiXactTruncationLock | マルチトランザクション情報の読み込み、またはトランケートを行うのを待っています。 | |
OldSnapshotTimeMapLock | 古いスナップショット制御情報の読み込み、または更新するのを待っています。 | |
BackendRandomLock | 乱数の生成を待機しています。 | |
LogicalRepWorkerLock | 論理レプリケーションワーカの動作が完了するのを待機しています。 | |
CLogTruncationLock | Waiting to execute txid_status or update
the oldest transaction id available to it. | |
clog | clog(トランザクション状態)バッファのI/Oを待機しています。 | |
commit_timestamp | コミットタイムスタンプバッファのI/Oを待機しています。 | |
subtrans | サブトランザクションバッファのI/Oを待機しています。 | |
multixact_offset | マルチトランザクションオフセットバッファのI/Oを待機しています。 | |
multixact_member | マルチトランザクションメンバーバッファのI/Oを待機しています。 | |
async | 非同期(通知)バッファのI/Oを待機しています。 | |
oldserxid | oldserxidバッファの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 | パラレルクエリの動的共有メモリ割り当てロックを待機しています。 | |
tbm | TBM共有イテレータロックを待機しています。 | |
parallel_append | パラレルアペンド計画を実行中に次のサブプランの選択を待機しています。 | |
parallel_hash_join | パラレルハッシュ計画を実行中に、メモリチャンクまたは更新カウンタの割り当てまたは交換を待機しています。 | |
Lock | relation | リレーション上のロックを獲得するのを待っています。 |
extend | リレーションを拡張するのを待っています。 | |
page | リレーションのページ上のロックを獲得するのを待っています。 | |
tuple | タプル上のロックを獲得するのを待っています。 | |
transactionid | トランザクションが終了するのを待っています。 | |
virtualxid | 仮想xidロックを獲得するのを待っています。 | |
speculative token | 投機的挿入ロックを獲得するのを待っています。 | |
object | 非リレーションデータベースオブジェクト上のロックを獲得するのを待っています。 | |
userlock | ユーザロックを獲得するのを待っています。 | |
advisory | 助言ユーザロックを獲得するのを待っています。 | |
BufferPin | BufferPin | バッファ上のピンを獲得するのを待っています。 |
Activity | ArchiverMain | アーカイバプロセスのメインループ内で待機しています。 |
AutoVacuumMain | 自動バキュームのランチャプロセスのメインループ内で待機しています。 | |
BgWriterHibernate | バックグラウンドライタプロセス内で待機し、休止状態になっています。 | |
BgWriterMain | バックグラウンドライタプロセスのバックグラウンドワーカのメインループ内で待機しています。 | |
CheckpointerMain | チェックポインタプロセスのメインループ内で待機しています。 | |
LogicalApplyMain | ロジカルアプライプロセスのメインループ内で待機しています。 | |
LogicalLauncherMain | ロジカルランチャプロセスのメインループ内で待機しています。 | |
PgStatMain | 統計情報収集プロセスのメインループ内で待機しています。 | |
RecoveryWalAll | リカバリ時にあらゆる種類のソース(ローカル、アーカイブ、またはストリーム)からのWALを待機しています。 | |
RecoveryWalStream | リカバリ時にストリームからのWALを待機しています。 | |
SysLoggerMain | sysloggerプロセスのメインループ内で待機しています。 | |
WalReceiverMain | WAL受信プロセスのメインループ内で待機しています。 | |
WalSenderMain | WAL送信プロセスのメインループ内で待機しています。 | |
WalWriterMain | WAL書き込みプロセスのメインループ内で待機しています。 | |
Client | ClientRead | クライアントからのデータの読み込みを待機しています。 |
ClientWrite | クライアントへのデータの書き込みを待機しています。 | |
LibPQWalReceiverConnect | WAL受信プロセス内でリモートサーバへの接続が確立するのを待機しています。 | |
LibPQWalReceiverReceive | WAL受信プロセス内でリモートサーバからデータを受信するのを待機しています。 | |
SSLOpenServer | 接続試行中にSSLを待機しています。 | |
WalReceiverWaitStart | 起動プロセスがストリーミングレプリケーションの初期データを送信するのを待機しています。 | |
WalSenderWaitForWAL | WALがWAL送信プロセス内でフラッシュされるのを待機しています。 | |
WalSenderWriteData | WAL送信プロセス内でWAL受信者からの応答を処理している時に、何らかの活動を待機しています。 | |
Extension | Extension | 拡張内で待機しています。 |
IPC | BgWorkerShutdown | バックグラウンドワーカがシャットダウンするのを待機しています。 |
BgWorkerStartup | バックグラウンドワーカが起動するのを待機しています。 | |
BtreePage | パラレルBツリースキャンに必要なページ番号が利用可能になるのを待機しています。 | |
ClogGroupUpdate | トランザクション終了時にグループリーダによるトランザクション状態の更新を待機しています。 | |
ExecuteGather | Gather ノードの実行時に子プロセスの活動を待機しています。 | |
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 | レプリケーションスロットが削除できるよう非活動状態になるのを待機しています。 | |
SafeSnapshot | READ ONLY DEFERRABLE のトランザクションのスナップショットを待機しています。 | |
SyncRep | 同期レプリケーション中に、リモートサーバからの確認を待機しています。 | |
Timeout | BaseBackupThrottle | スロットル活動時にベースバックアップで待機しています。 |
PgSleep | pg_sleep を呼び出したプロセス内で待機しています。 | |
RecoveryApplyDelay | リカバリ時のWAL適用が遅延させられたため待機しています。 | |
IO | BufFileRead | バッファファイルからの読み取りを待機しています。 |
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データが安定したストレージに到達するのを待機しています。 | |
SLRURead | SLRUページの読み込みを待機しています。 | |
SLRUSync | ページ書き込みの後、SLRUデータが安定したストレージに到達するのを待機しています。 | |
SLRUWrite | SLRUページの書き込みを待機しています。 | |
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ファイルを初期化している時に書き込みを待機しています。 | |
WALRead | WALファイルからの読み込みを待機しています。 | |
WALSenderTimelineHistoryRead | WAL送信サーバのタイムラインコマンドで、タイムラインの履歴ファイルの読み込みを待機しています。 | |
WALSyncMethodAssign | WALの同期方法を割り当てている時にデータが安定したストレージに到達するのを待機しています。 | |
WALWrite | WALファイルへの書き込みを待機しています。 |
拡張によって登録されたトランシェでは、名称が拡張によって指定され、それが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
ビュー
列 | 型 | 説明 |
---|---|---|
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送信サーバの現在の状態です。
取り得る値は以下の通りです。
|
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 |
このスタンバイサーバの同期状態です。
取り得る値は以下の通りです。
|
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
ビュー
列 | 型 | 説明 |
---|---|---|
pid | integer | WALレシーバプロセスのプロセスID |
status | text | WALレシーバプロセスの活動状態 |
receive_start_lsn | pg_lsn | WALレシーバが開始された時に使われる先行書き込みログの最初の位置 |
receive_start_tli | integer | WALレシーバが開始された時に使われる初期タイムライン番号 |
received_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レシーバによって使用された接続文字列。 |
pg_stat_wal_receiver
ビューは、1行のみの形式で、受信サーバが接続したサーバからWALレシーバに関する統計情報を表示します。
表28.7 pg_stat_subscription
View
列 | 型 | 説明 |
---|---|---|
subid | oid | サブスクリプションのOID |
subname | text | サブスクリプションの名前 |
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送信サーバかに最後の先行書き込みログ位置が報告された時刻 |
pg_stat_subscription
には、各サブスクリプションのメインワーカに対して1行が含まれ(ワーカが実行中でないときはPIDがNULLになります)、さらにサブスクライブされたテーブルの初期データコピーを処理するワーカについて別の行があります。
表28.8 pg_stat_ssl
ビュー
列 | 型 | 説明 |
---|---|---|
pid | integer | バックエンドプロセスまたはWAL送信プロセスのプロセスIDです。 |
ssl | boolean | この接続でSSLが使用されていれば真になります。 |
version | text | 使用されているSSLのバージョン、この接続でSSLが使用されていなければNULLになります。 |
cipher | text | 使用されているSSL暗号の名前、この接続でSSLが使用されていなければNULLになります。 |
bits | integer | 使用されている暗号アルゴリズムのビット数、この接続でSSLが使用されていなければNULLになります。 |
compression | boolean | SSL圧縮が使用されていれば真、使用されていなければ偽、この接続でSSLが使用されていなければNULLになります。 |
clientdn | text |
使用されているクライアント証明書の識別名(DN)フィールド、クライアント証明書が提供されなかった場合、およびこの接続でSSLが使用されていない場合はNULLになります。
このフィールドは、DNフィールドがNAMEDATALEN (標準ビルドでは64文字)より長いと切り詰められます。
|
pg_stat_ssl
ビューは、バックエンドプロセスおよびWAL送信プロセスごとに1行を保持し、接続上でのSSLの使用に関する統計情報を示します。
pg_stat_activity
またはpg_stat_replication
とpid
列で結合することで、接続に関するより詳細な情報を取得することができます。
表28.9 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 | この統計が最後にリセットされた時刻 |
pg_stat_archiver
は常に、クラスタのアーカイバプロセスに関するデータを含む1つの行を持ちます。
表28.10 pg_stat_bgwriter
ビュー
列 | 型 | 説明 |
---|---|---|
checkpoints_timed | bigint | これまでに実行された、スケジュールされたチェックポイントの個数です。 |
checkpoints_req | bigint | これまでに実行された、要求されたチェックポイントの個数です。 |
checkpoint_write_time | double precision | チェックポイント処理におけるディスクにファイルを書き出す部分に費やされた、ミリ秒単位の総時間です。 |
checkpoint_sync_time | double precision | チェックポイント処理におけるディスクにファイルを同期する部分に費やされた、ミリ秒単位の総時間です。 |
buffers_checkpoint | bigint | チェックポイント期間に書き出されたバッファ数です。 |
buffers_clean | bigint | バックグラウンドライタにより書き出されたバッファ数です。 |
maxwritten_clean | bigint | バックグラウンドライタが書き出したバッファ数が多過ぎたために、整理用スキャンを停止した回数です。 |
buffers_backend | bigint | バックエンドにより直接書き出されたバッファ数です。 |
buffers_backend_fsync | bigint |
バックエンドが独自にfsync 呼び出しを実行しなければならなかった回数です。
(通常は、バックエンドが独自に書き込んだ場合であっても、バックグラウンドライタがこれらを扱います。)
|
buffers_alloc | bigint | 割当られたバッファ数です。 |
stats_reset | timestamp with time zone | これらの統計情報がリセットされた最終時刻です。 |
pg_stat_bgwriter
ビューは常に、クラスタのグローバルデータに関する1つの行を持ちます。
表28.11 pg_stat_database
ビュー
列 | 型 | 説明 |
---|---|---|
datid | oid | データベースのOIDです。 |
datname | name | データベースの名前です。 |
numbackends | integer | 現在データベースに接続しているバックエンドの個数です。 これは、このビューの中で、現在の状態を反映した値を返す唯一の列です。 他の列はすべて、最後にリセットされてから累積された値を返します。 |
xact_commit | bigint | このデータベースの中でコミットされたトランザクション数です。 |
xact_rollback | bigint | このデータベースの中でロールバックされたトランザクション数です。 |
blks_read | bigint | データベース内で読み取られたディスクブロック数です。 |
blks_hit | bigint | バッファキャッシュに既にあることが分かっているために読み取りが不要だったディスクブロック数です(これにはPostgreSQLのバッファキャッシュにおけるヒットのみが含まれ、オペレーティングシステムのファイルシステムキャッシュは含まれません)。 |
tup_returned | bigint | データベース内の問い合わせで返された行数です。 |
tup_fetched | bigint | データベース内の問い合わせで取り出された行数です。 |
tup_inserted | bigint | データベース内の問い合わせで挿入された行数です。 |
tup_updated | bigint | データベース内の問い合わせで更新された行数です。 |
tup_deleted | bigint | データベース内の問い合わせで削除された行数です。 |
conflicts | bigint | データベース内のリカバリで競合したためキャンセルされた問い合わせ数です。 (競合はスタンバイサーバ上でのみ起こります。詳細についてはpg_stat_database_conflictsを参照してください。) |
temp_files | bigint | データベース内の問い合わせによって書き出された一時ファイルの個数です。 一時ファイルが作成された理由(ソート処理やハッシュ処理)やlog_temp_filesの設定に関わらず、すべての一時ファイルが計上されます。 |
temp_bytes | bigint | データベース内の問い合わせによって一時ファイルに書き出されたデータ量です。 一時ファイルが作成された理由やlog_temp_filesの設定に関わらず、すべての一時ファイルが計上されます。 |
deadlocks | bigint | データベース内で検知されたデッドロック数です。 |
blk_read_time | double precision | データベース内でバックエンドによりデータファイルブロックの読み取りに費やされた、ミリ秒単位の時間です。 |
blk_write_time | double precision | データベース内でバックエンドによりデータファイルブロックの書き出しに費やされた、ミリ秒単位の時間です。 |
stats_reset | timestamp with time zone | 統計情報がリセットされた最終時刻です。 |
pg_stat_database
には、クラスタ内のデータベース毎にデータベース全体の統計情報を示す1行が含まれます。
表28.12 pg_stat_database_conflicts
ビュー
列 | 型 | 説明 |
---|---|---|
datid | oid | データベースのOIDです。 |
datname | name | データベースの名前です。 |
confl_tablespace | bigint | データベースにおいて、削除されたテーブル空間のためにキャンセルされた問い合わせの個数です。 |
confl_lock | bigint | データベースにおいて、ロック時間切れのためにキャンセルされた問い合わせの個数です。 |
confl_snapshot | bigint | データベースにおいて、古いスナップショットのためにキャンセルされた問い合わせの個数です。 |
confl_bufferpin | bigint | データベースにおいて、ピンが付いたバッファのためにキャンセルされた問い合わせの個数です。 |
confl_deadlock | bigint | データベースにおいて、デッドロックのためにキャンセルされた問い合わせの個数です。 |
pg_stat_database_conflicts
ビューは、データベース毎に1行を保持し、スタンバイサーバでのリカバリと競合するためにキャンセルされた問い合わせに関するデータベース全体の統計情報を示します。
マスタサーバでは競合は発生しませんので、スタンバイサーバ上の情報のみが保持されます。
表28.13 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 | このテーブルが最後に解析されてから変更された行の推定値 |
last_vacuum | timestamp with time zone |
テーブルが手作業でバキュームされた最終時刻です(VACUUM FULL は含まれません)。
|
last_autovacuum | timestamp with time zone | 自動バキュームデーモンによりテーブルがバキュームされた最終時刻です。 |
last_analyze | timestamp with time zone | テーブルが手作業で解析された最終時刻です。 |
last_autoanalyze | timestamp with time zone | 自動バキュームデーモンによりテーブルが解析された最終時刻です。 |
vacuum_count | bigint | テーブルが手作業でバキュームされた回数です。(VACUUM FULL は含まれません)。 |
autovacuum_count | bigint | テーブルが自動バキュームデーモンによりバキュームされた回数です。 |
analyze_count | bigint | テーブルが手作業で解析された回数です。 |
autoanalyze_count | bigint | テーブルが自動バキュームデーモンによって解析された回数です。 |
pg_stat_all_tables
ビューは現在のデータベース内のテーブル(TOASTテーブルを含む)毎に1行の形式で、特定のテーブルへのアクセスに関する統計情報を表示します。
pg_stat_user_tables
およびpg_stat_sys_tables
ビューにも同じ情報が含まれますが、それぞれユーザテーブルとシステムテーブルのみにフィルタされています。
表28.14 pg_stat_all_indexes
ビュー
列 | 型 | 説明 |
---|---|---|
relid | oid | インデックス対象のテーブルのOIDです。 |
indexrelid | oid | インデックスのOIDです。 |
schemaname | name | インデックスが存在するスキーマの名前です。 |
relname | name | インデックス対象のテーブルの名前です。 |
indexrelname | name | インデックスの名前です。 |
idx_scan | bigint | インデックスに対して開始されたインデックススキャンの実行回数です。 |
idx_tup_read | bigint | インデックスに対するスキャンにより返されたインデックス項目の個数です。 |
idx_tup_fetch | bigint | インデックスを使用する単純なインデックススキャンによって取り出された有効テーブル行数です。 |
pg_stat_all_indexes
ビューは、現在のデータベース内のインデックス毎に、特定のインデックスへのアクセスに関する統計情報を示す1行を保持します。
pg_stat_user_indexes
とpg_stat_sys_indexes
も同じ情報を保持しますが、ユーザ向けのインデックスとシステム向けのインデックスに対する行のみを保持するようにフィルタ処理されています。
単純なインデックススキャン、「ビットマップ」インデックススキャン、あるいはオプティマイザによりインデックスが使用されることがあります。
ビットマップスキャンでは、複数のインデックスの出力をANDやOR規則で組み合わせることができます。
このため、ビットマップスキャンが使用される場合、特定インデックスと個々のヒープ行の取り出しとを関連づけることが困難です。
したがってビットマップスキャンでは、使用したインデックスのpg_stat_all_indexes
.idx_tup_read
個数を増やし、そのテーブルのpg_stat_all_tables
.idx_tup_fetch
個数を増やしますが、pg_stat_all_indexes
.idx_tup_fetch
を変更しません。
オプティマイザもインデックスにアクセスし、提供された定数値がオプティマイザの統計情報に記録された範囲の外側にあるときに、それを検査します。
これはオプティマイザの統計情報が古いかもしれないからです。
idx_tup_read
とidx_tup_fetch
個数は、ビットマップスキャンがまったく使用されていない場合でも異なります。
idx_tup_read
はインデックスから取り出したインデックス項目を計上し、idx_tup_fetch
はテーブルから取り出した有効行を計上するからです。
インデックスを用いて不要行やまだコミットされていない行が取り出された場合やインデックスオンリースキャン法によりヒープの取り出しが回避された場合に、後者は減少します。
表28.15 pg_statio_all_tables
ビュー
列 | 型 | 説明 |
---|---|---|
relid | oid | テーブルのOIDです。 |
schemaname | name | テーブルが存在するスキーマの名前です。 |
relname | name | テーブルの名前です。 |
heap_blks_read | bigint | テーブルから読み取られたディスクブロック数です。 |
heap_blks_hit | bigint | テーブル内のバッファヒット数です。 |
idx_blks_read | bigint | テーブル上のすべてのインデックスから読み取られたディスクブロック数です。 |
idx_blks_hit | bigint | テーブル上のすべてのインデックス内のバッファヒット数です。 |
toast_blks_read | bigint | テーブルのTOASTテーブル(もしあれば)から読み取られたディスクブロック数です。 |
toast_blks_hit | bigint | テーブルのTOASTテーブル(もしあれば)におけるバッファヒット数です。 |
tidx_blks_read | bigint | テーブルのTOASTテーブルのインデックス(もしあれば)から読み取られたディスクブロック数です。 |
tidx_blks_hit | bigint | テーブルのTOASTテーブルのインデックス(もしあれば)におけるバッファヒット数です。 |
pg_statio_all_tables
ビューは現在のデータベース内のテーブル(TOASTテーブルを含む)ごとに、特定のテーブルのI/Oに関する統計情報を示す1行を保持します。
pg_statio_user_tables
とpg_statio_sys_tables
には同じ情報が保持されますが、ユーザテーブルとシステムテーブルに関する行のみを持つようにフィルタ処理がなされています。
表28.16 pg_statio_all_indexes
ビュー
列 | 型 | 説明 |
---|---|---|
relid | oid | このインデックスに対応するテーブルのOIDです。 |
indexrelid | oid | インデックスのOIDです。 |
schemaname | name | インデックスが存在するスキーマの名前です。 |
relname | name | このインデックスに対応するテーブルの名前です。 |
indexrelname | name | インデックスの名前です。 |
idx_blks_read | bigint | インデックスから読み取られたディスクブロック数です。 |
idx_blks_hit | bigint | インデックスにおけるバッファヒット数です。 |
pg_statio_all_indexes
ビューは、現在のデータベース内のインデックス毎に、特定のインデックスへのI/Oに関する統計情報を持つ1行を保持します。
pg_statio_user_indexes
とpg_statio_sys_indexes
も同じ情報を保持しますが、それぞれユーザ向けのインデックスとシステム向けのインデックスに対する行のみを保持するようにフィルタ処理されています。
表28.17 pg_statio_all_sequences
ビュー
列 | 型 | 説明 |
---|---|---|
relid | oid | シーケンスのOIDです。 |
schemaname | name | シーケンスが存在するスキーマの名前です。 |
relname | name | シーケンスの名前です。 |
blks_read | bigint | シーケンスから読み取られたディスクブロック数です。 |
blks_hit | bigint | シーケンスにおけるバッファヒット数です。 |
pg_statio_all_sequences
ビューは現在のデータベース内のシーケンスごとに、特定シーケンスにおけるI/Oに関する統計情報を示す1行を保持します。
表28.18 pg_stat_user_functions
ビュー
列 | 型 | 説明 |
---|---|---|
funcid | oid | 関数のOIDです。 |
schemaname | name | 関数が存在するスキーマの名前です。 |
funcname | name | 関数の名前です。 |
calls | bigint | 関数が呼び出された回数です。 |
total_time | double precision | 関数とその関数から呼び出されるその他の関数で費やされた、ミリ秒単位の総時間です。 |
self_time | double precision | その関数から呼び出されるその他の関数で費やされた時間を含まない、関数自身で費やされた、ミリ秒単位の総時間です。 |
pg_stat_user_functions
ビューは追跡された関数毎に、その関数の実行に関する統計情報を1行保持します。
track_functionsパラメータは関数が追跡されるかどうかを正確に制御します。
統計情報を参照する他の方法は、上述の標準ビューによって使用される基礎的な統計情報アクセス関数と同じ関数を使用した問い合わせを作成することで設定することができます。
こうした関数の名前などに関する詳細については、標準ビューの定義を参照してください。
(例えばpsqlでは\d+ pg_stat_activity
を発行してください。)
データベースごとの統計情報についてのアクセス関数は、どのデータベースに対して報告するのかを識別するためにデータベースのOIDを取ります。
テーブルごと、インデックスごとの関数はテーブルの、もしくはインデックスのOIDを取ります。
関数ごとの統計情報の関数は、関数のOIDを取ります。
これらの関数を使用して参照できるテーブルとインデックス、および関数は現在のデータベース内のものだけであることに注意してください。
その他の統計情報収集に関連した関数を表 28.19に示します。
表28.19 その他の統計情報関数
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 バックエンド単位の統計情報関数
関数 | 戻り値の型 | 説明 |
---|---|---|
| setof integer | 現在活動中のバックエンドID番号(1から活動中のバックエンドの個数まで)を設定します。 |
| text | バックエンドが最後に行った問い合わせテキストです。 |
| timestamp with time zone | 最後の問い合わせが開始された時刻です。 |
| inet | バックエンドに接続したクライアントのIPアドレスです。 |
| integer | クライアントが通信に使用しているTCPポート番号です。 |
| oid | バックエンドが接続するデータベースのOIDです。 |
| integer | バックエンドのプロセスIDです。 |
| timestamp with time zone | プロセスが開始された時刻です。 |
| oid | バックエンドにログインしたユーザのOIDです。 |
| text | バックエンドが現在待機中であれば、待機イベント型名、さもなくばNULL。 詳細は表 28.4を参照してください。 |
| text | バックエンドが現在待機中であれば、待機イベント名、さもなくばNULL。 詳細は表 28.4を参照してください。 |
| timestamp with time zone | 現在のトランザクションが開始された時刻です。 |