VACUUM

Name

VACUUM  --  Postgresデータベースの掃除と解析

Synopsis

VACUUM [ VERBOSE ] [ ANALYZE ] [ table ]
VACUUM [ VERBOSE ] ANALYZE [ table [ (column [, ...] ) ] ]
  

入力

VERBOSE

各テーブルについてvacuumの詳細な活動報告を出力します。

ANALYZE

オプティマイザが使用する列統計情報を更新し、問い合わせを実行する最も効率的な方法を決定 できるようにします。

table

掃除の対象とするテーブルの名前で、デフォルトは全テーブルとなっています。

column

解析の対象とするカラムの名前で、デフォルトは全列となっています。

出力

VACUUM

コマンドが受け付けられ、データベースの掃除が完了した時に表示されます。

NOTICE: --Relation table--

tableに 関する報告のヘッダです。

NOTICE: Pages 98: Changed 25, Reapped 74, Empty 0, New 0; Tup 1000: Vac 3000, Crash 0, UnUsed 0, MinLen 188, MaxLen 188; Re-using: Free/Avail. Space 586952/586952; EndEmpty/Avail. Pages 0/74. Elapsed 0/0 sec.

tableに 関する解析結果です。

NOTICE: Index index: Pages 28; Tuples 1000: Deleted 3000. Elapsed 0/0 sec.

対象テーブルのインデックスに関する解析結果です。

説明

Postgresにおいて、VACUUMには 保存領域の回収・確保とオプティマイザ用の情報収集という2つの 用途があります。

VACUUMは、データベース内の全テーブルを開き、 ロールバックされたトランザクションからレコードを掃除し、 システムカタログ内の統計情報を更新します。 保全される統計情報には、タプルの数とすべてのテーブルに 格納されているページ数が含まれます。

VACUUM ANALYZEは各列のデータ分布の統計情報を収集します。この情報は、 問い合わせを実行する経路が複数存在する場合に有用です。

VACUUMを定期的に実行すれば、 データベースの問い合わせの処理速度が向上します。

注釈

開いているデータベースがVACUUMの対象となります。

不要となった行を削除した状態に保つために、実運用状態のデータ ベースに対して毎晩定期的にVACUUMを実行 することを推奨します。巨大なクラスをPostgresに コピーした後や多くのレコードを削除した後に、 VACUUM ANALYZE問い合わせの発行を行なうことを推奨します。 これによりシステムカタログは最近なされた変更の全てを反映したものになり、 Postgresの問い合わせオプティマイザが、問い合わせの 計画作成時により良い選択をできるようになります。

使用方法

下記の例は、regressionデータベース内のテーブルに VACUUMを実行したものです。

regression=> vacuum verbose analyze onek;
NOTICE:  --Relation onek--
NOTICE:  Pages 98: Changed 25, Reapped 74, Empty 0, New 0;
         Tup 1000: Vac 3000, Crash 0, UnUsed 0, MinLen 188, MaxLen 188;
         Re-using: Free/Avail. Space 586952/586952; EndEmpty/Avail. Pages 0/74.
         Elapsed 0/0 sec.
NOTICE:  Index onek_stringu1: Pages 28; Tuples 1000: Deleted 3000. Elapsed 0/0 sec.
NOTICE:  Index onek_hundred: Pages 12; Tuples 1000: Deleted 3000. Elapsed 0/0 sec.
NOTICE:  Index onek_unique2: Pages 19; Tuples 1000: Deleted 3000. Elapsed 0/0 sec.
NOTICE:  Index onek_unique1: Pages 17; Tuples 1000: Deleted 3000. Elapsed 0/0 sec.
NOTICE:  Rel onek: Pages: 98 --> 25; Tuple(s) moved: 1000. Elapsed 0/1 sec.
NOTICE:  Index onek_stringu1: Pages 28; Tuples 1000: Deleted 1000. Elapsed 0/0 sec.
NOTICE:  Index onek_hundred: Pages 12; Tuples 1000: Deleted 1000. Elapsed 0/0 sec.
NOTICE:  Index onek_unique2: Pages 19; Tuples 1000: Deleted 1000. Elapsed 0/0 sec.
NOTICE:  Index onek_unique1: Pages 17; Tuples 1000: Deleted 1000. Elapsed 0/0 sec.
VACUUM
   

互換性

SQL92

SQL92にはVACUUM文はありません。