他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 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

vacuumdb

vacuumdbPostgreSQLデータベースの不要領域の回収と解析を行う

概要

vacuumdb [connection-option...] [option...] [ -t | --table table [( column [,...] )] ] ... [dbname]

vacuumdb [connection-option...] [option...] [ [ -n | --schema schema ] | [ -N | --exclude-schema schema ] ] ... [dbname]

vacuumdb [connection-option...] [option...] -a | --all

説明

vacuumdbは、PostgreSQLデータベースの不要領域のクリーンアップを行うユーティリティです。 また、vacuumdbPostgreSQLの問い合わせオプティマイザが使用する内部的な統計情報も生成します。

vacuumdbは、SQLコマンドVACUUMのラッパーです。 このユーティリティを使っても、これ以外の方法でサーバにアクセスしてバキュームや解析を行っても特に違いは生じません。

オプション

vacuumdbでは、下記のコマンドライン引数を指定できます。

-a
--all

全てのデータベースに対してバキュームを行います。

--buffer-usage-limit size

vacuumdbの指定された呼び出しに対してバッファアクセスストラテジリングバッファサイズを指定します。 このサイズは、このストラテジのパートとして再利用される共有バッファの数を計算するために使用されます。 VACUUMを参照してください。

[-d] dbname
[--dbname=]dbname

-a(または--all)も指定されていない場合、不要領域のクリーンアップ、または、解析を行うデータベース名を指定します。 データベース名が指定されていない場合は、データベース名は環境変数PGDATABASEから読み取られます。 この変数も設定されていない場合は、接続時に指定したユーザ名が使用されます。 dbname接続文字列に出来ます。その場合、接続文字列パラメータは競合するコマンドラインオプションを上書きします。

--disable-page-skipping

可視性マップの内容に基づいてページを飛ばすことのないようにします。

-e
--echo

vacuumdbが生成し、サーバに送るコマンドをエコー表示します。

-f
--full

完全な(full)クリーンアップを行います。

-F
--freeze

積極的にタプルを凍結します。

--force-index-cleanup

無効なタプルを指しているインデックスエントリを常に削除します。

-j njobs
--jobs=njobs

njobs個のコマンドを同時に実行することで、vacuumまたはanalyzeコマンドを並列で実行します。このオプションは処理時間を短縮することもありますがデータベースサーバの負荷も増加します。

vacuumdbはデータベースに対するnjobs個の接続を開くので、max_connectionsの設定が、これらの接続を許容するだけ十分に大きくしてください。

このモードを-fFULL)オプションと一緒に使うと、一部のシステムカタログが並列処理されてデッドロックのエラーを起こす場合があることに注意してください。

--min-mxid-age mxid_age

マルチトランザクションIDの年代が少なくともmxid_ageであるテーブルに対してのみ、バキュームもしくは解析コマンドを実行します。 この設定は、マルチトランザクションIDの周回を防ぐためテーブルに優先順位を付けて処理するのに有用です(25.1.5.1を参照してください)。

このオプションの目的のため、リレーションのマルチトランザクションIDの年代は、主であるリレーションの年代と、存在するなら、関連するTOASTテーブルの年代のうち最大のものです。 vacuumdbにより発行されたコマンドも、必要であればリレーションのTOASTテーブルを処理しますので、別々に分けて考える必要はないです。

--min-xid-age xid_age

トランザクションIDの年代が少なくともxid_ageであるテーブルに対してのみ、バキュームもしくは解析コマンドを実行します。 この設定は、トランザクションIDの周回を防ぐためテーブルに優先順位を付けて処理するのに有用です(25.1.5を参照してください)。

このオプションの目的のため、リレーションのトランザクションIDの年代は、主であるリレーションの年代と、存在するなら、関連するTOASTテーブルの年代のうち最大のものです。 vacuumdbにより発行されたコマンドも、必要であればリレーションのTOASTテーブルを処理しますので、別々に分けて考える必要はないです。

-n schema
--schema=schema

schema内のすべてのテーブルのみをクリーンアップまたは解析します。 -nスイッチを複数記述することで複数のスキーマをバキュームできます。

-N schema
--exclude-schema=schema

schema内のテーブルをクリーンアップまたは解析しません。 -Nスイッチを複数記述することで複数のスキーマを除外できます。

--no-index-cleanup

無効なタプルを指しているインデックスエントリを削除しません。

--no-process-main

主リレーションをスキップします。

--no-process-toast

もし存在するなら、バキュームするテーブルに関連するTOASTテーブルをスキップします。

--no-truncate

テーブルの終わりにある空のページを切り詰めません。

-P parallel_workers
--parallel=parallel_workers

並列バキュームのためのパラレルワーカーの数を指定します。 これによりバキュームが複数CPUを活用してインデックスを処理できます。 VACUUMを参照してください。

-q
--quiet

進行メッセージを表示しません。

--skip-locked

処理のためにすぐにロックできないリレーションをスキップします。

-t table [ (column [,...]) ]
--table=table [ (column [,...]) ]

tableのみをクリーンアップ/解析します。 列名は--analyze--analyze-onlyオプションがある場合にのみ設定できます。 複数の-tスイッチを記述することで複数のテーブルをバキュームすることができます。

ヒント

列を指定する場合は、シェルから括弧をエスケープする必要があるでしょう (後述の例を参照してください)。

-v
--verbose

処理中に詳細な情報を表示します。

-V
--version

vacuumdbのバージョンを表示し、終了します。

-z
--analyze

オプティマイザが使用する、データベースの統計情報も算出します。

-Z
--analyze-only

オプティマイザにより使用される統計情報の計算のみを行います(バキュームを行いません)。

--analyze-in-stages

--analyze-onlyと同様、オプティマイザにより使用される統計情報の計算のみを行います(バキュームを行いません)。 分析の3つの段階を実行します。 最初の段階では、使用可能な統計情報をより迅速に生成するために最小の統計情報目標値(default_statistics_targetを参照)を使い、後続のステージでは完全な統計情報を構築します。

このオプションは、統計情報を現在持たないデータベースや、完全に誤った統計情報を持つデータベースを解析する場合にのみ有用です。 例えば、リストアされたダンプやpg_upgradeによって新たにデータが生成された場合などです。 統計情報が既にあるデータベースに対してこのオプションで実行すると、初期段階の統計情報目標値が低いため、問い合わせオプティマイザの選択が一時的に悪化する可能性があることに注意してください。

-?
--help

vacuumdbのコマンドライン引数の使用方法を表示し、終了します。

vacuumdbには、以下に記す接続パラメータ用のコマンドライン引数も指定することもできます。

-h host
--host=host

サーバが稼働しているマシンのホスト名を指定します。 ホスト名がスラッシュから始まる場合、Unixドメインソケット用のディレクトリとして使用されます。

-p port
--port=port

サーバが接続を監視するTCPポートもしくはUnixドメインソケットファイルの拡張子を指定します。

-U username
--username=username

接続するユーザ名を指定します。

-w
--no-password

パスワードの入力を促しません。 サーバがパスワード認証を必要とし、かつ、.pgpassファイルなどの他の方法が利用できない場合、接続試行は失敗します。 バッチジョブやスクリプトなどパスワードを入力するユーザが存在しない場合にこのオプションは有用かもしれません。

-W
--password

データベースに接続する前に、vacuumdbは強制的にパスワード入力を促します。

サーバがパスワード認証を要求する場合vacuumdbは自動的にパスワード入力を促しますので、これが重要になることはありません。 しかし、vacuumdbは、サーバにパスワードが必要かどうかを判断するための接続試行を無駄に行います。 こうした余計な接続試行を防ぐために-Wの入力が有意となる場合もあります。

--maintenance-db=dbname

-a(または--all)が指定されている時、どのデータベースをバキュームしなければならないかを見つけ出すために接続するデータベースの名前を指定します。 データベース名が指定されていなければpostgresデータベースが使用され、もし存在しなければtemplate1が使用されます。 これは接続文字列に出来ます。 その場合、接続文字列パラメータは競合するコマンドラインオプションを上書きします。 また、データベース名以外の接続文字列パラメータは他のデータベースに接続する時に再利用されます。

環境

PGDATABASE
PGHOST
PGPORT
PGUSER

デフォルトの接続パラメータです。

PG_COLOR

診断メッセージで色を使うかどうかを指定します。 可能な値はalwaysautoneverです。

また、このユーティリティは、他のほとんどのPostgreSQLユーティリティと同様、libpqでサポートされる環境変数を使用します(34.15を参照してください)。

診断

問題が発生した場合、考えられる原因とエラーメッセージについての説明はVACUUMpsqlを参照してください。 データベースサーバは、指定したホストで稼働している必要があります。 また、libpqフロントエンドライブラリのデフォルトの設定や環境変数が適用されることに注意してください。

注釈

vacuumdbの実行中にはPostgreSQLサーバに何度も接続しなければならないことがありますが、この場合その度にパスワードが必要です。 そのような場合は~/.pgpassファイルを用意しておくと便利です。 詳細は34.16を参照してください。

testというデータベースをクリーンアップするには、下記のコマンドを実行します。

$ vacuumdb test

bigdbという名前のデータベースのクリーンアップとオプティマイザ用の解析を行う場合には、下記のコマンドを実行します。

$ vacuumdb --analyze bigdb

xyzzyという名前のデータベースのfooという1つのテーブルだけのクリーンアップと、そのテーブルのbarという1つの列にだけ対してオプティマイザ用の解析を行う場合には、下記のコマンドを実行します。

$ vacuumdb --analyze --verbose --table='foo(bar)' xyzzy

xyzzyという名前のデータベースのfooスキーマとbarスキーマのすべてのテーブルをクリーンアップする場合には、下記のコマンドを実行します。

$ vacuumdb --schema='foo' --schema='bar' xyzzy

関連項目

VACUUM