【入門編】 空き領域マップ(FSM) – PostgreSQL

こんにちは!データベースの世界へようこそ。

今日は、PostgreSQLの「裏方」として地味だけどめちゃくちゃ頑張っている、「FSM(フリースペースマップ)」という仕組みについてお話ししようと思います。

名前を聞くと「何それ、難しそう…」って思うかもしれませんが、大丈夫。実はこれ、私たちの日常生活にある「あるもの」に例えると、ものすごくイメージしやすくなるんです。

—

倉庫整理と「付箋」の話

想像してみてください。あなたは巨大な倉庫の管理人さんです。
倉庫にはたくさんの箱(ページ)が並んでいて、そこに荷物(データ)を次々と入れていかなきゃいけないとします。

荷物が届くたびに、あなたは倉庫中を歩き回って、「この箱、まだ入るかな?」「こっちの箱はどうだ?」と一つひとつ中身を覗き込んで確認しますか?
…そんなことをしていたら、日が暮れちゃいますよね。

そこで、あなたは賢い作戦を思いつきます。
「各箱の表面に、『あとこれくらい入るよ!』というメモ(付箋)を貼っておこう」と。

これがあれば、新しい荷物が届いたとき、あなたは倉庫全体を走り回る必要はありません。入り口にある「空き状況リスト(FSM)」をチラッと見るだけで、「ああ、3番の箱ならまだ余裕があるな。そこに置こう!」と即座に判断できるわけです。

これがまさに、PostgreSQLがやっているFSM(Free Space Map)の正体です。

—

なぜFSMが必要なの?

PostgreSQLは、データを「ページ」という単位で管理しています。新しいデータ(タプル)を保存する場所を探すとき、もしFSMがなかったらどうなるでしょう?

データベースは、先頭のページから順に「空いてる?空いてる?」と聞いて回らなければなりません。これはものすごい時間のロスですし、CPUやディスクへの負担もハンパじゃありません。

FSMは、いわば「どこにどれくらいの空きがあるか」という地図なんです。

  • 「このページはまだ80%も空いてるよ!」
  • 「このページはもうパンパンだから無視していいよ!」

といった情報をデータベースが事前に知っていることで、書き込み処理が驚くほどスムーズになるんです。

—

効率化は「バランス」が大事

ここで一つ、面白いポイントがあります。
FSMのメモ(付箋)は、常に100%正確である必要はありません。

例えば、誰かが荷物を出したのに、メモが更新されていなくて「まだ満杯だ」と書いてあったとしても、まあ、その時は別の箱を使えばいいだけですからね。逆に「空いている」と書いてあるのに実際はパンパンだったら、その時はその場で「あ、ダメだ」と気づいて、次の候補を探せばいいだけのこと。

PostgreSQLは、「完璧な正確さ」よりも「スピード」を優先しています。この「ほどよいアバウトさ」が、システム全体の軽快な動作を支えているんですよ。

—

まとめ:縁の下の力持ちに感謝!

FSMについて、なんとなくイメージできましたか?

  • FSM=「どこにどれだけ空きがあるか」という地図
  • 目的=効率よく新しいデータを詰め込むため
  • 特徴=完璧を求めず、スピードを重視する賢い仕組み

普段、私たちが何気なく「INSERT」文を実行している裏側で、このFSMが「あ、ここなら入るよ!」と瞬時に場所を教えてくれているおかげで、データベースはサクサク動いているんです。

次にPostgreSQLを触るときは、「ああ、今FSMが一生懸命探してくれているんだな」と、健気な彼らに思いを馳せてみてくださいね。

また面白いテーマを見つけたら、こうやって解説していきますね。それでは、素敵なデータベースライフを!

コメント

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