DB

データベース保守 ~VACUUM~🚽

以下のことが気になる方は記事を読んでみてください!
そうでない方も是非!!!

  • VACUUMってなに?
  • どんなふうに使うの?

VACUUMってなに?

博士~!今日はVACUUMを教えて!

VACUUMっていうのは、データベースを保守する際に、
よく使うコマンドじゃ。

データベースの不要領域の回収データベースの解析(オプション)を行うことができるのじゃぞ。

今回はPostgresのVACUUMについて話をするぞ。

まず、Postgres的にはこう言っておる。

VACUUM は、不要タプルが使用する領域を回収します。 PostgreSQLの通常動作では、削除されたタプルや更新によって不要となったタプルは、テーブルから物理的には削除されません。 これらのタプルはVACUUMが完了するまで存在し続けます。 そのため、特に更新頻度が多いテーブルでは、VACUUMを定期的に実行する必要があります。

よくわからない。。。

要するに、こういうことじゃ。

テーブルAにレコードが7個ある状態から
DELETE文を発行して、データを削除する。
そうすると、真ん中の状態になるじゃろ?

この状態だと、データは使用者には見えないのだが、
データの容量は使用している状態なのじゃ。

上記のままだと、レコードが増えていくと性能が落ちたりするからVACUUMを使用して、テーブルの削除したレコードを完全けして容量を確保するのじゃ。

なんとなく分かったけど、どうやって使うの?

それは次の章で話すぞ。

どんなふうに使うの?

理論は分かったけど、どうやって使うの?

コマンドはこんな感じで組み立てるのじゃ。

vacuum オプション テーブル名

オプションは以下の4つじゃ。

  • FULL・・・”完全な”バキュームを実行できる。(排他ロックが必要)
  • FREEZE・・・積極的にタプル(レコードのイメージ)の”凍結”
  • VERBOSE・・・バキューム処理の詳細な報告を出力
  • ANALYZE・・・使用する統計情報を更新する

https://www.postgresql.jp/document/9.4/html/sql-vacuum.html

※詳しくは上記を参照

まだ、よくわからないなぁ。

まず、ANALYZEオプションを使用して、現在のテーブルの状態がどうなっているか調べるのじゃ。
コマンド実行後の情報はpg_statisticシステムテーブルに保存されるからそれを参照するのじゃ。

そのあとに、VACUUMしたいテーブル(全体にしたい場合テーブルは指定しない)を指定してコマンドを実行するのじゃ。

バキューム処理の詳細を知りたい場合はVERBOSEをオプションに追加したり、FREEZEは更新されなくなったデータのIDを凍結するイメージじゃ。

なんとなくわかった気がする!
博士、ありがとう。

まとめ

今日のまとめじゃ。

  1. データベースの掃除をする場合にVACUUMコマンドを使用
  2. 掃除したいデータベース・テーブルの情報を見てから実行するとよい
  3. 実行する場合は排他ロックが必要だったり、実行する範囲を指定しないと思ったように動作しない(時間がかかる)ことがあるから慎重に実行した方がよい。

ABOUT ME
中村満
2020年で7年目の現役SEです! 社会人から仕事でプログラムを触るようになり、なんとかここまでやってきました。 最近バイク(rebel250)を買いました。いつかキャンツーするのが夢です!