PostgreSQL 9.2.0文書 | ||||
---|---|---|---|---|
前のページ | 上に戻る | 第 27章データベース活動状況の監視 | 次のページ |
PostgreSQLの統計情報コレクタはサーバの活動状況に関する情報を収集し、報告するサブシステムです。 現在、コレクタはテーブルとインデックスへのアクセスをディスクブロックおよび個々の行単位で数えることができます。 またこれは、各テーブル内の総行数、および、各テーブルでのVACUUMやANALYZEの実施情報を追跡します。 また、ユーザ定義関数の呼ばれた回数、それぞれの消費した総時間をカウントします。
また、PostgreSQLは他のサーバプロセスによって現在実行されている問い合わせを正確に報告する機能を持ちます。 これはコレクタプロセスから独立している機能です。
統計情報の収集によって問い合わせの実行に少しオーバーヘッドが加わりますので、システムは情報を収集するようにもしないようにも設定することができます。 これは通常はpostgresql.conf内で設定される、設定パラメータによって制御されます (設定パラメータの設定についての詳細は第18章を参照してください)。
track_activitiesパラメータにより、すべてのサーバプロセスで現在実行されているコマンドを監視することができます。
track_countsパラメータは、テーブルおよびインデックスアクセスに関する統計情報を収集するかどうか制御します。
track_functionsパラメータにより、ユーザ定義関数の使用状況を追跡するかどうかを指定できます。
track_io_timingパラメータにより、ブロックの読み込みと書き込み時間を監視することができます。
通常、これらの変数は全てのサーバプロセスに適用できるようにpostgresql.conf内で設定されます。 しかし、SETコマンドを使用して、個別のセッションで有効または無効にすることができます (一般ユーザがその活動を管理者に隠すことを防止するために、スーパーユーザのみがSETを使用してこれらのパラメータを変更することができます。)
統計情報コレクタは他のPostgreSQLプロセスの情報を収集し、一時ファイルへ送信します。 これらのファイルはstats_temp_directoryパラメータで指定されたディレクトリに格納されます。デフォルトはpg_stat_tmpです。 性能向上のため、stats_temp_directoryをRAMベースのファイルシステム上に指定することで、物理I/Oの要求を減らすことができます。 サーバがシャットダウンした際は、統計情報データの永続的なコピーがglobalサブディレクトリに格納されるため、サーバの再起動をまたがって統計情報データを保持することができます。
統計情報の収集結果を表示するための、多くの定義済みのビューがあり、表27-1に一覧表示されています。 他にも、項27.2.3で説明されているように、基礎的な統計情報関数を使用した独自のビューを構築することもできます。
この統計情報を使用して、現在の活動状況を監視する場合、この情報は即座に更新されないことを認識することが重要です。 個別のサーバプロセスは、待機状態になる直前に、新しい統計情報に関する数をコレクタに送信します。 ですので、実行中の問い合わせやトランザクションは表示上の総和には影響を与えません。 また、コレクタ自体もおよそPGSTAT_STAT_INTERVAL(サーバ構築時に変更しない限り500)ミリ秒に一度新しい報告を出力します。 ですので、表示上の情報は実際の活動から遅れて表示されます。 しかし、track_activitiesで収集される現在の問い合わせの情報は常に最新です。
この他の重要なポイントは、いつサーバプロセスが統計情報を表示するように尋ねられるかです。
サーバプロセスは、まずコレクタによって発行された最も最近の報告を取り出します。
そして、現在のトランザクションが終わるまで、全ての統計情報ビューと関数においてこのスナップショットを使用し続けます。
ですから、現在のトランザクションを続けている間、統計情報は一定の情報を示します。
同様に、全セッションの現在の問い合わせに関する情報も、そうした情報がトランザクションで最初に要求された時に収集され、そのトランザクションの間同じ情報が表示されます。
これはバグではなく、特徴です。
なぜなら、これにより、知らない間に値が変更することを考慮することなく、統計情報に対して複数の問い合わせを実行し、その結果を相関することができるからです。
しかし、各問い合わせで新しい結果を取り出したい場合は、確実にトランザクションブロックの外側でその問い合わせを行ってください。
他にもpg_stat_clear_snapshot
()を呼び出すこともできます。
これは現在のトランザクションの統計情報スナップショットを(もしあれば)破棄します。
次に統計情報を使用する場合に新しいスナップショットを取り出すことになります。
トランザクションからは、pg_stat_xact_all_tables、pg_stat_xact_sys_tables、pg_stat_xact_user_tables、pg_stat_xact_user_functionsビューを通じて、自身の統計情報(まだコレクタに送られていない)も参照することができます。 これらの数値はトランザクション中に継続的に更新されていくため上記の様な(静的な情報を示す)振る舞いとはなりません。
表 27-1. 標準統計情報ビュー
ビュー名 | 説明 |
---|---|
pg_stat_activity | サーバプロセスあたり1行の形で、状態や現在のクエリ情報など、プロセスの現在の活動に関連した情報を表示します。詳細はpg_stat_activityを参照してください。 |
pg_stat_bgwriter | バックグラウンドライタプロセスの稼動統計情報を1行の形で表示します。詳細はpg_stat_bgwriterを参照してください。 |
pg_stat_database | データベースあたり1行の形で、データベース全体の稼動統計情報を示します。詳細はpg_stat_databaseを参照してください。 |
pg_stat_all_tables | 現在のデータベース内の各テーブルあたり1行の形で、指定されたテーブルへのアクセス統計情報を示します。詳細はpg_stat_all_tablesを参照してください。 |
pg_stat_sys_tables | システムテーブルのみが表示される点を除き、pg_stat_all_tablesと同じです。 |
pg_stat_user_tables | ユーザテーブルのみが表示される点を除き、pg_stat_all_tablesと同じです。 |
pg_stat_xact_all_tables | pg_stat_all_tablesと似ていますが、現在のトランザクションにて実施された処理結果をカウントします。(数値が見える時点では、これらの数値はpg_stat_all_tablesと関連するビューに含まれていません。) このビューでは、有効行数、無効行数、およびバキュームやアナライズの活動は表示しません。 |
pg_stat_xact_sys_tables | システムテーブルのみが表示される点を除き、pg_stat_xact_all_tablesと同じです。 |
pg_stat_xact_user_tables | ユーザテーブルのみが表示される点を除き、pg_stat_xact_all_tablesと同じです。 |
pg_stat_all_indexes | 現在のデータベース内の各インデックスあたり1行の形で、指定されたインデックスへのアクセス統計情報を示します。詳細はpg_stat_all_indexesを参照してください。 |
pg_stat_sys_indexes | システムテーブルのインデックスのみが表示される点を除き、pg_stat_all_indexesと同じです。 |
pg_stat_user_indexes | ユーザテーブルのインデックスのみが表示される点を除き、pg_stat_all_indexesと同じです。 |
pg_statio_all_tables | 現在のデータベース内の各テーブルあたり1行の形で、指定されたテーブルのI/O統計情報を示します。詳細はpg_statio_all_tablesを参照してください。 |
pg_statio_sys_tables | システムテーブルのみが表示される点を除き、pg_statio_all_tablesと同じです。 |
pg_statio_user_tables | ユーザテーブルのみが表示される点を除き、pg_statio_all_tablesと同じです。 |
pg_statio_all_indexes | 現在のデータベース内の各インデックスあたり1行の形で、指定されたインデックスのI/O統計情報を示します。詳細はpg_statio_all_indexesを参照してください。 |
pg_statio_sys_indexes | システムテーブルのインデックスのみが表示される点を除き、pg_statio_all_indexes と同じです。 |
pg_statio_user_indexes | ユーザテーブルのインデックスのみが表示される点を除き、pg_statio_all_indexesと同じです。 |
pg_statio_all_sequences | 現在のデータベース内の各シーケンスあたり1行の形で、指定されたシーケンスのI/O統計情報を示します。詳細はpg_statio_all_sequencesを参照してください。 |
pg_statio_sys_sequences | システムシーケンスのみが表示される点を除き、pg_statio_all_sequencesと同じです (現時点では、システムシーケンスは定義されていませんので、このビューは常に空です)。 |
pg_statio_user_sequences | ユーザシーケンスのみが表示される点を除き、pg_statio_all_sequencesと同じです。 |
pg_stat_user_functions | 追跡された各関数あたり1行の形で、関数の実行統計情報を示します。詳細はpg_stat_user_functionsを参照してください。 |
pg_stat_xact_user_functions | pg_stat_user_functionsと似ていますが、現在のトランザクション中に呼び出されたものだけをカウントします。 (数値が見える時点では、これらの数値はpg_stat_user_functionsに含まれていません。) |
pg_stat_replication | WAL送信プロセスあたり1行の形で、スタンバイサーバに接続している送信プロセスのレプリケーション統計情報を示します。詳細はpg_stat_replicationを参照してください。 |
pg_stat_database_conflicts | データベースあたり1行の形で、スタンバイサーバのデータベース全体での、リカバリ処理時の衝突を起因とする問い合わせキャンセルの統計情報を示します。詳細はpg_stat_database_conflictsを参照してください。 |
インデックス単位の統計情報は、どのインデックスが使用され、どの程度効果があるのかを評価する際に、特に有用です。
pg_statio_ビューは主に、バッファキャッシュの効率を評価する際に有用です。 実ディスク読み取りの数がバッファヒットの数よりもかなり少ないのであれば、そのキャッシュはカーネル呼び出しを行うことなく、ほとんどの読み取り要求を満足させています。 しかし、PostgreSQLバッファキャッシュに存在しないデータはカーネルのI/Oキャッシュにある可能性があり、そのため、物理的な読み取りを行うことなく取り出される可能性があるというPostgreSQLのディスクI/Oの取り扱いのため、これらの統計情報は、完全な論拠を提供しません。 PostgreSQLのI/O動作に関するより詳細な情報を入手したいのであれば、PostgreSQL統計情報コレクタとカーネルのI/Oの取り扱いの監視を行うオペレーティングシステムユーティリティを組み合わせることを勧めます。
表 27-2. pg_stat_activityビュー
列 | 型 | 説明 |
---|---|---|
datid | oid | このバックエンドが接続しているデータベースのOID |
datname | name | このバックエンドが接続しているデータベース名 |
pid | integer | このバックエンドのプロセスID |
usesysid | oid | このバックエンドにログインしているユーザのOID |
usename | name | このバックエンドにログインしているユーザの名前 |
application_name | text | このバックエンドに接続しているアプリケーションの名前 |
client_addr | inet | このバックエンドに接続しているクライントのIPアドレス。もしこの列がNULLならば、クライアントはサーバマシンのUNIXソケット経由での接続か、autovacuumの様な内部プロセスであることを示します。 |
client_hostname | text | client_addrのDNS逆引きにより通知される、接続しているクライアントのホスト名。この列はlog_hostnameが有効であり、またIP接続をしている時のみ非NULLとなります。 |
client_port | integer | クライアントがこのバックエンドと通信を行う際に使用しているTCPポート番号。UNIXソケットが使用されている場合は-1となります。 |
backend_start | timestamp with time zone | プロセスが開始された時間。例えば、クライアントがサーバに接続した時などです。 |
xact_start | timestamp with time zone | プロセスの現在のトランザクションが開始された時間。NULLの場合は現在実施されているトランザクションはありません。もし、現在のクエリがそのトランザクションの最初のクエリだった場合、この列はquery_startと等しくなります。 |
query_start | timestamp with time zone | 現在実施されている問い合わせが開始された時間。ただし、stateがactiveではない場合、直近に実施された問い合わせの開始時間となります。 |
state_change | timestamp with time zone | stateが最後に変更された時間。 |
waiting | boolean | 現在ロック待ちだった場合は真となります。 |
state | text | このバックエンドの現在の状態。取りえる値は以下です。
|
query | text | このバックエンドで最も直近の問い合わせ文字列。もしstateがactiveであれば、現在実行中の問い合わせを表示します。それ以外の場合は、最後に実施された問い合わせを表示します。 |
pg_stat_activityはサーバプロセスあたり1行を持ち、そのプロセスの現在の活動に関連した情報を示します。
注意: waitingとstateの列は独立しています。もしバックエンドがactiveの状態でも、waitingの状態であるかもしれませんし、そうでないかもしれません。 もしactiveとwaitingがともに真である状態ならば、問い合わせが実行中ですが、システムのどこかでロック待ちの状態にあることを意味します。
表 27-3. pg_stat_bgwriterビュー
列 | 型 | 説明 |
---|---|---|
checkpoints_timed | bigint | 実施された定期的チェックポイント回数 |
checkpoints_req | bigint | 実施された要求チェックポイント回数 |
checkpoint_write_time | double precision | チェックポイント処理における、ファイルのディスクへの書き込み処理に費やされた総合の累積時間。単位はミリ秒。 |
checkpoint_sync_time | double precision | チェックポイント処理における、ファイルのディスクへの同期処理に費やされた総合の累積時間。単位はミリ秒。 |
buffers_checkpoint | bigint | チェックポイント処理で書き込まれたバッファの数 |
buffers_clean | bigint | バックグラウンドライタにより書き込まれたバッファの数 |
maxwritten_clean | bigint | あまりに多くのバッファを書き出したため、バックグランドライタが整理用スキャンを中断した回数 |
buffers_backend | bigint | バックエンドにより直接書き出されたバッファの数 |
buffers_backend_fsync | bigint | バックエンドが自身でfsync を実施した回数(通常、バックエンド自身が書き込む場合でもバックグラウンドライタがそれらを制御します)
|
buffers_alloc | bigint | 割り当てられたバッファの数 |
stats_reset | timestamp with time zone | 最後にこれらの統計情報がリセットされた時間 |
pg_stat_bgwriterビューは、クラスタ全体のグローバルなデータを含む一つの行を常に保持します。
表 27-4. pg_stat_databaseビュー
列 | 型 | 説明 |
---|---|---|
datid | oid | データベースのOID |
datname | name | データベース名 |
numbackends | integer | 現在このデータベースに接続しているバックエンドの数。このビューの中で、現在の状態を反映した値を返すのはこの列だけです。他の列は、最後にリセットされた時からの累積値を返します。 |
xact_commit | bigint | このデータベースでコミットされたトランザクション数 |
xact_rollback | bigint | このデータベースでロールバックされたトランザクション数 |
blks_read | bigint | このデータベースで読み込まれたディスクブロック数 |
blks_hit | bigint | ディスクブロックがバッファキャッシュ上でヒットし、ディスク読み込みが不要だった回数(これはPostgreSQLのバッファキャッシュ上でヒットしたものだけを含んでおり、オペレーティングシステムのファイルキャッシュは含んでいません) |
tup_returned | bigint | このデータベースでの問い合わせにより返された行数 |
tup_fetched | bigint | このデータベースでの問い合わせによりフェッチされた行数 |
tup_inserted | bigint | このデータベースで挿入された行数 |
tup_updated | bigint | このデータベースで更新された行数 |
tup_deleted | bigint | このデータベースで削除された行数 |
conflicts | bigint | このデータベースでリカバリ処理と競合した結果キャンセルされた問い合わせ数(競合はスタンバイサーバ上でのみ発生します。詳しくはpg_stat_database_conflictsを参照してください) |
temp_files | bigint | このデータベースで問い合わせにより作成された一時ファイルの数。一時ファイルの生成理由(例えばソートなのかハッシュのためなのか)やlog_temp_files設定は考慮されず、生成された全ての一時ファイルがカウントされます。 |
temp_bytes | bigint | このデータベースで問い合わせにより作成された一時ファイルの累積サイズ。一時ファイルの生成理由やlog_temp_files設定は考慮されず、生成された全ての一時ファイルサイズが集計されます。 |
deadlocks | bigint | このデータベースで検知されたデッドロック回数 |
blk_read_time | double precision | このデータベースでバックエンドによりデータファイルブロックの読み込みに費やされた時間。単位はミリ秒。 |
blk_write_time | double precision | このデータベースでバックエンドによりデータファイルブロックの書き込みに費やされた時間。単位はミリ秒。 |
stats_reset | timestamp with time zone | これらの統計情報が最後にリセットされた時間 |
pg_stat_databaseビューはクラスタに存在するデータベースごとに1行を持ち、データベース全体の統計情報を示します。
表 27-5. pg_stat_all_tablesビュー
列 | 型 | 説明 |
---|---|---|
relid | oid | テーブルのOID |
schemaname | name | このテーブルが属しているスキーマの名前 |
relname | name | このテーブルの名前 |
seq_scan | bigint | このテーブルで実施されたシーケンシャルスキャンの回数 |
seq_tup_read | bigint | シーケンシャルスキャンによって取得された有効行数 |
idx_scan | bigint | このテーブルで実施されたインデックススキャンの回数 |
idx_tup_fetch | bigint | インデックススキャンによって取得された有効行数 |
n_tup_ins | bigint | 挿入された行数 |
n_tup_upd | bigint | 更新された行数 |
n_tup_del | bigint | 削除された行数 |
n_tup_hot_upd | bigint | HOT更新(例えばインデックスの更新を伴わないもの)された行数 |
n_live_tup | bigint | 有効行の見積もり数 |
n_dead_tup | bigint | 無効行の見積もり数 |
last_vacuum | timestamp with time zone | このテーブルへ最後に実施した手動VACUUMの時間(VACUUM FULLはカウントしません) |
last_autovacuum | timestamp with time zone | このテーブルへ最後に実施した自動VACUUMの時間 |
last_analyze | timestamp with time zone | このテーブルへ最後に実施した手動ANALYZEの時間 |
last_autoanalyze | timestamp with time zone | このテーブルへ最後に実施した自動ANALYZEの時間 |
vacuum_count | bigint | このテーブルへ実施した手動VACUUMの回数(VACUUM FULLはカウントしません) |
autovacuum_count | bigint | このテーブルへ実施した自動VACUUMの回数 |
analyze_count | bigint | このテーブルへ実施した手動ANALYZEの回数 |
autoanalyze_count | bigint | このテーブルへ実施した自動ANALYZEの回数 |
pg_stat_all_tablesビューは、現在のデータベースにある(TOASTテーブルを含む)テーブル毎に1行を持ち、指定したテーブルへのアクセス統計情報を示します。 pg_stat_user_tablesとpg_stat_sys_tablesも同じ情報を含みますが、それぞれユーザテーブルとシステムテーブルの情報のみを示すようフィルタされます。
表 27-6. pg_stat_all_indexesビュー
列 | 型 | 説明 |
---|---|---|
relid | oid | このインデックスを付与しているテーブルのOID |
indexrelid | oid | このインデックスのOID |
schemaname | name | このインデックスが属しているスキーマの名前 |
relname | name | このインデックスを付与しているテーブルの名前 |
indexrelname | name | このインデックスの名前 |
idx_scan | bigint | このインデックスを使って実施されたインデックススキャンの回数 |
idx_tup_read | bigint | このインデックスへのスキャンにより返されたインデックスエントリ数 |
idx_tup_fetch | bigint | このインデックスを用いた単純なインデックススキャンにより取得された有効なテーブルの行数 |
pg_stat_all_indexesビューは、現在のデータベースにあるインデックス毎に1行を持ち、指定したインデックスへのアクセス統計情報を示します。 pg_stat_user_indexesとpg_stat_sys_indexesも同じ情報を含みますが、それぞれユーザインデックスとシステムインデックスの情報のみを示すようフィルタされます。
インデックスは単純なスキャン、または"ビットマップ"インデックススキャン経由で使用することができます。 ビットマップスキャンでは、複数のインデックスの出力をANDまたはOR規則を使って組み合わせることができます。 そのため、ビットマップスキャンが使用されると、個々のヒープ行の取り出しと特定のインデックスとを関連付けることは困難です。 したがって、ビットマップスキャンは使用したインデックスに関するpg_stat_all_indexes.idx_tup_readの数を増やします。 さらに、そのテーブルに関するpg_stat_all_tables.idx_tup_fetchの数も増やします。 しかし、pg_stat_all_indexes.idx_tup_fetchを変更しません。
注意: idx_tup_readはインデックスから取り出したインデックス項目数を数え、一方でidx_tup_fetchはテーブルから取り出した有効な行数を数えるため、 ビットマップスキャンを使用しなくとも、idx_tup_readとidx_tup_fetchの2つの値が異なることはあります。 インデックスを使用して取り出した行に無効または未コミットの行があったり、あるいはインデックスオンリースキャンによりヒープからのフェッチが避けられた場合などは、後者は少なくなります。
表 27-7. pg_statio_all_tablesビュー
列 | 型 | 説明 |
---|---|---|
relid | oid | テーブルのOID |
schemaname | name | このテーブルが属しているスキーマの名前 |
relname | name | このテーブルの名前 |
heap_blks_read | bigint | このテーブルから読み取られたディスクブロック数 |
heap_blks_hit | bigint | このテーブルのバッファヒット数 |
idx_blks_read | bigint | このテーブルに付与されている全てのインデックスから読み取られたディスクブロック数 |
idx_blks_hit | bigint | このテーブルに付与されている全てのインデックスのバッファヒット数 |
toast_blks_read | bigint | このテーブルの(もしあれば)TOASTテーブルから読み取られたディスクブロック数 |
toast_blks_hit | bigint | このテーブルの(もしあれば)TOASTテーブルのバッファヒット数 |
tidx_blks_read | bigint | このテーブルの(もしあれば)TOASTテーブルインデックスから読み取られたディスクブロック数 |
tidx_blks_hit | bigint | このテーブルの(もしあれば)TOASTテーブルインデックスのバッファヒット数 |
pg_statio_all_tablesビューは、現在のデータベースにある(TOASTテーブルを含む)テーブル毎に1行を持ち、指定したテーブルのI/O統計情報を示します。 pg_statio_user_tablesとpg_statio_sys_tablesも同じ情報を含みますが、それぞれユーザテーブルとシステムテーブルの情報のみを示すようフィルタされます。
表 27-8. pg_statio_all_indexesビュー
列 | 型 | 説明 |
---|---|---|
relid | oid | このインデックスが付与されているテーブルのOID |
indexrelid | oid | このインデックスのOID |
schemaname | name | このインデックスが属しているスキーマの名前 |
relname | name | このインデックスが付与されているテーブルの名前 |
indexrelname | name | このインデックスの名前 |
idx_blks_read | bigint | このインデックスから読み取られたディスクブロック数 |
idx_blks_hit | bigint | このインデックスのバッファヒット数 |
pg_statio_all_indexesビューは、現在のデータベースにあるインデックス毎に1行を持ち、指定したインデックスのI/O統計情報を示します。 pg_statio_user_indexesとpg_statio_sys_indexesも同じ情報を含みますが、それぞれユーザインデックスとシステムインデックスの情報のみを示すようフィルタされます。
表 27-9. pg_statio_all_sequencesビュー
列 | 型 | 説明 |
---|---|---|
relid | oid | シーケンスのOID |
schemaname | name | このシーケンスが属しているスキーマの名前 |
relname | name | このシーケンスの名前 |
blks_read | bigint | このシーケンスから読み取られたディスクブロック数 |
blks_hit | bigint | このシーケンスのバッファヒット数 |
pg_statio_all_sequencesビューは、現在のデータベースにあるシーケンス毎に1行を持ち、指定したシーケンスのI/O統計情報を示します。
表 27-10. pg_stat_user_functionsビュー
列 | 型 | 説明 |
---|---|---|
funcid | oid | 関数のOID |
schemaname | name | この関数が属しているスキーマの名前 |
funcname | name | この関数の名前 |
calls | bigint | この関数が呼ばれた回数 |
total_time | double precision | この関数と、この関数から呼ばれた他の関数の総処理時間。単位はミリ秒 |
self_time | double precision | この関数から呼ばれた他の関数は含まない、この関数自身のみの総処理時間。単位はミリ秒 |
pg_stat_user_functionsビューは、追跡された関数毎に1行を持ち、これら関数の実行統計情報を示します。 track_functionsパラメータにより、どの関数を正確に追跡するかを制御できます。
表 27-11. pg_stat_replicationビュー
列 | 型 | 説明 |
---|---|---|
pid | integer | WAL送信プロセスのプロセスID |
usesysid | oid | このWAL送信プロセスのユーザのOID |
usename | name | このWAL送信プロセスのユーザ名 |
application_name | text | このWAL送信プロセスに接続しているアプリケーション名 |
client_addr | inet | このWAL送信プロセスに接続しているクライアントのIPアドレス。もしこの列がNULLならば、クライアントはサーバマシンのUNIXソケット経由での接続であることを示します。 |
client_hostname | text | client_addrのDNS逆引きにより通知される、接続しているクライアントのホスト名。この列はlog_hostnameが有効であり、またIP接続をしている時のみ非NULLとなります。 |
client_port | integer | クライアントがこのWAL送信プロセスと通信を行う際に使用しているTCPポート番号。UNIXソケットが使用されている場合は-1となります。 |
backend_start | timestamp with time zone | このプロセスが開始された時間。つまり、クライアントがWAL送信プロセスに接続した時間です。 |
state | text | 現在のWAL送信状態 |
sent_location | text | この接続上での、最後に送信したトランザクションログの位置 |
write_location | text | このスタンバイサーバで最後にディスクに書かれたトランザクションログの位置 |
flush_location | text | このスタンバイサーバで最後にディスクに同期書き込みされたトランザクションログの位置 |
replay_location | text | このスタンバイサーバで最後に再生されたトランザクションログの位置 |
sync_priority | integer | 同期スタンバイ先に選択されるための、このスタンバイサーバの優先度 |
sync_state | text | このスタンバイサーバの同期状態 |
pg_stat_replicationビューは、WAL送信プロセス毎に1行を持ち、送信プロセスが接続しているスタンバイサーバとのレプリケーション統計情報を示します。 直接接続しているスタンバイサーバの情報のみがリストされ、カスケードされている下流のスタンバイサーバの情報は表示されません。
表 27-12. pg_stat_database_conflictsビュー
列 | 型 | 説明 |
---|---|---|
datid | oid | データベースのOID |
datname | name | このデータベースの名前 |
confl_tablespace | bigint | このデータベースでのテーブルスペース削除によりキャンセルされた問い合わせ数 |
confl_lock | bigint | このデータベースでのロックタイムアウトによりキャンセルされた問い合わせ数 |
confl_snapshot | bigint | このデータベースでの古いスナップショット起因によりキャンセルされた問い合わせ数 |
confl_bufferpin | bigint | このデータベースでのバッファへのピン止め起因によりキャンセルされた問い合わせ数 |
confl_deadlock | bigint | このデータベースでのデッドロックによりキャンセルされた問い合わせ数 |
pg_stat_database_conflictsビューは、データベース毎に1行を持ち、スタンバイサーバでのリカバリとの競合によりキャンセルされた問い合わせについてのデータベース全体の統計情報を示します。 マスタサーバでは競合は発生しないため、このビューはスタンバイサーバでの情報のみを含んでいます。
統計情報を参照する他の方法について、上述の標準ビュー同様に、基礎的な統計情報アクセス関数を使用した問い合わせを作成することで設定できます。 関数の名前などの詳細については、標準ビューの定義を参考にしてください。(例えば、psqlでは\d+ pg_stat_activityで表示させることができます) データベース毎に統計情報へアクセスする関数は、どのデータベースの情報を通知するかを識別するため、データベースのOIDを引数として取ります。 テーブルやインデックス毎の関数であれば、テーブルやインデックスのOIDとなります。関数毎の統計情報用の関数は関数のOIDとなります。 これらの関数では、現在のデータベースにあるテーブル、インデックス、そして関数のみ確認できることに注意してください。
表27-13に、統計情報収集に関連する補助関数を記します。
表 27-13. 補助統計情報関数
関数 | 戻り値の型 | 説明 |
---|---|---|
pg_backend_pid() | integer | 現在のセッションを制御しているサーバプロセスのプロセスID |
pg_stat_get_activity (integer) | setof record | PIDが指定された場合、それに該当するバックエンドの情報のレコード、NULLが指定された場合はシステム上のアクティブな各バックエンドの情報がレコードが返されます。返される情報内容はpg_stat_activityの一部と同じです。 |
pg_stat_clear_snapshot() | void | 現在の統計情報スナップショットを廃棄します。 |
pg_stat_reset() | void | 現在のデータベースに関する統計カウンタすべてをゼロにリセットします(スーパーユーザ権限が必要です)。 |
pg_stat_reset_shared (text) | void | 引数に応じて、いくつかのデータベースクラスタ全体の統計情報カウンタをゼロに戻します(スーパーユーザ権限が必要です)。pg_stat_reset_shared('bgwriter')を呼び出すと、pg_stat_bgwriterビューのカウンタ値すべてがゼロになります。 |
pg_stat_reset_single_table_counters (oid) | void | 現在のデータベース内にある、ひとつのテーブルあるいはインデックスの統計情報をゼロにリセットします(スーパーユーザ権限が必要です)。 |
pg_stat_reset_single_function_counters (oid) | void | 現在のデータベース内にある、ひとつの関数の統計情報をゼロにリセットします(スーパーユーザ権限が必要です)。 |
pg_stat_activityビューの背後で実施されているpg_stat_get_activity
は、各バックエンドに関する全ての有効な情報を含んだ行のセットを返します。
時には単純にこの情報の一部分を得るほうが便利なこともあります。このようなケースでは、表27-14に示されるような、より古いバックエンド毎への統計情報アクセス関数を使うことができます。
これらのアクセス関数は、1から現在活動中のバックエンドの数までの範囲を持つバックエンドIDという数値を使います。pg_stat_get_backend_idset
関数は、これらの関数用にそれぞれのバックエンド用に1つの行を生成する機能を提供します。
全てのバックエンドのPIDと現在の問い合わせを表示する例を示します。
SELECT pg_stat_get_backend_pid(s.backendid) AS pid, pg_stat_get_backend_activity(s.backendid) AS query FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;
表 27-14. バックエンド単位の統計情報関数
関数 | 戻り値の型 | 説明 |
---|---|---|
pg_stat_get_backend_idset() | setof integer | 現在活動中のバックエンドID番号(1から活動中のバックエンド数まで)の集合。 |
pg_stat_get_backend_activity(integer) | text | このバックエンドの最近の問い合わせ |
pg_stat_get_backend_activity_start(integer) | timestamp with time zone | 最近の問い合わせが開始された時間 |
pg_stat_get_backend_client_addr(integer) | inet | このバックエンドに接続しているクライアントのIPアドレス |
pg_stat_get_backend_client_port(integer) | integer | このクライアントが通信に利用しているTCPポート番号 |
pg_stat_get_backend_dbid(integer) | oid | このバックエンドが接続しているデータベースのOID |
pg_stat_get_backend_pid(integer) | integer | このバックエンドのプロセスID |
pg_stat_get_backend_start(integer) | timestamp with time zone | このプロセスが開始された時間 |
pg_stat_get_backend_userid(integer) | oid | このバックエンドにログインしているユーザのOID |
pg_stat_get_backend_waiting(integer) | boolean | このバックエンドがロック待ちかどうか。ロック待ちであれば真。 |
pg_stat_get_backend_xact_start(integer) | timestamp with time zone | 現在のトランザクションが開始された時間 |