1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostgreSQLのVACUUMについて

1
Posted at

VACUUMについて

PostgreSQLの定期的な保守作業の中に、バキューム処理があります。保守作業といっても、定期的に手動で何かをするわけではなく、自動バキュームデーモン(autovacuum launcher)を起動しておくと自動でバキューム処理を行ってくれます。手動でVACUUMコマンドを実行して流すこともできますが、たいていの運用では自動で行います。デフォルトでは自動バキュームデーモンが起動されるようになっています。PostgreSQLのプロセスを確認すると起動されていることが確認できます。

>ps auxww | grep ^post

自動バキュームデーモンが実行されるタイミングは任意となっています。定期的に1日1回決まった時間に実行されるような動きではありません。

自動バキュームデーモンがデータベースの更新頻度に応じて、動的にバキューム作業を計画して実行してくれます。
データベースへの更新/削除が激しいときは、頻繁にバキュームが流れ、大した量ではないときはお休みしているといった動きになります。

バキュームを動的な処理に任せておくのではなく、1日1回決まった時間に流すようにすることもできます。そうしたい場合は、自動バキュームデーモンをストップさせて、OSの機能を使って、cronでVACUUMコマンドをスケジュールさせることになります。

どっちがいいのかについては、自動バキュームデーモンが実行される頻度によって判断することになるかと思います。VACUUMの心配をするくらいなら、ハードディスクの容量に余裕をもたせておいた方が賢明でしょう。

VACUUMの種類

VACUUMには標準VACUUMとVACUUM FULLと2つの種類が存在しています。

大抵の運用の場合、標準VACUUMを実行します。VACUUM FULLはよほどのことがない限り実行されることはありません。標準VACUUMは実行されていても、SELECT、INSERT、UPDATE、DELETEといったSQLコマンドを通常通りに流すことができます。それが、VACUUM FULLだとACCESS EXCLUSIVEロックをかけるため、上記のSQLコマンドが実行できなくなります。業務時間中は絶対にVACUUM FULLを実行してはいけません。さらに、VACUUM FULLは大量のI/Oトラフィックを発生させるため、データベースへのセッションに影響が出る可能性があると言われています。つまり、データベースへ接続できなくなる可能性があるということです。恐ろしいことです。

デフォルトで実行される自動バキュームデーモンは、標準VACUUMが実行されます。VACUUM FULLではありません。ご安心を。どうしてもVACUUM FULLを実行したい場合は手動で実行することになります。

標準VACUUMは不要になった領域を削除した後、増えた領域をOSに返却することはしません。またいずれ再利用されるために残しておきます。それに比べ、VACUUM FULLは極限まで領域を削除して最小化させた後、増えた領域をOSに返却します。

極端なまでにデータベースの無駄領域が肥大化して、OSの容量に影響が出てくるような事態になったときに、急場しのぎで実行されるのがVACUUM FULLということになりそうです。一時的に大量データの更新、削除を行ったような場合に限り、VACUUM FULLをする意義はあるでしょう。

おまけ

テーブルを削除するとき、DELETEとTRUNCATEを使い分けることがあります。TRUNCATEは厳密にいえば削除ではなく切り捨てです。TRUNCATEをするとデータベースに無駄領域を残すことがありません。つまり、TRUNCATEを行った場合はVACUUMをする必要がないということです。ワークファイルの削除はDELETEではなくTRUNCATEを利用されるかと思いますが、つまり、こういうことです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?