こんにちは!データベースの世界へようこそ。
今日は、PostgreSQLの「裏方」として地味だけどめちゃくちゃ頑張っている、「FSM(フリースペースマップ)」という仕組みについてお話ししようと思います。
名前を聞くと「何それ、難しそう…」って思うかもしれませんが、大丈夫。実はこれ、私たちの日常生活にある「あるもの」に例えると、ものすごくイメージしやすくなるんです。
—
倉庫整理と「付箋」の話
想像してみてください。あなたは巨大な倉庫の管理人さんです。
倉庫にはたくさんの箱(ページ)が並んでいて、そこに荷物(データ)を次々と入れていかなきゃいけないとします。
荷物が届くたびに、あなたは倉庫中を歩き回って、「この箱、まだ入るかな?」「こっちの箱はどうだ?」と一つひとつ中身を覗き込んで確認しますか?
…そんなことをしていたら、日が暮れちゃいますよね。
そこで、あなたは賢い作戦を思いつきます。
「各箱の表面に、『あとこれくらい入るよ!』というメモ(付箋)を貼っておこう」と。
これがあれば、新しい荷物が届いたとき、あなたは倉庫全体を走り回る必要はありません。入り口にある「空き状況リスト(FSM)」をチラッと見るだけで、「ああ、3番の箱ならまだ余裕があるな。そこに置こう!」と即座に判断できるわけです。
これがまさに、PostgreSQLがやっているFSM(Free Space Map)の正体です。
—
なぜFSMが必要なの?
PostgreSQLは、データを「ページ」という単位で管理しています。新しいデータ(タプル)を保存する場所を探すとき、もしFSMがなかったらどうなるでしょう?
データベースは、先頭のページから順に「空いてる?空いてる?」と聞いて回らなければなりません。これはものすごい時間のロスですし、CPUやディスクへの負担もハンパじゃありません。
FSMは、いわば「どこにどれくらいの空きがあるか」という地図なんです。
- 「このページはまだ80%も空いてるよ!」
- 「このページはもうパンパンだから無視していいよ!」
といった情報をデータベースが事前に知っていることで、書き込み処理が驚くほどスムーズになるんです。
—
効率化は「バランス」が大事
ここで一つ、面白いポイントがあります。
FSMのメモ(付箋)は、常に100%正確である必要はありません。
例えば、誰かが荷物を出したのに、メモが更新されていなくて「まだ満杯だ」と書いてあったとしても、まあ、その時は別の箱を使えばいいだけですからね。逆に「空いている」と書いてあるのに実際はパンパンだったら、その時はその場で「あ、ダメだ」と気づいて、次の候補を探せばいいだけのこと。
PostgreSQLは、「完璧な正確さ」よりも「スピード」を優先しています。この「ほどよいアバウトさ」が、システム全体の軽快な動作を支えているんですよ。
—
まとめ:縁の下の力持ちに感謝!
FSMについて、なんとなくイメージできましたか?
- FSM=「どこにどれだけ空きがあるか」という地図
- 目的=効率よく新しいデータを詰め込むため
- 特徴=完璧を求めず、スピードを重視する賢い仕組み
普段、私たちが何気なく「INSERT」文を実行している裏側で、このFSMが「あ、ここなら入るよ!」と瞬時に場所を教えてくれているおかげで、データベースはサクサク動いているんです。
次にPostgreSQLを触るときは、「ああ、今FSMが一生懸命探してくれているんだな」と、健気な彼らに思いを馳せてみてくださいね。
また面白いテーマを見つけたら、こうやって解説していきますね。それでは、素敵なデータベースライフを!
コメント