0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostgreSQLのインデックス再構築運用(断片化監視と実務での対応)

0
Last updated at Posted at 2026-04-19

データベース(PostgreSQL)のインデックスは 徐々に断片化していきます。

しかし、実務では「いつ・どのように再構築するか」
の運用まで設計されていないことが多いです。

本記事では、実際のプロジェクトで行っていた
インデックス再構築の運用について紹介します。

クラスタ環境を使用しており、以下のように運用していた。

インデックス断片化の監視方法

INDEXの状態確認は負荷が高いため、以下のように実施。

■監視のポイント
①スタンバイ側で実行(負荷軽減のため)
②全インデックスを分割してチェック
 例:70個なら1日10個ずつ
③断片化の条件を満たしたらログ出力
 →Zabbixで監視し、通知

【補足】
①INDEXの状態は、プライマリとスタンバイの2台で同じ。
プライマリ側とスタンバイ側の双方で実行し、プライマリだったら即時終了。
プライマリとスタンバイが切り替わる可能性があるため、双方で実行。

②全INDEXのサイズを確認し、サイズで7等分する。
各INDEXを週に1回ずつ実行し、毎日実行。

■断片化の判断
・平均密度が50%超~70%
 ・50%前後
  →再構築が難しい環境、アクセス頻度が低い場合 [※2]
 ・70%前後
  →再構築しやすい環境、アクセス頻度が高い場合 [※2]
・サイズが50~100MB以上
 上記の平均密度参照
平均密度とサイズをAND条件で判断

[※2] アクセス頻度は pg_stat_user_indexes.idx_scanで累計回数を確認可能

インデックス再構築の方法

インデックス再構築はプライマリで実行します。
そのため、スタンバイで断片化状態のファイルを確認し、
対象インデックスを特定した後、
スタンバイからプライマリへ接続して再構築を実施。

運用で重要なポイント

インデックスの断片化は必ず発生します。
そのため、本稼働前に運用として組み込んでおくことが重要です。

後から対応しようとしても、予算や調整の都合で難しい場合が多いです。

実際の効果(再構築前後の比較)

システムテスト時、INDEX再構築のテストを行ったが、以下になった。
※私はインフラ担当だったが、INDEXが断片化していても誰も気付かない。
 これだけ断片化していたら、さすがに遅くなっている筈。

■再構築前後のサイズ比較
再構築前
・テーブル:62MB
・インデックス:600MB

再構築後
・インデックス:75MB
 →約8分の1に削減

補足(より深く学びたい方へ)

今回のような「性能問題の原因分析」やチューニングの具体的な
手順について、講座で体系的に解説しています。
URL:https://www.udemy.com/course/postgresql-sql/?referralCode=64B372729B6BC0073ACB

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?