★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.4. 進捗状況のレポート #

PostgreSQLは、何らかのコマンドの実行中に進捗状況をレポートする能力があります。 現在、進捗状況のレポートをサポートしているのは、ANALYZECLUSTERCREATE INDEXVACUUMCOPY、および、BASE_BACKUP(すなわち、pg_basebackupがベースバックアップのために発行するレプリケーションコマンド)のみです。 将来的にサポートされるコマンドが拡大される可能性があります。

28.4.1. ANALYZEの進捗状況のレポート #

ANALYZEが実行されているときにはいつでも、pg_stat_progress_analyzeビューには現在コマンドを実行している各バックエンドごとの行が含まれます。 以下の表は、報告される情報を説明し、どのように解釈するかの情報を提供します。

表28.37 pg_stat_progress_analyzeビュー

列 型

説明

pid integer

バックエンドのプロセスIDです。

datid oid

バックエンドが接続されているデータベースのOIDです。

datname name

バックエンドが接続されているデータベース名です。

relid oid

解析されているテーブルのOIDです。

phase text

現在処理中のフェーズです。 表 28.38を参照してください。

sample_blks_total bigint

サンプルされるヒープブロックの総数です。

sample_blks_scanned bigint

スキャンされたヒープブロックの数です。

ext_stats_total bigint

拡張統計情報の個数です。

ext_stats_computed bigint

計算された拡張統計情報の個数です。 このカウンタはフェーズがcomputing extended statisticsの時にのみ増加します。

child_tables_total bigint

子テーブルの数です。

child_tables_done bigint

スキャンされた子テーブルの数です。 このカウンタはフェーズがacquiring inherited sample rowsの時にのみ増加します。

current_child_table_relid oid

現在スキャンされている子テーブルのOIDです。 このフィールドはフェーズがacquiring inherited sample rowsの時のみ有効です。


表28.38 ANALYZEのフェーズ

フェーズ説明
initializing コマンドはヒープをスキャンし始める準備をしています。 このフェーズは非常に短時間であると予想されます。
acquiring sample rows コマンドはサンプル行を得るため、relidで指定されたテーブルを現在スキャンしています。
acquiring inherited sample rows コマンドはサンプル行を得るため、子テーブルを現在スキャンしています。 列child_tables_totalchild_tables_donecurrent_child_table_relidはこのフェーズの進捗情報を含みます。
computing statistics コマンドはテーブルスキャンの間に得られたサンプルから統計情報を計算しています。
computing extended statistics コマンドはテーブルスキャンの間に得られたサンプルから拡張統計情報を計算しています。
finalizing analyze コマンドはpg_classを更新しています。 このフェーズが完了すれば、ANALYZEは終わります。

注記

ANALYZEがパーティションテーブルで実行される場合は、そのパーティションテーブルのすべても再帰的に解析されることに注意してください。 その場合、ANALYZEの進捗はまず親テーブルについて報告され、それによってその継承の統計情報が集められ、各パーティションの報告が続きます。

28.4.2. CLUSTERの進捗状況のレポート #

CLUSTERVACUUM FULLが実行されているときにはいつでも、pg_stat_progress_clusterビューには現在いずれかのコマンドを実行している各バックエンドごとの行が含まれます。 以下の表は、報告される情報を説明し、どのように解釈するかの情報を提供します。

表28.39 pg_stat_progress_clusterビュー

列 型

説明

pid integer

バックエンドのプロセスIDです。

datid oid

バックエンドが接続されているデータベースのOIDです。

datname name

バックエンドが接続されているデータベースの名前です。

relid oid

クラスタ化されているテーブルのOIDです。

command text

実行しているコマンドです。 CLUSTERVACUUM FULLのいずれかです。

phase text

現在処理しているフェーズです。 表 28.40を参照してください。

cluster_index_relid oid

テーブルがインデックスを使ってスキャンされているのであれば、これは使われているインデックスのOIDで、さもなくばゼロです。

heap_tuples_scanned bigint

スキャンされたヒープタプルの数です。 このカウンタは、フェーズがseq scanning heapindex scanning heap、または、writing new heapであるときのみ増加します。

heap_tuples_written bigint

書かれたヒープタプルの数です。 このカウンタは、フェーズがseq scanning heapindex scanning heap、または、writing new heapであるときのみ増加します。

