PostgreSQLは、何らかのコマンドの実行中に進捗状況をレポートする能力があります。
現在、進捗状況のレポートをサポートしているのは、ANALYZE
、CLUSTER
、CREATE INDEX
、VACUUM
、COPY
、および、BASE_BACKUP(すなわち、pg_basebackupがベースバックアップのために発行するレプリケーションコマンド)のみです。
将来的にサポートされるコマンドが拡大される可能性があります。
ANALYZE
が実行されているときにはいつでも、pg_stat_progress_analyze
ビューには現在コマンドを実行している各バックエンドごとの行が含まれます。
以下の表は、報告される情報を説明し、どのように解釈するかの情報を提供します。
表28.37 pg_stat_progress_analyze
ビュー
列 型 説明 |
---|
バックエンドのプロセスIDです。 |
バックエンドが接続されているデータベースのOIDです。 |
バックエンドが接続されているデータベース名です。 |
解析されているテーブルのOIDです。 |
現在処理中のフェーズです。 表 28.38を参照してください。 |
サンプルされるヒープブロックの総数です。 |
スキャンされたヒープブロックの数です。 |
拡張統計情報の個数です。 |
計算された拡張統計情報の個数です。
このカウンタはフェーズが |
子テーブルの数です。 |
スキャンされた子テーブルの数です。
このカウンタはフェーズが |
現在スキャンされている子テーブルのOIDです。
このフィールドはフェーズが |
表28.38 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
の進捗はまず親テーブルについて報告され、それによってその継承の統計情報が集められ、各パーティションの報告が続きます。
CLUSTER
やVACUUM FULL
が実行されているときにはいつでも、pg_stat_progress_cluster
ビューには現在いずれかのコマンドを実行している各バックエンドごとの行が含まれます。
以下の表は、報告される情報を説明し、どのように解釈するかの情報を提供します。
表28.39 pg_stat_progress_cluster
ビュー
列 型 説明 |
---|
バックエンドのプロセスIDです。 |
バックエンドが接続されているデータベースのOIDです。 |
バックエンドが接続されているデータベースの名前です。 |
クラスタ化されているテーブルのOIDです。 |
実行しているコマンドです。
|
現在処理しているフェーズです。 表 28.40を参照してください。 |
テーブルがインデックスを使ってスキャンされているのであれば、これは使われているインデックスのOIDで、さもなくばゼロです。 |
スキャンされたヒープタプルの数です。
このカウンタは、フェーズが |
書かれたヒープタプルの数です。
このカウンタは、フェーズが |
テーブル内のヒープブロックの総数です。
この数には |
スキャンされたヒープブロックの数です。
このカウンタは、フェーズが |
インデックス再作成の数です。
このカウンタはフェーズが |
表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 |
コマンドは現在、最終クリーンアップを実行中です。
このフェーズが完了すると、CLUSTER やVACUUM FULL は終了します。
|
COPY
が実行されているときはいつでも、pg_stat_progress_copy
ビューには現在COPY
コマンドを実行している各バックエンドごとの行が含まれます。
以下の表は、報告される情報を説明し、どのように解釈するかの情報を提供します。
表28.41 pg_stat_progress_copy
ビュー
列 型 説明 |
---|
バックエンドのプロセスIDです。 |
バックエンドが接続されているデータベースのOIDです。 |
バックエンドが接続されているデータベースの名前です。 |
|
実行しているコマンドで、
|
データの読み取りまたは書き込みが行われる入出力の種類で、
|
|
|
|
|
CREATE INDEX
やREINDEX
が実行中であるときにはいつでも、pg_stat_progress_create_index
ビューには現在インデックスを作成している各バックエンドごとに1行が含まれます。
以下の表は、報告される情報を説明し、どのように解釈するかの情報を提供します。
表28.42 pg_stat_progress_create_index
ビュー
列 型 説明 |
---|
インデックスを作成するバックエンドのプロセスIDです。 |
バックエンドが接続されているデータベースのOIDです。 |
バックエンドが接続されているデータベースの名前です。 |
インデックスが作られているテーブルのOIDです。 |
作成または再作成されているインデックスのOIDです。
同時作成ではない |
特定のコマンドタイプ: |
現在処理中のインデックス作成のフェーズです。 表 28.43を参照してください。 |
該当するときに、待機するロック取得者の総数です。 |
既に待機したロック取得者の数です。 |
現在待機しているロック取得者のプロセスIDです。 |
現在のフェーズで処理されることになっているブロックの総数です。 |
現在のフェーズで既に処理されたブロック数です。 |
現在のフェーズで処理されることになっているタプルの総数です。 |
現在のフェーズで既に処理されたタプル数です。 |
直接パーティションと間接パーティションの両方を含む、インデックスが作成またはアタッチされるパーティションの総数です。
|
直接パーティションと間接パーティションの両方を含む、インデックスがすでに作成またはアタッチされているパーティションの数です。
|
表28.43 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
はいずれもテーブルを再作成するためです。
28.4.2を参照してください。
表28.44 pg_stat_progress_vacuum
ビュー
列 型 説明 |
---|
バックエンドのプロセスIDです。 |
バックエンドが接続されているデータベースのOIDです。 |
バックエンドが接続されているデータベース名です。 |
バキューム処理が行われているテーブルのOIDです。 |
現在処理しているバキュームのフェーズです。 表 28.45を参照してください。 |
テーブルのヒープブロックの総数です。
この数字は、スキャンの開始を基点としてレポートされます。
後に追加されるブロックは、この |
スキャンされたヒープブロックの数です。
可視性マップがスキャンを最適化するために使用されるため、いくつかのブロックが検査されずに読み飛ばされます。
読み飛ばされたブロックはこの総数に含まれ、そのためこの数字はバキューム処理が完了した時に、最終的に |
バキューム処理されたヒープブロックの数です。
テーブルにインデックスが1つでも存在するなら、このカウンタはフェーズが |
完了したインデックスバキュームサイクルの数です。 |
インデックスバキュームサイクルの実行に必要となる前に格納できる、maintenance_work_memに基づいた、無効なタプルの数です。 |
最後のインデックスバキュームサイクルから収集された無効タプルの数です。 |
表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_scanned がheap_blks_total より少ない場合、システムはこのフェーズの完了後にヒープのスキャン処理に戻ります。
さもなければ、このフェーズの完了後にインデックスの整理を始めます。
|
cleaning up indexes |
VACUUM は、現在インデックスの整理処理中です。
これは、ヒープが完全にスキャンされ、インデックスとヒープが完全にすべてバキューム処理された後に発生します。
|
truncating heap |
VACUUM は、現在リレーションの終点の空のページをオペレーティングシステムに戻すためにヒープを切り詰めています。
これは、インデックスの整理処理後に発生します。
|
performing final cleanup |
VACUUM は最終クリーンアップを実行しています。
このフェーズ中に、VACUUM は空き領域マップをバキュームし、pg_class 内の統計を更新し、累積統計システムに統計を報告します。
このフェーズが完了すると、VACUUM は終了します。
|
pg_basebackupのようなアプリケーションがベースバックアップを取る時はいつでも、pg_stat_progress_basebackup
ビューには現在BASE_BACKUP
レプリケーションコマンドを実行し、バックアップをストリームしている各WAL送信プロセスごとの行が含まれます。
以下の表は、報告される情報を説明し、どのように解釈するかの情報を提供します。
表28.46 pg_stat_progress_basebackup
ビュー
列 型 説明 |
---|
WAL送信プロセスのプロセスIDです。 |
現在処理中のフェーズです。 表 28.47を参照してください。 |
ストリームされるデータの総量です。
これは推定され、 |
ストリームされるデータの量です。
このカウンタはフェーズが |
ストリームされるテーブル空間の総数です。 |
ストリームされたテーブル空間の数です。
このカウンタはフェーズが |
表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 の次に来ます。
バックアップはこのフェーズが完了したら終了します。
|