こんにちは、Zaco shinです。
PostgreSQLでVACUUM処理というのがあります。ポスグレを運用するには大事な処理なんですけど、少しまとめておきます。
正直最初聞いたときはよくわかりませんでした。。そもそもデータベースに関する知識がなかったんですけどね。。
VACUUM処理とは?
不要な領域を回収してくれる処理の事を言います。
ん?なんのことですか??と最初私もなりました。VACUUMの前にまずは、PostgresSQLの動きを理解しておく必要があります。
PostgreSQLの動き
PostgreSQLは、MVCC(MultiVersion Concurrency Control)という仕組みを使っており、データの更新や削除を行うと、変更前のデータなど残るようになっています。
そのため、データ更新/削除を行っていくと、不要な領域が増えて、ディスク領域の圧迫や、I/O増加によって性能が悪くなるといったことが生じてきます。そのため不要領域を回収するVACUUM処理が必要となってきます。
VACUUM処理について
手動でVACUUM処理するには大きく2つのやり方があり、VACUUMとVACUUM FULLがあります。
VACUUM(オプションなしの場合)
「書式」VACUUM テーブル名
VACUUM zacodesign
通常はこれを良く使うかなと思います。テーブルだけでなくインデックスにも不要領域は発生しているのですが、インデックスも回収してくれます。処理自体は物理的にディスクからデータを消しているのではなく、使えるようにしているだけなので、VACUUM処理しているときでもUPDATEやDELETEなどの処理も問題なく使えます。
VACUUM FULLの場合
「書式」VACUUM FULL テーブル名
VACUUM FULL zacodesign
これは大量にデータ削除したり、UPDATE処理をしたときに使うかなと思います。こちらは不要領域を物理的に削除を行います。FULL処理のときはテーブルをロックする(排他ロック)するためデータを取得することが出来ず、業務影響が発生します。ディスク領域のほとんどが不要領域になっている時などに実施するのが良いかなと思います。