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

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

FREEZE

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

VERBOSE

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

ANALYZE

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

table

バキュームする特定のテーブルの名前です (スキーマ修飾名でも可)。デフォルトは全テーブルです。

column

解析の対象とする列名です。デフォルトは全列です。

出力

VACUUM

コマンドの実行に成功しました。

INFO: --Relation table--

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

INFO: 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に関する解析結果です。

INFO: 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に関連する問題から解放され、また、バキュームする必要もなくなります。FREEZE を定常的に使用することは推奨しません。ユーザ定義の template データベースや、完全に読み取り専用で、定常的な VACUUM 管理操作を受けることがないデータベースの準備に関連した使用のみを想定しています。詳細は 管理者用ガイドを参照して下さい。

注釈

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

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

使用方法

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

regression=> VACUUM VERBOSE ANALYZE onek;
INFO:  --Relation onek--
INFO:  Index onek_unique1:Pages 14; Tuples 1000:Deleted 3000.
        CPU 0.00s/0.11u sec elapsed 0.12 sec.
INFO:  Index onek_unique2:Pages 16; Tuples 1000:Deleted 3000.
        CPU 0.00s/0.10u sec elapsed 0.10 sec.
INFO:  Index onek_hundred:Pages 13; Tuples 1000:Deleted 3000.
        CPU 0.00s/0.10u sec elapsed 0.10 sec.
INFO:  Index onek_stringu1:Pages 31; Tuples 1000:Deleted 3000.
        CPU 0.01s/0.09u sec elapsed 0.10 sec.
INFO:  Removed 3000 tuples in 70 pages.
        CPU 0.02s/0.04u sec elapsed 0.07 sec.
INFO:  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.
INFO:  Analyzing onek
VACUUM
   

互換性

SQL92

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