PostgreSQLのパフォーマンスチューニングで、VACUUMというのを知ったので調べてみた
VACUUMとは不要になった領域の回収を行うコマンド
PostgreSQL は追記型のデータベースのため、レコードの削除時、更新時に不要な領域が溜まっていく
不要な領域が溜まっていくと、データベースのパフォーマンスが落ちる
PostgreSQLの通常動作では、削除されたタプルや更新によって不要となったタプルはテーブルから物理的に削除されず、VACUUMが実行されるまで存在し続ける
そのため、特に更新頻度が多いテーブルでは、VACUUMを定期的に実行する必要がある
(FULLのない)通常のVACUUM
は単に領域を回収し、そこを再利用可能な状態に変更する
VACUUM FULL
は、ディスクブロック数を最小にするためのブロックを跨るタプルの移動など、テーブルを縮小させるためにもっと高度な処理を行うが、かなり低速になり、処理中のテーブルに対する排他的ロックが必要になる
不要となった行を削除した状態に保つために、実運用状態のデータベースに対して(少なくとも毎晩、)定期的にVACUUMを実行することを推奨されている