heap_blks_total bigint

テーブル内のヒープブロックの総数です。 この数にはseq scanning heapの開始時の値が報告されます。

heap_blks_scanned bigint

スキャンされたヒープブロックの数です。 このカウンタは、フェーズがseq scanning heapであるときのみ増加します。

index_rebuild_count bigint

インデックス再作成の数です。 このカウンタはフェーズがrebuilding indexであるときのみ増加します。


表28.40 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 コマンドは現在、最終クリーンアップを実行中です。 このフェーズが完了すると、CLUSTERVACUUM FULLは終了します。

28.4.3. COPYの進捗状況のレポート #

COPYが実行されているときはいつでも、pg_stat_progress_copyビューには現在COPYコマンドを実行している各バックエンドごとの行が含まれます。 以下の表は、報告される情報を説明し、どのように解釈するかの情報を提供します。

表28.41 pg_stat_progress_copyビュー

列 型

説明

pid integer

バックエンドのプロセスIDです。

datid oid

バックエンドが接続されているデータベースのOIDです。

datname name

バックエンドが接続されているデータベースの名前です。

relid oid

COPYコマンドが実行されるテーブルのOIDです。 SELECT問い合わせからコピーする場合は0に設定されます。

command text

実行しているコマンドで、 COPY FROMまたはCOPY TOです。

type text

データの読み取りまたは書き込みが行われる入出力の種類で、 FILEPROGRAMPIPECOPY FROM STDINおよびCOPY TO STDOUT用)、 またはCALLBACK(たとえば、論理レプリケーションの初期テーブル同期中に使用されます)です。

bytes_processed bigint

COPYコマンドで既に処理されたバイト数です。

bytes_total bigint

COPY FROMコマンドのコピー元ファイルのバイト数でのサイズです。 利用できない場合は0に設定されます。

tuples_processed bigint

COPYコマンドで既に処理されたタプル数です。

tuples_excluded bigint

COPYコマンドのWHERE句で除外されたために処理されなかったタプル数です。


28.4.4. CREATE INDEXの進捗状況のレポート #

CREATE INDEXREINDEXが実行中であるときにはいつでも、pg_stat_progress_create_indexビューには現在インデックスを作成している各バックエンドごとに1行が含まれます。 以下の表は、報告される情報を説明し、どのように解釈するかの情報を提供します。

表28.42 pg_stat_progress_create_indexビュー

列 型

説明

pid integer

インデックスを作成するバックエンドのプロセスIDです。

datid oid

バックエンドが接続されているデータベースのOIDです。

datname name

バックエンドが接続されているデータベースの名前です。

relid oid

インデックスが作られているテーブルのOIDです。

index_relid oid

作成または再作成されているインデックスのOIDです。 同時作成ではないCREATE INDEXのときは、これは0です。

command text

特定のコマンドタイプ:CREATE INDEXCREATE INDEX CONCURRENTLYREINDEX、またはREINDEX CONCURRENTLYです。

phase text

現在処理中のインデックス作成のフェーズです。 表 28.43を参照してください。

lockers_total bigint

該当するときに、待機するロック取得者の総数です。

lockers_done bigint

既に待機したロック取得者の数です。

current_locker_pid bigint

現在待機しているロック取得者のプロセスIDです。

blocks_total bigint

現在のフェーズで処理されることになっているブロックの総数です。

blocks_done bigint

現在のフェーズで既に処理されたブロック数です。

tuples_total bigint

現在のフェーズで処理されることになっているタプルの総数です。

tuples_done bigint

現在のフェーズで既に処理されたタプル数です。

partitions_total bigint

直接パーティションと間接パーティションの両方を含む、インデックスが作成またはアタッチされるパーティションの総数です。 0は、REINDEX中またはインデックスがパーティション化されていない場合です。

partitions_done bigint

直接パーティションと間接パーティションの両方を含む、インデックスがすでに作成またはアタッチされているパーティションの数です。 0は、REINDEX中またはインデックスがパーティション化されていない場合です。


表28.43 CREATE INDEXのフェーズ

フェーズ説明
initializing CREATE INDEXREINDEXはインデックスを作る準備をしています。 このフェーズはごく短時間になると予想されます。
waiting for writers before build CREATE INDEX CONCURRENTLYREINDEX CONCURRENTLYは、潜在的にテーブルを参照するかもしれない書き込みロックを伴うトランザクションが終了するのを待機しています。 本フェーズは同時モードでないときには省かれます。 列lockers_totallockers_done、および、current_locker_pidには本フェーズの進行情報が入ります。
building index インデックスがアクセスメソッド固有のコードにより作成されています。 本フェーズでは、進捗レポートをサポートするアクセスメソッドが自身の進捗データを記入し、また、サブフェーズはこの列で示されます。 典型的には、blocks_totalblocks_doneが、さらにあるいはtuples_totaltuples_doneも、進捗データを含みます。
waiting for writers before validation CREATE INDEX CONCURRENTLYREINDEX CONCURRENTLYは、潜在的にテーブルに書き込みするかもしれない書き込みロックを伴うトランザクションが終了するのを待機しています。 本フェーズは同時モードでないときには省かれます。 列lockers_totallockers_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 CONCURRENTLYREINDEX CONCURRENTLYは、潜在的にテーブルを参照するかもしれないトランザクションがそれらのスナップショットを解放するのを待機しています。 本フェーズは同時モードでないときには省かれます。 列lockers_totallockers_done、および、current_locker_pidには本フェーズの進行情報が入ります。
waiting for readers before marking dead REINDEX CONCURRENTLYは、古いインデックスに無効と印付けする前に、テーブルへの読み取りロックを伴うトランザクションが終了するのを待機しています。 本フェーズは同時モードでないときには省かれます。 列lockers_totallockers_done、および、current_locker_pidには本フェーズの進行情報が入ります。
waiting for readers before dropping REINDEX CONCURRENTLYは、古いインデックスを削除する前に、テーブルへの読み取りロックを伴うトランザクションが終了するのを待機しています。 本フェーズは同時モードでないときには省かれます。 列lockers_totallockers_done、および、current_locker_pidには本フェーズの進行情報が入ります。

28.4.5. VACUUMの進捗状況のレポート #

VACUUMを実行するときはいつでも、pg_stat_progress_vacuumビューは、現在バキューム処理している(自動バキュームワーカープロセスを含む)それぞれのバックエンドごとに1行含まれます。 以下の表は、報告される情報を説明し、どのように解釈するかの情報を提供します。 VACUUM FULLコマンドの進捗はpg_stat_progress_clusterでレポートされます。これは、通常のVACUUMはテーブル内を書き換えするのみである一方、VACUUM FULLCLUSTERはいずれもテーブルを再作成するためです。 28.4.2を参照してください。

表28.44 pg_stat_progress_vacuumビュー

列 型

説明

pid integer

バックエンドのプロセスIDです。

datid oid

バックエンドが接続されているデータベースのOIDです。

datname name

バックエンドが接続されているデータベース名です。

relid oid

バキューム処理が行われているテーブルのOIDです。

phase text

現在処理しているバキュームのフェーズです。 表 28.45を参照してください。

heap_blks_total bigint

テーブルのヒープブロックの総数です。 この数字は、スキャンの開始を基点としてレポートされます。 後に追加されるブロックは、このVACUUMによって処理されません(必要もありません)。

heap_blks_scanned bigint

スキャンされたヒープブロックの数です。 可視性マップがスキャンを最適化するために使用されるため、いくつかのブロックが検査されずに読み飛ばされます。 読み飛ばされたブロックはこの総数に含まれ、そのためこの数字はバキューム処理が完了した時に、最終的にheap_blks_totalと同じになります。 このカウンタは、フェーズがscanning heapの時にのみ増加します。

heap_blks_vacuumed bigint

バキューム処理されたヒープブロックの数です。 テーブルにインデックスが1つでも存在するなら、このカウンタはフェーズがvacuuming heapの時にのみ増加します。 無効なタプルが含まれていないブロックは読み飛ばされ、それゆえカウンタは時々大きな増加量で早送りされます。

index_vacuum_count bigint

完了したインデックスバキュームサイクルの数です。

max_dead_tuples bigint

インデックスバキュームサイクルの実行に必要となる前に格納できる、maintenance_work_memに基づいた、無効なタプルの数です。

num_dead_tuples bigint

最後のインデックスバキュームサイクルから収集された無効タプルの数です。


