【入門編】 VACUUMと可視性マップ – PostgreSQL

こんにちは!データベースの世界へようこそ。
普段、PostgreSQLを使っていると「VACUUM(バキューム)」という言葉を耳にしませんか? 名前からして「掃除機」っぽいですよね。そのイメージ、実は大正解なんです。

今日は、この「お掃除」がなぜ大事なのか、そして「Visibility Map(可視性マップ)」というちょっと賢い地図が、私たちの検索をどう助けてくれているのかを、一緒に紐解いていきましょう。

—

データの「修正」って、実は「書き直し」なんです

まず一つ、PostgreSQLのちょっと面白いクセをお話しします。
PostgreSQLでデータを「更新」したとき、実は古いデータを上書きしているわけではないんです。「古いデータはそのまま残して、新しいデータを別の場所に書き込む」ということをしています。

イメージしてみてください。ノートに書いた文字を消しゴムで消すのではなく、「二重線を引いて、余白に新しく書き直す」ような感じです。

これだと、何度も修正を繰り返すと、ノートが二重線だらけで真っ黒になってしまいますよね。これが、データベースでいう「不要領域(ゴミ)」が増えていく状態です。

VACUUM=「消しゴムと整理整頓」

この二重線だらけのノートを放置すると、ページをめくる(データを検索する)たびに、消すべき文字まで読み込んでしまって、動作が重くなってしまいます。

ここで登場するのが「VACUUM」です。
VACUUMは、「もう誰にも使われていない古いデータを探し出して、その場所を『ここ、また使っていいよ!』と再利用可能にする」お掃除作業です。

インデックスへの影響

インデックス(目次)も同じです。古いデータへの道しるべが残っていると、目次がどんどん分厚くなってしまいます。VACUUMを適切に行うことで、この「無駄な目次」が掃除され、検索という名の「ページめくり」が驚くほどスムーズになるんですよ。

—

Visibility Map:賢い近道案内

さて、ここからが少しだけ高度な話。「Visibility Map(可視性マップ)」についてです。
これは、データベースが持っている「どのページに、古いデータが混じっているか」を一目でわかるようにした地図のことです。

クエリプランナ(検索の司令塔)がこの地図を見ると、こんな判断ができるようになります。

  • 「このページには古いデータが一つも混じっていないな。よし、インデックスを見なくても、このページをそのまま読めば完璧なデータが手に入るぞ!」

これを「Index-Only Scan(インデックスだけを使った検索)」と呼ぶのですが、これが最強に速いんです。わざわざ目次(インデックス)に戻らなくても、本の中身(テーブル)を直接見るだけで答えがわかるわけですからね。

もしVisibility Mapがなければ、毎回必ず「目次」を開いて「本当にこのデータは最新かな?」と確認しなければなりません。この「確認作業」をスキップできるかどうかは、速度に大きな差を生みます。

—

まとめ:データベースを「健康」に保つために

ここまでのお話をまとめると、こんな感じです。

1. VACUUMは単なる掃除じゃない:古くなった二重線を消して、データベースを若々しく保つための大切な儀式です。
2. Visibility Mapは近道への地図:これを活用することで、データベースは「迷いなく」正解にたどり着けるようになります。

初心者のうちは「とりあえず動けばいいや」と思いがちですが、PostgreSQLが裏で頑張ってくれている「お掃除」の仕組みを知ると、なんだか親近感が湧いてきませんか?

「最近、なんとなく検索が遅いな?」と感じたら、それはデータベースからの「そろそろ整理整頓してほしいな」というサインかもしれません。そんな時は、VACUUMのことを思い出してあげてくださいね。

また次回の記事でお会いしましょう!質問があれば、いつでもコメント欄で教えてくださいね。

コメント

タイトルとURLをコピーしました