【入門編】 pg_statsビュー – PostgreSQL

「なぜか検索が遅い…」を解決する第一歩!PostgreSQLの『健康診断カルテ』を覗いてみよう

こんにちは!データベースエンジニアとして日々PostgreSQLと格闘している私です。

みなさんは、データベースを使っていて「最初はサクサク動いていたのに、データが増えた途端に急に重くなった……」なんて経験はありませんか?まるで、最初は身軽だったカバンにどんどん荷物を詰め込んで、気づけば歩くのもやっと、みたいな状態ですね。

実はPostgreSQLには、そんな「なぜ重いのか?」という謎を解くための『健康診断カルテ』のような場所があるんです。それが今回紹介する`pg_stats`というビューです。

専門用語はなるべく抜きにして、一緒に見ていきましょう!

—

プランナは「名探偵」ではなく「直感に頼る人」?

PostgreSQLがSQLを実行するとき、裏側では「プランナ」という司令塔が「どの順番でデータを探すのが一番速いか?」を考えています。

でも、このプランナは超能力者ではありません。彼が頼りにしているのは、「過去のデータがどんな分布をしていたか」というメモ(統計情報)だけなんです。

  • 「このテーブルには、Aという値が100個くらいあるはずだな」
  • 「Bという値はほとんど入っていないから、探すときは後回しでいいか」

といったメモを元に作戦を立てます。もしこのメモが古かったり、実態とズレていたりすると、プランナはとんでもない勘違いをして、効率の悪い探し方をしてしまうんです。

`pg_stats` は、プランナの「脳内のメモ帳」

このプランナが頼りにしているメモの中身を覗けるのが、`pg_stats`というビューです。

「テーブルの中にどんなデータが、どれくらいの割合で入っているか」という情報が、このカルテには細かく書かれています。試しに、ターミナルでこんなふうに覗いてみてください。

SELECT tablename, attname, n_distinct, most_common_vals
FROM pg_stats
WHERE tablename = ‘あなたのテーブル名’;

これを見ると、PostgreSQLがあなたのデータをどう見ているかが一目瞭然になります。

  • n_distinct: 「この列には、大体これくらいの種類のデータが入っているよ」という目安。
  • most_common_vals: 「よく登場する値はこれだよ。これが多いから気をつけてね」というヒント。

もしかして、メモが古くなっていませんか?

もし、検索が遅いと感じたなら、まずはこの`pg_stats`を見てみてください。「あれ?最近データをごっそり入れたのに、この数字が古いままじゃない?」ということに気づくかもしれません。

PostgreSQLには`ANALYZE`というコマンドがあるのですが、これは「最新のデータを調べて、メモ帳を更新して!」とお願いするコマンドです。

たまに「最近動きが鈍いな」と思ったら、一度`ANALYZE`を実行して、プランナのメモ帳を最新の状態にアップデートしてあげてください。これだけで、嘘のように検索速度が改善することも珍しくないんですよ。

—

今日のまとめ:データベースを「観察」する楽しさ

データベースのチューニングと聞くと、「難しいインデックスを貼るんでしょ?」と構えてしまうかもしれません。でも、まずは「今、PostgreSQLはどうやってデータを見ているんだろう?」と、その視点を覗いてみることが一番の近道です。

`pg_stats`は、いわばデータベースの健康状態を知るための大切なカルテです。

「今日はどんなデータが入っているのかな?」と、たまにこのカルテを覗いてあげることで、あなたとデータベースの距離はグッと縮まるはずです。ぜひ、怖がらずに一度`SELECT`してみてくださいね!

それでは、また次回の記事でお会いしましょう。ハッピーなデータベースライフを!

コメント

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