VACUUM

Name

VACUUM -- Postgres データベースのゴミ掃除と解析 を行なう。

Synopsis

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

入力

VERBOSE

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

ANALYZE

オブティマイザが問い合わせの実行に最も効率的な方法を決 定する際に使用するカラムの統計情報を更新します。統計情 報は各カラム内のデータの分布状況を表すものです。この情報は 複数の実行経路があり得る時に重要なものです。

table

vacuum の対象とするテーブルの名前。デフォルトは全テー ブルです。

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 を定期的に実行すれば、データ ベースに対するユーザからの問い合わせの処理速度が向上します。

注意

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

統計情報を相対的に見て現時点のものを維持しているといえる状態 にしておくために、実際に運用されているデータベースを毎晩ゴミ 掃除しておくことをお勧めします。しかし、 VACUUM はいつ行なわれても構いません。特に 大きなクラスを Postgres にコピーし た後や多くのレコードを削除した後の VACUUM の発行を行なうことはおそらく良いことでしょう。これによりシス テムカタログは最近なされた変更の全てを反映したものになり、そ して、Postgres の問い合わせオプテ ィマイザがユーザ問い合わせの計画作成時により良い選択をできる ようになります。

VACUUM コマンド実行中にサーバが壊れた場合、 偶然にロックファイルが待ち状態のまま残ってしまうことがありま す。VACUUM コマンドを再実行しようとしても、 ロックファイルの作成についてのエラーメッセージが表示されるこ とになります。VACUUM 実行中でないことを確 認してから、データベースディレクトリの pg_vlock ファイル(つまり PGDATA/base/dbname/pg_vlock )を削除して下さい。

使用法

以下の例は、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 文はありません。