PostgreSQL:メンテナンス
バキューム
PostgreSQL は、「追記型」と呼ばれる方式を採用しています。 データを削除する場合、 外部的には、もちろん削除されて見えますが、 データベースの内部的には、 データそのものを消したりはせずに、 該当データに削除マークを付けるだけです。 また、 更新する時でも、更新対象の既存のデータに削除マークを付けたうえで、 新しいデータを「追加」します。 追記型の長所は、何といっても動作が速い事です。 データを削除した後の隙間を埋めたり、 更新でデータ量が増えるときに、 追加分の領域を広げたり移動したりしなくて済むからです。 一方、短所は、 データを追記する一方なので、 どんどんデータのサイズが膨らんでしまう事です。 そこで、バキュームを使って、 不要なデータ領域を整理します。
バキュームの実行:PgAdmin
バキュームの実行の仕方の一つとして、PgAdmin を使う方法を紹介します。 具体的には、 ・PgAdmin のデータベース名 (例えば sql_sample) を右クリック ・「Maintenance...」を選ぶ ・Maintenance operation:VACUUM ・Type of objects:FULL を On に。・[OK] しばらく待つと、バキュームが終了します。
Type of objects で設定した FULL を使うと、 より高度な整理ができますが、実行中にテーブルをロックする点に注意が必要です。 ロックされたテーブルは他からアクセスできないので、 データベースの実稼働中に VACUUM FULL をしてしまうと、 システム全体に大きな影響を与える可能性があります。
バキュームの実行:Auto VACUUM
PgAdmin の実行は簡単ですが、 一々、人手で実行するのは面倒です。 で、 VACUUM を定期的に自動実行してくれる、 Auto VACUUM という機能があります。 PostgreSQL V17 ではデフォルトで On です。 ただし、細かな調整を行いたい場合は postgresql.conf をいじる必要があり、 専門的なので、ここでは触れない事にします。
・[OK]
しばらく待つと、バキュームが終了します。
Type of objects で設定した FULL を使うと、
より高度な整理ができますが、実行中にテーブルをロックする点に注意が必要です。
ロックされたテーブルは他からアクセスできないので、
データベースの実稼働中に VACUUM FULL をしてしまうと、
システム全体に大きな影響を与える可能性があります。