vacuumdb — PostgreSQLデータベースの不要領域の回収と解析を行う
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データベースの不要領域のクリーンアップを行うユーティリティです。 また、vacuumdbはPostgreSQLの問い合わせオプティマイザが使用する内部的な統計情報も生成します。
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の設定が、これらの接続を許容するだけ十分に大きくしてください。
このモードを-f
(FULL
)オプションと一緒に使うと、一部のシステムカタログが並列処理されてデッドロックのエラーを起こす場合があることに注意してください。
--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
診断メッセージで色を使うかどうかを指定します。
可能な値はalways
、auto
、never
です。
また、このユーティリティは、他のほとんどのPostgreSQLユーティリティと同様、libpqでサポートされる環境変数を使用します(34.15を参照してください)。
問題が発生した場合、考えられる原因とエラーメッセージについての説明はVACUUMとpsqlを参照してください。 データベースサーバは、指定したホストで稼働している必要があります。 また、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