PostgreSQLは、何らかのコマンドの実行中に進捗状況をレポートする能力があります。
現在、進捗状況のレポートをサポートしているのは、ANALYZE、CLUSTER、CREATE INDEX、VACUUM、および、BASE_BACKUP(すなわち、pg_basebackupがベースバックアップのために発行するレプリケーションコマンド)のみです。
将来的にサポートされるコマンドが拡大される可能性があります。
ANALYZEが実行されているときにはいつでも、pg_stat_progress_analyzeビューには現在コマンドを実行している各バックエンドごとの行が含まれます。
以下の表は、報告される情報を説明し、どのように解釈するかの情報を提供します。
表27.32 pg_stat_progress_analyzeビュー
列 型 説明 |
|---|
バックエンドのプロセスIDです。 |
バックエンドが接続されているデータベースのOIDです。 |
バックエンドが接続されているデータベース名です。 |
解析されているテーブルのOIDです。 |
現在処理中のフェーズです。 表 27.33を参照してください。 |
サンプルされるヒープブロックの総数です。 |
スキャンされたヒープブロックの数です。 |
拡張統計情報の個数です。 |
計算された拡張統計情報の個数です。
このカウンタはフェーズが |
子テーブルの数です。 |
スキャンされた子テーブルの数です。
このカウンタはフェーズが |
現在スキャンされている子テーブルのOIDです。
このフィールドはフェーズが |
表27.33 ANALYZEのフェーズ
| フェーズ | 説明 |
|---|---|
initializing | コマンドはヒープをスキャンし始める準備をしています。 このフェーズは非常に短時間であると予想されます。 |
acquiring sample rows |
コマンドはサンプル行を得るため、relidで指定されたテーブルを現在スキャンしています。
|
acquiring inherited sample rows |
コマンドはサンプル行を得るため、子テーブルを現在スキャンしています。
列child_tables_total、child_tables_done、current_child_table_relidはこのフェーズの進捗情報を含みます。
|
computing statistics | コマンドはテーブルスキャンの間に得られたサンプルから統計情報を計算しています。 |
computing extended statistics | コマンドはテーブルスキャンの間に得られたサンプルから拡張統計情報を計算しています。 |
finalizing analyze |
コマンドはpg_classを更新しています。
このフェーズが完了すれば、ANALYZEは終わります。
|
ANALYZEがパーティションテーブルで実行される場合は、そのパーティションテーブルのすべてもANALYZEに書かれているように再帰的に解析されることに注意してください。
その場合、ANALYZEの進捗はまず親テーブルについて報告され、それによってその継承の統計情報が集められ、各パーティションの報告が続きます。
CREATE INDEXやREINDEXが実行中であるときにはいつでも、pg_stat_progress_create_indexビューには現在インデックスを作成している各バックエンドごとの行が含まれます。
以下の表は、報告される情報を説明し、どのように解釈するかの情報を提供します。
表27.34 pg_stat_progress_create_indexビュー
列 型 説明 |
|---|
バックエンドのプロセスIDです。 |
バックエンドが接続されているデータベースのOIDです。 |
バックエンドが接続されているデータベースの名前です。 |
インデックスが作られているテーブルのOIDです。 |
作成または再作成されているインデックスのOIDです。
同時作成ではない |
実行しているコマンドで、
|
現在処理中のインデックス作成のフェーズです。 表 27.35を参照してください。 |
該当するときに、待機するロック取得者の総数です。 |
既に待機したロック取得者の数です。 |
現在待機しているロック取得者のプロセスIDです。 |
現在のフェーズで処理されることになっているブロックの総数です。 |
現在のフェーズで既に処理されたブロック数です。 |
現在のフェーズで処理されることになっているタプルの総数です。 |
現在のフェーズで既に処理されたタプル数です。 |
パーティションテーブル上のインデックスを作成するとき、この列にはインデックスが作られることになっているパーティションの総数が設定されます。 |
パーティションテーブル上のインデックスを作成するとき、この列にはインデックス作成が既に完了しているパーティションの数が設定されます。 |
表27.35 CREATE INDEXのフェーズ
| フェーズ | 説明 |
|---|---|
initializing |
CREATE INDEXやREINDEXはインデックスを作る準備をしています。
このフェーズはごく短時間になると予想されます。
|
waiting for writers before build |
CREATE INDEX CONCURRENTLYやREINDEX CONCURRENTLYは、潜在的にテーブルを参照するかもしれない書き込みロックを伴うトランザクションが終了するのを待機しています。
本フェーズは同時モードでないときには省かれます。
列lockers_total、lockers_done、および、current_locker_pidには本フェーズの進行情報が入ります。
|
building index |
インデックスがアクセスメソッド固有のコードにより作成されています。
本フェーズでは、進捗レポートをサポートするアクセスメソッドが自身の進捗データを記入し、また、サブフェーズはこの列で示されます。
典型的には、blocks_totalとblocks_doneが、さらにあるいはtuples_totalとtuples_doneも、進捗データを含みます。
|
waiting for writers before validation |
CREATE INDEX CONCURRENTLYやREINDEX CONCURRENTLYは、潜在的にテーブルに書き込みするかもしれない書き込みロックを伴うトランザクションが終了するのを待機しています。
本フェーズは同時モードでないときには省かれます。
列lockers_total、lockers_done、および、current_locker_pidには本フェーズの進行情報が入ります。
|
index validation: scanning index |
CREATE INDEX CONCURRENTLYは確認が必要なタプルに対するインデックス検索をスキャンしています。
本フェーズは同時モードでないときには省かれます。
列blocks_total(インデックスの総サイズが設定される)とblocks_doneに本フェーズの進行情報が入ります。
|
index validation: sorting tuples |
CREATE INDEX CONCURRENTLYはインデックスをスキャンするフェーズ(scanning index)の出力をソートしています。
|
index validation: scanning table |
CREATE INDEX CONCURRENTLYは、前の2フェーズで収集されたインデックスのタプルを確認するためテーブルをスキャンしています。
本フェーズは同時モードでないときには省かれます。
列blocks_total(テーブルの総サイズが設定される)とblocks_doneに本フェーズの進行情報が入ります。
|
waiting for old snapshots |
CREATE INDEX CONCURRENTLYやREINDEX CONCURRENTLYは、潜在的にテーブルを参照するかもしれないトランザクションがそれらのスナップショットを解放するのを待機しています。
本フェーズは同時モードでないときには省かれます。
列lockers_total、lockers_done、および、current_locker_pidには本フェーズの進行情報が入ります。
|
waiting for readers before marking dead |
REINDEX CONCURRENTLYは、古いインデックスに無効と印付けする前に、テーブルへの読み取りロックを伴うトランザクションが終了するのを待機しています。
本フェーズは同時モードでないときには省かれます。
列lockers_total、lockers_done、および、current_locker_pidには本フェーズの進行情報が入ります。
|
waiting for readers before dropping |
REINDEX CONCURRENTLYは、古いインデックスを削除する前に、テーブルへの読み取りロックを伴うトランザクションが終了するのを待機しています。
本フェーズは同時モードでないときには省かれます。
列lockers_total、lockers_done、および、current_locker_pidには本フェーズの進行情報が入ります。
|
VACUUMを実行するときはいつでも、pg_stat_progress_vacuumビューは、現在バキューム処理している(自動バキュームワーカプロセスを含む)それぞれのバックエンドごとに1行を格納します。
以下の表は、報告される情報を説明し、どのように解釈するかの情報を提供します。
VACUUM FULLコマンドの進捗はpg_stat_progress_clusterでレポートされます。これは、通常のVACUUMはテーブル内を書き換えするのみである一方、VACUUM FULLとCLUSTERはいずれもテーブルを再作成するためです。
27.4.4を参照してください。
表27.36 pg_stat_progress_vacuumビュー
列 型 説明 |
|---|
バックエンドのプロセスIDです。 |
バックエンドが接続されているデータベースのOIDです。 |
バックエンドが接続されているデータベースの名前です。 |
バキューム処理が行われているテーブルのOIDです。 |
現在処理しているバキュームのフェーズです。 表 27.37を参照してください。 |
テーブルのヒープブロックの総数です。
この数字は、スキャンの開始を基点としてレポートされます。
後に追加されるブロックは、この |
スキャンされたヒープブロックの数です。
可視性マップがスキャンを最適化するために使用されるため、いくつかのブロックが検査されずに読み飛ばされます。
読み飛ばされたブロックはこの総数に含まれ、そのためこの数字はバキューム処理が完了した時に、最終的に |
バキューム処理されたヒープブロックの数です。
テーブルにインデックスが1つでも存在するなら、このカウンタはフェーズが |
完了したインデックスバキュームサイクルの数です。 |
インデックスバキュームサイクルの実行に必要となる前に格納できる、maintenance_work_memに基づいた、無効なタプルの数です。 |
最後のインデックスバキュームサイクルから収集された無効タプルの数です。 |
表27.37 VACUUMのフェーズ
| フェーズ | 説明 |
|---|---|
initializing |
VACUUMは、ヒープをスキャンし始める準備をしています。
このフェーズは、非常に短時間であると予想されます。
|
scanning heap |
VACUUMは、現在ヒープをスキャン中です。
必要であればそれぞれのページを切り取り、デフラグし、場合によってはフリーズ活動を実行します。
スキャンの進捗状況の監視にheap_blks_scanned列が使用できます。
|
vacuuming indexes |
VACUUMは、現在インデックスをバキューム処理中です。
テーブルにインデックスが存在する場合、ヒープが完全にスキャンされた後に、バキューム実行ごとに少なくとも1回発生します。
maintenance_work_memが、発見された無効タプルの数量を格納するのに不十分な場合は、バキューム実行ごとに複数回発生する可能性があります。
|
vacuuming heap |
VACUUMは、現在ヒープをバキューム処理中です。
ヒープのバキュームは、ヒープのスキャンと異なり、インデックスをバキューム処理するそれぞれのインスタンスの後に発生します。
heap_blks_scannedがheap_blks_totalより少ない場合、システムはこのフェーズの完了後にヒープのスキャン処理に戻ります。
さもなければ、このフェーズの完了後にインデックスの整理を始めます。
|
cleaning up indexes |
VACUUMは、現在インデックスの整理処理中です。
これは、ヒープが完全にスキャンされ、インデックスとヒープが完全にすべてバキューム処理された後に発生します。
|
truncating heap |
VACUUMは、現在リレーションの終点の空のページをオペレーティングシステムに戻すためにヒープを切り詰めています。
これは、インデックスの整理処理後に発生します。
|
performing final cleanup |
VACUUMは、最終クリーンアップ処理をしています。
このフェーズの間、VACUUM空き領域マップをバキュームし、pg_classの統計情報を更新し、統計情報コレクタに統計情報を報告します。
このフェーズが完了した時、VACUUMは終了します。
|
CLUSTERやVACUUM FULLが実行されているときにはいつでも、pg_stat_progress_clusterビューには現在いずれかのコマンドを実行している各バックエンドごとの行が含まれます。
以下の表は、報告される情報を説明し、どのように解釈するかの情報を提供します。
表27.38 pg_stat_progress_clusterビュー
列 型 説明 |
|---|
バックエンドのプロセスIDです。 |
バックエンドが接続されているデータベースのOIDです。 |
バックエンドが接続されているデータベースの名前です。 |
クラスタ化されているテーブルのOIDです。 |
実行しているコマンドです。
|
現在処理しているフェーズです。 表 27.39を参照してください。 |
テーブルがインデックスを使ってスキャンされているのであれば、これは使われているインデックスのOIDで、さもなくばゼロです。 |
スキャンされたヒープタプルの数です。
このカウンタは、フェーズが |
書かれたヒープタプルの数です。
このカウンタは、フェーズが |
テーブル内のヒープブロックの総数です。
この数には |
スキャンされたヒープブロックの数です。
このカウンタは、フェーズが |
インデックス再作成の数です。
このカウンタはフェーズが |
表27.39 CLUSTERとVACUUM FULLのフェーズ
| フェーズ | 説明 |
|---|---|
initializing | コマンドはヒープのスキャンを開始する準備をしています。 本フェーズはごく短時間になると予想されます。 |
seq scanning heap | コマンドは現在、テーブルをシーケンシャルスキャンを使ってスキャンしています。 |
index scanning heap |
CLUSTERは現在、インデックススキャンを使ってテーブルをスキャンしています。
|
sorting tuples |
CLUSTERは現在、タプルをソートしています。
|
writing new heap |
CLUSTERが新しいヒープに書き込んでいます。
|
swapping relation files | コマンドは現在、新たに構築したファイルを置き換えて設置しています。 |
rebuilding index | コマンドは現在、インデックスを再構築しています。 |
performing final cleanup |
コマンドは現在、最終クリーンアップを実行中です。
このフェーズが完了すると、CLUSTERやVACUUM FULLは終了します。
|
pg_basebackupのようなアプリケーションがベースバックアップを取る時はいつでも、pg_stat_progress_basebackupビューには現在BASE_BACKUPレプリケーションコマンドを実行し、バックアップをストリームしている各WAL送信プロセスごとの行が含まれます。
以下の表は、報告される情報を説明し、どのように解釈するかの情報を提供します。
表27.40 pg_stat_progress_basebackupビュー
列 型 説明 |
|---|
WAL送信プロセスのプロセスIDです。 |
現在処理中のフェーズです。 表 27.41を参照してください。 |
ストリームされるデータの総量です。
これは推定され、 |
ストリームされるデータの量です。
このカウンタはフェーズが |
ストリームされるテーブル空間の総数です。 |
ストリームされたテーブル空間の数です。
このカウンタはフェーズが |
表27.41 ベースバックアップのフェーズ
| フェーズ | 説明 |
|---|---|
initializing | WAL送信プロセスはバックアップを開始する準備をしています。 このフェーズはごく短時間になると予想されます。 |
waiting for checkpoint to finish |
WAL送信プロセスは、ベースバックアップを取る準備をするために現在pg_start_backupを実行し、バックアップ開始チェックポイントが完了するのを待っています。
|
estimating backup size | WAL送信プロセスは、ベースバックアップとしてストリームされるデータベースファイルの総量を現在推定しています。 |
streaming database files | WAL送信プロセスはデータベースファイルをベースバックアップとして現在ストリームしています。 |
waiting for wal archiving to finish |
WAL送信プロセスは、バックアップを終了するために現在pg_stop_backupを実行し、ベースバックアップに必要なWALファイルすべてのアーカイブに成功するのを待っています。
pg_basebackupで--wal-method=noneか--wal-method=streamのいずれかが指定されれば、バックアップはこのフェーズが完了したら終了します。
|
transferring wal files |
WAL送信プロセスはバックアップ中に生成されたWALログをすべて現在転送しています。
pg_basebackupで--wal-method=fetchが指定されていれば、このフェーズがwaiting for wal archiving to finishの次に来ます。
バックアップはこのフェーズが完了したら終了します。
|