「うちのデータベース、最近なんだか重くない?」を解決する魔法の数字:pg_stat_user_tablesの話
データベースを運用していると、ある日突然「あれ、前よりレスポンスが遅い気がする…」なんてこと、ありますよね。
そんな時、どこから手をつけていいかわからず、とりあえずサーバーを再起動してみたり、なんとなくSQLを書き直してみたり……。心当たりがある方も多いのではないでしょうか?(かつての私もそうでした!)
でも、実はPostgreSQLには、テーブルが「普段どんなふうに使われているのか」をこっそり教えてくれる「健康診断レポート」のような機能があるんです。それが、今回ご紹介する `pg_stat_user_tables` です。
データベースは「本棚」に似ている
難しい専門用語は一旦横に置いて、データベースを「巨大な図書館」だと想像してみてください。
テーブルは「本棚」です。
- 「どの本(テーブル)が、どれくらい読み返されているか?」
- 「どの本が、しょっちゅう書き換えられているか?」
- 「本棚の中に、もう誰も読まない古いメモ(デッドタプル)が溜まっていないか?」
これらを知ることで、本棚の整理整頓が必要なのか、あるいは本棚の場所を変えるべきなのかが見えてきますよね。`pg_stat_user_tables` は、まさにその「本棚の利用ログ」を記録している場所なんです。
どんな数字が見えるの?
実際にPostgreSQLで以下のコマンドを打ってみると、ずらりと数字が並んだ表が出てきます。
SELECT FROM pg_stat_user_tables;
眺めてみると、特に注目してほしい「3つの重要項目」があります。
- seq_scan (全件スキャン回数)
- 「最初から最後まで、本を全部めくって探した回数」です。これが異常に多いと、「目次(インデックス)」がうまく使われていない証拠。本棚の整理不足かもしれません。
- n_tup_upd (更新回数)
- 「本の内容を書き換えた回数」です。ここが多すぎると、データベースは「古い情報を捨てて、新しい情報を書く」という作業で大忙し。もっと効率的な書き換え方がないか検討するサインです。
- n_dead_tup (デッドタプル数)
- 「もう捨てたはずなのに、本棚に残っているゴミ」です。これが増えると、本棚がパンパンになって目的の本を探すのが遅くなります。これが溜まっていたら「バキューム(掃除)」をしてあげる必要があります。
「掃除」をサボると、データベースは散らかる
ここが一番伝えたいポイントなのですが、データベースも部屋と同じで、使えば使うほど散らかるんです。
特に「更新が多いテーブル」には、古い情報(デッドタプル)がどんどん溜まります。これをお掃除(VACUUM)せずに放っておくと、データベースは「ゴミ屋敷」状態になって、目的のデータを探すのに時間がかかるようになります。
「なんだか最近遅いな?」と思ったら、まずはこの `n_dead_tup` の数字を見てみてください。「あ、ゴミが溜まりすぎてたんだ!」と気づくだけで、解決への第一歩になりますよ。
最後に:まずは眺めることから始めよう
最初は数字の羅列に見えるかもしれませんが、毎日なんとなく眺めていると、「あ、このテーブルは読み取り専用だから数字が変わらないんだな」とか「このテーブルは毎秒すごい勢いで書き換わってる!」といった「テーブルの個性」が見えてくるようになります。
データと会話をする感覚、と言えば少し大げさかもしれませんが、データベースの健康状態を知ることは、開発者としての立派なスキルです。
ぜひ、今日のお仕事の合間に `SELECT FROM pg_stat_user_tables;` を実行してみてください。あなたのデータベースが、どんなふうに頑張っているか教えてくれるはずですよ。
それでは、また次回の記事でお会いしましょう!データベースライフを楽しんでくださいね。
コメント