PostgreSQL 8.0.0 文書
前のページ | 巻戻し |  | 早送り | 次のページ

# 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

前のページ | ホーム | 次のページ
UPDATE | 上に戻る | PostgreSQL クライアントアプリケーション