【入門編】 random_page_cost設定 – PostgreSQL

こんにちは!データベースの世界へようこそ。
普段、PostgreSQLと向き合っていると「なんだかクエリの動きが遅いな……」と悩む夜もありますよね。そんな時、魔法のスパイスのように効く設定項目が「random_page_cost」です。

今日は、このちょっと不思議な名前の設定値について、専門用語を抜きにして、皆さんと一緒に考えてみたいと思います。

—

本棚と図書館で例えてみよう

データベースがデータを探しに行く様子を、図書館に例えてみましょう。

  • シーケンシャルアクセス(順次読み込み): 本棚の端から端まで、順番に本をチェックしていくこと。
  • ランダムアクセス(ランダム読み込み): お目当ての本がどこにあるか分からず、あちこちの棚を行ったり来たりして探すこと。

昔のハードディスク(HDD)は、物理的なディスクが回転して針が動く構造だったので、あちこちを探し回る「ランダムアクセス」は、順番に読むよりも「めちゃくちゃ時間がかかる(コストが高い)」という弱点がありました。

PostgreSQLのデフォルト設定は、この「HDD全盛期」の常識に基づいて作られています。「ランダムに探すのは大変だから、なるべく順番に読み込もうね」というプラン(実行計画)を立てるようになっているんです。

SSDという「超速の武器」を手に入れたら?

さて、ここからが本題です。今の時代、多くのサーバーはSSDで動いていますよね。

SSDはHDDとは違って、物理的な回転がありません。だから、あちこちのデータに飛び込んでも、HDDほど時間はかかりません。「ランダムアクセス」に対するペナルティが、劇的に下がった世界なんです。

それなのに、PostgreSQLの設定が「ランダムアクセスは大変だ!」という昔のままだったら、どうなるでしょう?

データベースはこう考えます。
「SSDは速いけど、設定上は『ランダムアクセスは重い』って書いてあるから、安全策をとって、あちこち探すのをやめて、順番に全部読み込む方法を選ぼう!」

……実はこれ、もったいないことなんです。
本当はサクッとピンポイントでデータを取りに行けるのに、わざわざ遠回りをして、不要なデータまで全部読み込んでいる状態なんですね。

設定を変えて、データベースを「現代っ子」にする

そこで登場するのが `random_page_cost` の出番です。

この数値を小さく設定することで、データベースにこう教えてあげます。
「もうそんなに心配しなくて大丈夫だよ。今のSSDなら、あちこち探しに行っても十分速いから、もっと自由に効率的なプランを立てていいよ!」

具体的には、デフォルトの `4.0` から `1.1` くらいに下げてみるのが、SSD環境での定番チューニングです。これだけで、クエリの実行計画がガラリと変わり、体感速度が劇的に向上することがよくあります。

—

最後に:いじる時の注意点

「じゃあ、すぐに数値を変更しよう!」と思った方、ちょっと待ってくださいね。

設定を変えるときは、必ず本番環境の前に検証環境でテストをしてください。 データベースのプランナは、たまにこちらの予想を裏切るような「大胆な道」を選ぶことがあります。

1. 今の実行計画を確認する(`EXPLAIN`コマンドを使います)
2. 数値を変更してみる
3. もう一度実行計画を見て、「本当に速い道を選んでいるか」を確認する

このステップを踏むだけで、あなたのデータベースはもっと軽やかで、頼もしい相棒になってくれるはずです。

データベースのチューニングは、慣れるまでは少しドキドキするかもしれません。でも、設定一つでシステムの顔つきが変わるのを見るのは、エンジニア冥利に尽きる瞬間ですよね。

皆さんのデータベースが、今日もサクサクと気持ちよく動きますように!また何かあれば、いつでも相談してくださいね。

コメント

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