他のバージョンの文書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

VACUUM

Name

VACUUM  --  データベースの不要領域の回収。データベースの解析オプションを持つ。

Synopsis

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

入力

FULL

領域の回収だけでなく、より時間のかかる、テーブルの排他的ロックを行なう、 "完全な"vacuum を選択します。

FREEZE

積極的にタプルの"凍結"を選択します。

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.

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

説明

VACUUM は、削除されたタプルによって占められた領域を回収します。 PostgreSQLの通常動作では、削除されたタプルや更新によって不要となったタプルはテーブルから物理的に削除されません。それらは VACUUMが実行されるまで存在し続けます。そのため、特に更新頻度が多いテーブルでは、VACUUMを定期的に実行する必要があります。

パラメータの指定がない場合、VACUUM は現在のデータベース内のすべてのテーブルを処理します。パラメータで指定した場合、VACUUM は指定したテーブルのみを処理します。

VACUUM ANALYZE は、選択されたテーブルそれぞれに対し、 VACUUMを行ない、その後、ANALYZE を行ないます。この形の組合せは定常的な管理スクリプトにおいて便利なものです。この処理のより詳細に関しては、 ANALYZE を参照して下さい。

(FULLのない)通常のVACUUM は単に領域を回収し、そこを再利用可能な状態に変更します。この形のコマンドは、テーブルへの読み書き操作と並行して実行することができます。VACUUM FULL は、ディスクブロック数を最小にするためのブロックを跨るタプルの移動など、テーブルを縮小させるためにもっと高度な処理を行ないます。この場合、かなり低速になり、また、処理中のテーブルに対する排他的ロックが必要になります。

FREEZE は特別な目的のためのオプションであり、タプルをかなり古くなるまで待つのではなく、できる限り"凍結"状態として印づけます。同一データベースに対するトランザクションが他に開いていない時にこのコマンドが行なわれた場合、データベース内の全タプルが"凍結"状態となることが保証されます。この場合、トランザクションIDに関連する問題から解放され、また、vacuum する必要もなくなります。 FREEZE を定常的に使用することは推奨しません。ユーザ定義の template データベースや、完全に読み取り専用で、定常的なVACUUM管理操作を受けることがないデータベースの準備に関連した使用のみを想定しています。詳細は 管理者ガイドを参照して下さい。

注釈

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

FULL オプションを定常的に使用することは推奨しませんが、これが有用となる、特殊な場合もあります。例えば、テーブル内のほとんどすべての行を削除し、そのテーブルによるディスクの使用量を物理的に縮小させたいような場合です。 VACUUM FULL は大抵の場合、通常のVACUUMよりもテーブルを縮小させます。

使用方法

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

regression=> VACUUM VERBOSE ANALYZE onek;
NOTICE:  --Relation onek--
NOTICE:  Index onek_unique1: Pages 14; Tuples 1000: Deleted 3000.
        CPU 0.00s/0.11u sec elapsed 0.12 sec.
NOTICE:  Index onek_unique2: Pages 16; Tuples 1000: Deleted 3000.
        CPU 0.00s/0.10u sec elapsed 0.10 sec.
NOTICE:  Index onek_hundred: Pages 13; Tuples 1000: Deleted 3000.
        CPU 0.00s/0.10u sec elapsed 0.10 sec.
NOTICE:  Index onek_stringu1: Pages 31; Tuples 1000: Deleted 3000.
        CPU 0.01s/0.09u sec elapsed 0.10 sec.
NOTICE:  Removed 3000 tuples in 70 pages.
        CPU 0.02s/0.04u sec elapsed 0.07 sec.
NOTICE:  Pages 94: Changed 0, Empty 0; Tup 1000: Vac 3000, Keep 0, UnUsed 0.
        Total CPU 0.05s/0.45u sec elapsed 0.59 sec.
NOTICE:  Analyzing onek
VACUUM

互換性

SQL92

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