こんにちは!データベースの世界へようこそ。
普段、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. もう一度実行計画を見て、「本当に速い道を選んでいるか」を確認する
このステップを踏むだけで、あなたのデータベースはもっと軽やかで、頼もしい相棒になってくれるはずです。
データベースのチューニングは、慣れるまでは少しドキドキするかもしれません。でも、設定一つでシステムの顔つきが変わるのを見るのは、エンジニア冥利に尽きる瞬間ですよね。
皆さんのデータベースが、今日もサクサクと気持ちよく動きますように!また何かあれば、いつでも相談してくださいね。
コメント