UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【PostgreSQL】VACUUMとは

PostgreSQLのパフォーマンスチューニングで、VACUUMというのを知ったので調べてみた

VACUUMとは不要になった領域の回収を行うコマンド

PostgreSQL は追記型のデータベースのため、レコードの削除時、更新時に不要な領域が溜まっていく

不要な領域が溜まっていくと、データベースのパフォーマンスが落ちる

PostgreSQLの通常動作では、削除されたタプルや更新によって不要となったタプルはテーブルから物理的に削除されず、VACUUMが実行されるまで存在し続ける

そのため、特に更新頻度が多いテーブルでは、VACUUMを定期的に実行する必要がある

www.postgresql.jp

(FULLのない)通常のVACUUMは単に領域を回収し、そこを再利用可能な状態に変更する

VACUUM FULLは、ディスクブロック数を最小にするためのブロックを跨るタプルの移動など、テーブルを縮小させるためにもっと高度な処理を行うが、かなり低速になり、処理中のテーブルに対する排他的ロックが必要になる

不要となった行を削除した状態に保つために、実運用状態のデータベースに対して(少なくとも毎晩、)定期的にVACUUMを実行することを推奨されている