「なんだか最近、サイトが重い……?」そんな時に頼れる、PostgreSQLの「お節介な記録係」のお話
こんにちは!データベースの世界に足を踏み入れたばかりの皆さん、毎日お疲れ様です。
システムを作っていると、最初はサクサク動いていたはずなのに、データが増えてくると「あれ、最近ちょっと反応が遅くない?」と焦る瞬間、ありますよね。そんな時、皆さんはどうやって原因を探していますか?「なんとなく、この処理が怪しいかな?」なんて勘で探しているなら、ちょっと待ってください!
今日は、PostgreSQLというデータベースが持っている、「誰が、どのクエリで、どれくらい時間を食っているか」をすべて記録してくれる、超優秀な『お節介な記録係』を紹介します。
その名は、`pg_stat_statements`(ピージー・スタット・ステートメンツ)です。
1. 例えるなら、「お店の混雑記録帳」
想像してみてください。あなたは人気カフェの店長です。お店が混雑してくると、どのメニューを作るのに時間がかかっているのか、どの注文が一番スタッフを忙しくさせているのか、把握したくなりますよね。
もし、すべての注文に対して「注文名」「調理時間」「何回注文されたか」を自動的にノートに書き留めてくれるスタッフがいたらどうでしょう?
- 「パンケーキは1個作るのに平均10分かかっているな」
- 「コーヒーは1日に100杯出るけど、1杯30秒で終わるから全然問題ないな」
こんなふうに、「どこがボトルネック(渋滞ポイント)なのか」が一目瞭然になりますよね。`pg_stat_statements`は、まさにデータベースの中にある、そんな「混雑記録帳」なんです。
2. なぜ、これを使うだけでプロっぽくなれるのか?
初心者のうちは、遅いクエリを見つけるために「勘」や「気合」を使いがちです。でも、プロのエンジニアは違います。彼らはまず「数字」を見ます。
この拡張機能を使うと、以下のようなことが魔法のように分かってしまいます。
- 総実行時間: どのクエリが一番、サーバーの時間を浪費しているのか。
- 実行回数: 何度も何度も、無駄に同じ処理をしていないか。
- 平均実行時間: 1回あたりどれくらいの重さがあるのか。
これさえ見れば、「ああ、このクエリが原因でサイト全体が重くなっていたのか!」と、犯人探しが数分で終わってしまうんです。
3. 早速、魔法をかけてみよう
使い方はびっくりするほど簡単です。PostgreSQLの設定ファイル(`postgresql.conf`)に一行書き加えて、データベースを再起動して、コマンドを打つだけ。
— 魔法の呪文(一度だけ実行すればOK!)
CREATE EXTENSION pg_stat_statements;
これだけで、裏側で記録係が動き出します。あとは、いつでも好きな時にこう聞くだけです。
— 「一番時間を使っているクエリを教えて!」
SELECT query, total_exec_time, calls
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 5;
これだけで、サーバーを一番忙しくさせている「ワースト5」が画面にポンと出てきます。初めてこれを見た時、僕も「え、このクエリにこんなに時間使ってたの!?」と衝撃を受けたのを今でも覚えています。
最後に:データベースと仲良くなるために
データベースは、決して「何を考えているか分からない怖い箱」ではありません。ちゃんと耳を傾けてあげれば、どこが苦しいのか、何を改善してほしいのか、しっかり教えてくれる優しい相棒です。
`pg_stat_statements`は、そんな相棒とのコミュニケーションを深めるための、最初の一歩。もし今、自分のサイトやシステムが少しでも重いなと感じていたら、ぜひこの「記録係」を雇ってみてください。
「あ、ここを直せばもっと速くなる!」という新しい発見が、きっとあなたのエンジニアライフをより楽しくしてくれるはずですよ。
それでは、また次回の記事でお会いしましょう!ハッピー・コーディング!
コメント