【入門編】 Fillfactorの最適化 – PostgreSQL

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

普段、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」を思い出してみてくださいね。

それでは、また次回の記事でお会いしましょう!ハッピーなコーディングを!

コメント

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