表28.45 VACUUMのフェーズ

フェーズ説明
initializing VACUUMは、ヒープをスキャンし始める準備をしています。 このフェーズは、非常に短時間であると予想されます。
scanning heap VACUUMは、現在ヒープをスキャン中です。 必要であればそれぞれのページを切り取り、デフラグし、場合によってはフリーズ活動を実行します。 スキャンの進捗状況の監視にheap_blks_scanned列が使用できます。
vacuuming indexes VACUUMは、現在インデックスをバキューム処理中です。 テーブルにインデックスが存在する場合、ヒープが完全にスキャンされた後に、バキューム実行ごとに少なくとも1回発生します。 maintenance_work_memが、発見された無効タプルの数量を格納するのに不十分な場合(または、自動バキュームの場合はautovacuum_work_memが設定されている場合)は、バキューム実行ごとに複数回発生する可能性があります。
vacuuming heap VACUUMは、現在ヒープをバキューム処理中です。 ヒープのバキュームは、ヒープのスキャンと異なり、インデックスをバキューム処理するそれぞれのインスタンスの後に発生します。 heap_blks_scannedheap_blks_totalより少ない場合、システムはこのフェーズの完了後にヒープのスキャン処理に戻ります。 さもなければ、このフェーズの完了後にインデックスの整理を始めます。
cleaning up indexes VACUUMは、現在インデックスの整理処理中です。 これは、ヒープが完全にスキャンされ、インデックスとヒープが完全にすべてバキューム処理された後に発生します。
truncating heap VACUUMは、現在リレーションの終点の空のページをオペレーティングシステムに戻すためにヒープを切り詰めています。 これは、インデックスの整理処理後に発生します。
performing final cleanup VACUUMは最終クリーンアップを実行しています。 このフェーズ中に、VACUUMは空き領域マップをバキュームし、pg_class内の統計を更新し、累積統計システムに統計を報告します。 このフェーズが完了すると、VACUUMは終了します。

28.4.6. ベースバックアップの進捗状況のレポート #

pg_basebackupのようなアプリケーションがベースバックアップを取る時はいつでも、pg_stat_progress_basebackupビューには現在BASE_BACKUPレプリケーションコマンドを実行し、バックアップをストリームしている各WAL送信プロセスごとの行が含まれます。 以下の表は、報告される情報を説明し、どのように解釈するかの情報を提供します。

表28.46 pg_stat_progress_basebackupビュー

列 型

説明

pid integer

WAL送信プロセスのプロセスIDです。

phase text

現在処理中のフェーズです。 表 28.47を参照してください。

backup_total bigint

ストリームされるデータの総量です。 これは推定され、streaming database filesフェーズの最初に報告されます。 データベースはstreaming database filesフェーズの間に変化するかもしれませんし、WALログが後ほどバックアップに含められますので、これは近似でしかないことに注意してください。 ストリームされたデータ量が推定された総量を超えたら、これは常にbackup_streamedと同じ値です。 pg_basebackupで推定が無効にされて(すなわち、--no-estimate-sizeオプションが指定されて)いれば、NULLです。

backup_streamed bigint

ストリームされるデータの量です。 このカウンタはフェーズがstreaming database filesまたはtransferring wal filesの時にのみ増加します。

tablespaces_total bigint

ストリームされるテーブル空間の総数です。

tablespaces_streamed bigint

ストリームされたテーブル空間の数です。 このカウンタはフェーズがstreaming database filesの時にのみ増加します。


表28.47 ベースバックアップのフェーズ

フェーズ説明
initializing WAL送信プロセスはバックアップを開始する準備をしています。 このフェーズはごく短時間になると予想されます。
waiting for checkpoint to finish WAL送信プロセスは、ベースバックアップを取る準備をするために現在pg_backup_startを実行し、バックアップ開始チェックポイントが完了するのを待っています。
estimating backup size WAL送信プロセスは、ベースバックアップとしてストリームされるデータベースファイルの総量を現在推定しています。
streaming database files WAL送信プロセスはデータベースファイルをベースバックアップとして現在ストリームしています。
waiting for wal archiving to finish WAL送信プロセスは現在pg_backup_stopを実行してバックアップを終了しており、ベースバックアップに必要なすべての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の次に来ます。 バックアップはこのフェーズが完了したら終了します。