【入門編】 インデックスの保守と監視 – PostgreSQL

インデックスという名の「しおり」を整理しよう:データベースの断捨離、始めてみませんか?

こんにちは!日々のデータベース運用、お疲れ様です。

皆さんは、本を読んでいるときや、辞書を引くときに「しおり」を使いますよね? PostgreSQLにおける「インデックス」は、まさにその「しおり」と同じ。膨大なデータの中から、目的の情報を一瞬で見つけるための大切な味方です。

でも、こんな経験はありませんか?
「本を読もうと思って開いたら、1ページごとにしおりが挟まっていて、かえって読みづらい……」

実は、データベースでも同じことが起きています。「良かれと思って作ったインデックスが、実は誰にも使われていない」なんてことは、現場では珍しくない話なんです。今日は、そんな「使われていないインデックス」を優しく見つけて、スッキリ整理する方法についてお話ししますね。

—

なぜ「未使用のインデックス」が問題なの?

「使われていないなら、そのままにしておけばいいじゃない?」と思うかもしれません。でも、インデックスには一つだけ欠点があるんです。

それは、「新しいデータを追加したり、更新したりするたびに、インデックスも書き換えなきゃいけない」ということ。

つまり、使われていないインデックスがたくさんあると、データベースは「誰も使わないはずのしおり」を、一生懸命毎日書き換えていることになるんです。これって、ちょっとしたエネルギーの無駄ですよね。これが重なると、データベース全体の動作が少しずつ重くなってしまう原因になります。

まずは「どれが使われているか」を確認しよう

PostgreSQLには、インデックスたちの利用状況を教えてくれる「健康診断シート」のような機能が備わっています。それが `pg_stat_user_indexes` というビューです。

難しい名前ですが、要は「みんながどれくらいインデックスを使ってくれたか」を記録している台帳だと思ってください。以下のSQLを実行してみてください。

SELECT
relname AS テーブル名,
indexrelname AS インデックス名,
idx_scan AS 利用回数
FROM pg_stat_user_indexes
ORDER BY idx_scan ASC;

このコマンドを打つと、インデックスごとの「利用回数」が表示されます。もし `idx_scan` が「0」や、極端に小さな数字になっているインデックスがあれば、それは「最近ほとんど出番がない」というサインです。

「削除」の前にちょっとだけ注意!

「利用回数が0だから、すぐに消しちゃえ!」……ちょっと待ってください。ここで一つ、僕からのアドバイスです。

  • たまにしか動かないバッチ処理で使われているかも?

(月末締めや、年に一度の決算処理でしか使わないインデックスかもしれません)

  • 作成したばかりで、まだ評価期間中かも?

いきなり削除ボタンを押す前に、まずは「数週間〜1ヶ月」ほど様子を見てみるのがプロの作法です。あるいは、インデックスを削除するのではなく、まずは「無効化(見えない状態にする)」にしてから様子を見るのも安全策ですよ。

最後に:データベースも「片付け」が大事

お部屋の片付けと同じで、データベースも整理整頓を心がけると、驚くほど軽快に動くようになります。「とりあえずインデックスを作っておこう」という時期を過ぎたら、次は「本当に必要なものだけを残す」というフェーズへ進んでみましょう。

そうすることで、システムはもっと長生きしてくれますし、何より皆さんのデータベース管理がぐっと楽になるはずです。

もし、インデックスの削除に不安があったら、いつでもまた聞きに来てくださいね。皆さんのデータベースライフが、もっと快適なものになりますように!

それでは、また次回の記事でお会いしましょう。

コメント

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