以下のことが気になる方は記事を読んでみてください!
そうでない方も是非!!!
- 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を凍結するイメージじゃ。
なんとなくわかった気がする!
博士、ありがとう。
まとめ
今日のまとめじゃ。
- データベースの掃除をする場合にVACUUMコマンドを使用
- 掃除したいデータベース・テーブルの情報を見てから実行するとよい
- 実行する場合は排他ロックが必要だったり、実行する範囲を指定しないと思ったように動作しない(時間がかかる)ことがあるから慎重に実行した方がよい。