VACUUM

名前

VACUUM -- データベースの不要領域の回収、およびオプションによるデータベースの解析

概要

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

説明

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

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

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

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

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

パラメータ

FULL

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

FREEZE

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

VERBOSE

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

ANALYZE

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

table

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

column

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

出力

VERBOSE が指定された場合、VACUUM は、現在処理中のテーブルが何かを示す進行状況メッセージを表示します。 テーブルについての各種の統計情報も同様に表示されます。

注釈

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

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

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

regression=# VACUUM VERBOSE ANALYZE onek;
INFO:  vacuuming "public.onek"
INFO:  index "onek_unique1" now contains 1000 tuples in 14 pages
DETAIL:  3000 index tuples were removed.
0 index pages have been deleted, 0 are currently reusable.
CPU 0.01s/0.08u sec elapsed 0.18 sec.
INFO:  index "onek_unique2" now contains 1000 tuples in 16 pages
DETAIL:  3000 index tuples were removed.
0 index pages have been deleted, 0 are currently reusable.
CPU 0.00s/0.07u sec elapsed 0.23 sec.
INFO:  index "onek_hundred" now contains 1000 tuples in 13 pages
DETAIL:  3000 index tuples were removed.
0 index pages have been deleted, 0 are currently reusable.
CPU 0.01s/0.08u sec elapsed 0.17 sec.
INFO:  index "onek_stringu1" now contains 1000 tuples in 48 pages
DETAIL:  3000 index tuples were removed.
0 index pages have been deleted, 0 are currently reusable.
CPU 0.01s/0.09u sec elapsed 0.59 sec.
INFO:  "onek": removed 3000 tuples in 108 pages
DETAIL:  CPU 0.01s/0.06u sec elapsed 0.07 sec.
INFO:  "onek": found 3000 removable, 1000 nonremovable tuples in 143 pages
DETAIL:  0 dead tuples cannot be removed yet.
There were 0 unused item pointers.
0 pages are entirely empty.
CPU 0.07s/0.39u sec elapsed 1.56 sec.
INFO:  analyzing "public.onek"
INFO:  "onek": 36 pages, 1000 rows sampled, 1000 estimated total rows
VACUUM

互換性

標準 SQL には VACUUM 文はありません。

関連項目

vacuumdb