PostgreSQLは、何らかのコマンドの実行中に進捗状況をレポートする能力があります。
現在、進捗状況のレポートを唯一サポートしているのはVACUUM
です。
将来的にサポートされるコマンドが拡大される可能性があります。
VACUUM
を実行するときはいつでも、pg_stat_progress_vacuum
ビューは、現在バキューム処理している(自動バキュームワーカプロセスを含む)それぞれのバックエンドごとに1行を格納します。
その情報を説明している以下のテーブルにおいて、何がレポートされ、どのように解釈するかについての情報を提供します。
進捗状況のレポートは、現在VACUUM FULL
はサポートされておらず、VACUUM FULL
を実行しているバックエンドはこのビューの一覧に表示されません。
表28.21 pg_stat_progress_vacuum
ビュー
列 | 型 | 説明 |
---|---|---|
pid | integer | バックエンドのプロセスID。 |
datid | oid | このバックエンドが接続されたデータベースのOID。 |
datname | name | このバックエンドが接続されたデータベース名。 |
relid | oid | バキューム処理が行われているテーブルのOID。 |
phase | text | 現在のバキュームの処理フェーズ。表 28.22を参照してください。 |
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.22 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 は終了します。
|