2026年6月17日
2026年6月17日
PostgreSQLのVACUUMでデータベースを最適化する方法
はじめに
PostgreSQLは多くの組織で使用されるオープンソースのデータベースシステムです。しかし、時間の経過とともに、テーブルが一部空いている行(無効なレコード)や不要なスペースを蓄積することがあります。これらの問題を解決するために、定期的なVACUUMコマンドの実行が必要となります。この記事では、VACUUMコマンドを使用してPostgreSQLデータベースを最適化する方法について詳しく説明します。
症状・背景
VACUUMが必要になる主な場面には以下のようなものがあります:
- テーブル内に無効なレコードが存在している場合
- テーブルの性能低下により、クエリの実行時間が長くなっている場合
- スペース利用率が低いテーブルがある場合
手順・設定方法
ステップ1: VACUUM基本操作
# データベース名とスキーマ名を指定して基本的なVACUUMを行う
psql -d database_name -c "VACUUM schema_name;"
# 一連のテーブルに対してVACUUMを行う
psql -d database_name -c "VACUUM table1, table2;"
ステップ2: 主要オプション/設定
# フォースモードを使用して無効なレコードを完全に削除する
psql -d database_name -c "VACUUM FULL schema_name;"
# 一部のテーブルに対して指定した割合だけ実行する
psql -d database_name -c "VACUUM (FREEZE, VERBOSE) table1;"
ステップ3: 应用/組み合わせ
# VACUUMとANALYZEを一度に行う
psql -d database_name -c "VACUUM ANALYZE schema_name;"
# 一連のテーブルに対してVACUUMを行う
psql -d database_name -c "VACUUM (VERBOSE, ANALYZE) table1, table2;"
ステップ4: 実践/トラブルシュート/監視
# VACUUMの実行状況を追跡するためのログを有効にする
psql -d database_name -c "SET enable_vacuum_cleanup_log = on;"
# VACUUMの実行結果を確認する
SELECT * FROM pg_stat_user_tables WHERE relname = 'table_name';
注意事項
VACUUMコマンドはデータベースのロックがかかるため、大量のデータ操作をしている間は実行しないでください。FULLモードでのVACUUMはデータの完全な削除を行うため、十分に慎重に実行することが重要です。- 大規模なテーブルに対して
VACUUM FULLを使用すると時間とリソースがかかるため、必要以上に行うのは避けてください。
まとめ
1. 基本操作: VACUUMコマンドは定期的にデータベースのパフォーマンスを維持するために重要です。
2. 主要オプション/設定: フォースモードや指定されたテーブルに特定のオプションを適用することが可能です。
3. 応用/組み合わせ: VACUUMとANALYZEを一度に行うことで、パフォーマンス管理も同時に実行できます。
4. 実践/トラブルシュート/監視: enable_vacuum_cleanup_logを有効にすることで、VACUUMの詳細なログ情報を取得できます。
5. 注意事項: 大量のデータ操作があるときはVACUUMを行わないでください。
関連記事: