「勘」でチューニングしてない?PostgreSQLの統計情報を守る『track_counts』の話
こんにちは!データベースエンジニアとして日々PostgreSQLと格闘している私ですが、今日は「これだけは絶対にオフにしちゃダメだよ!」という、地味だけどめちゃくちゃ大切な設定についてお話しします。
その名は`track_counts`。
「え、なにそれ、聞いたことない」という方も多いかもしれませんね。でも、これを知っているかどうかで、データベースのパフォーマンス改善の効率が天と地ほど変わってくるんですよ。さっそく、身近な例えから紐解いていきましょう。
—
「売れ筋」を知らない店長は、お店をうまく回せない
想像してみてください。あなたは小さなお店の店長さんです。
ある日、お客さんから「この棚の整理、どうすればいい?」と相談されました。あなたはこう答えます。
「うーん、なんとなく、入り口に近い棚を整理しておけばいいんじゃない?」
…これ、ちょっと不安ですよね? もし、その店で一番売れている商品が「奥の隅っこ」にあったとしたら、入り口の棚をどれだけ綺麗にしても、お店全体の効率は一向に上がりません。
データベースの世界もこれと同じなんです。PostgreSQLが「どのテーブルが頻繁に使われていて、どのインデックスが役に立っているのか」を知らなければ、最適な整理整頓(クエリチューニング)なんてできるはずがありません。
`track_counts` は、まさにこの「何がどれだけ使われているか」という日報をつけてくれる機能なんです。
track_counts がやっていること
`track_counts` を「オン(on)」にしておくと、PostgreSQLは裏側でこんなことを頑張ってくれます。
- 「Aテーブルは今日、何回読み込まれたかな?」
- 「Bインデックスは、最近検索で使われたかな?」
- 「データの更新や削除はどれくらいの頻度で起きてる?」
こうした統計情報をコツコツとノートに記録していくわけです。そして、PostgreSQLの頭脳である「プランナ(実行計画を作る担当者)」は、このノートを読んで、「よし、このテーブルは人気者だから、もっと効率的にデータを探せるようにインデックスをフル活用しよう!」と賢い判断を下します。
もしこの設定がオフだったら?
PostgreSQLは「どれが売れ筋かわからない」状態になるので、適当にデータを検索してしまい、結果として「なんだか最近、サイトの動作が重いな…」という悲しい事態を招くことになります。
これだけは覚えておいてください
基本的には、PostgreSQLをインストールした時点でこの設定は「オン」になっています。なので、わざわざ設定ファイルを書き換えてオフにするようなことは、まずありません。
でも、たまにトラブルシューティングの過程で「一時的にオフにしてみよう」と操作して、そのまま戻し忘れてしまう……なんていう、ちょっとしたヒューマンエラーが起きることがあります。
もし皆さんが、
- 「インデックスを作ったのに、なぜか使われていない気がする」
- 「なんだか急にクエリが遅くなった」
そう感じたときは、一度設定ファイルを覗いてみてください。
`track_counts = on` になっているかを確認するだけで、解決の糸口が見つかるかもしれません。
—
まとめ:データに「物語」を語らせよう
データベースチューニングというと、なんだか複雑な数式や、難しいコマンドを叩くイメージがあるかもしれません。でも、一番大事なのは「データベースが今、どんな状況なのか」を正しく把握することです。
`track_counts` は、そのための最初の、そして一番大切な一歩。
「データベースというお店」を快適に運営するために、この日報機能がちゃんと動いているか、たまには気にかけてあげてくださいね。
皆さんのデータベースが、今日もサクサク元気に動いていますように!また次回の記事でお会いしましょう!
コメント