こんにちは!データベースの世界へようこそ。
普段、PostgreSQLを触っていると「もっと速くならないかな?」「更新が重い時に急に遅くなるのはなぜ?」なんて悩むこと、ありますよね。
今日は、そんな時に魔法のスパイスのように効いてくる「Fillfactor(フィルファクター)」という設定についてお話しします。難しそうに聞こえるかもしれませんが、実は私たちの日常生活にもよくある「あるある」で例えられるんですよ。
—
本棚の整理整頓で考えてみよう
想像してみてください。あなたは今、大きな本棚を整理しています。
この本棚が「データベースのページ(データの保管場所)」だと思ってください。新しく本(データ)を買ってきたら、本棚の空いているスペースに差し込んでいきますよね。
1. 詰め込みすぎた場合(デフォルトの状態)
もし、本棚に隙間なくギチギチに本を詰め込んだらどうなるでしょう?
後から新しい本を買ってきたとき、「入る場所がない!」とパニックになりますよね。
そうすると、あなたは慌てて隣の本棚を空けたり、場所を移動させたりと、大がかりな模様替えをしなければなりません。これ、実はデータベースの世界でも同じことが起きています。これを「ページ分割(Page Split)」と呼ぶのですが、これが起きるとデータベースは急激に重くなってしまうんです。
2. 「Fillfactor」は予備スペースのこと
そこで登場するのが「Fillfactor」です。
これは、「本棚の〇〇%までしか本を入れないでおこう」というルールのこと。
例えば「Fillfactor 80」と設定すると、「本棚の20%は、後で新しい本が来たときのために、あえて空けておこうね」という余裕を持たせることができます。
こうしておけば、新しいデータがやってきたときも、わざわざ大がかりな模様替え(ページ分割)をしなくても、サッと空きスペースに差し込むことができますよね。結果として、データベースはとってもスムーズに動き続けるんです。
—
どんなときに設定すればいいの?
じゃあ、全部の本棚をスカスカにしておけばいいのかというと、そうではありません。スカスカにしすぎると、今度は本棚の数が無駄に増えてしまい、本を探す手間(読み込み時間)が増えてしまいます。
Fillfactorを調整する目安はこんな感じです。
- 更新が頻繁なテーブル:
「追記」や「書き換え」が多いなら、余裕を持って80〜90%くらいに設定するのがおすすめです。
- 読み取りがメインのテーブル:
ほとんどデータが変わらないなら、100%(限界まで詰め込む)でOKです。
—
設定のやり方はとってもシンプル
PostgreSQLでは、テーブルやインデックスを作る時にこんな感じで指定できます。
— テーブル作成時に設定する例
CREATE TABLE my_table (
id serial PRIMARY KEY,
memo text
) WITH (fillfactor = 85);
たったこれだけ!これだけで、将来的なパフォーマンス低下の芽を摘むことができるんです。
—
最後に:完璧を目指しすぎないで
初心者のうちは、「どの数字がベストなんだろう?」と迷ってしまうかもしれません。でも大丈夫。最初からベストを狙い撃ちできるエンジニアなんていません。
まずは「更新が多い場所には、少し余裕を持たせてあげよう」という考え方だけ覚えておいてください。それだけで、あなたの書くデータベース設計は、他の人よりもずっと「優しくて、タフな設計」になっているはずです。
もし運用中に「最近、更新が重くなってきたかも?」と感じたら、ぜひこの「Fillfactor」を思い出してみてくださいね。
それでは、また次回の記事でお会いしましょう!ハッピーなコーディングを!
コメント