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で「1回も使われていないインデックス」を再構築しようとしていた話

0
Last updated at Posted at 2026-07-20

本番環境でインデックス再構築を行うことになりました。

事前に対象のインデックスを確認したところ、
一度も使われていないインデックスだったのです...
 

データベースのインデックスの断片化を監視し、
再構築する仕組みを作っていました。

本稼働後、初めてインデックス断片化の条件に合致し、
アプリチームが作成した仕組みを利用し、インデックスを再構築することになりました。

この時、関係者で打合せを行い、
エラーになったら、インデックスを手動で再構築するのでは無く、
作業前の状態に戻してください、と言われていました。

本番環境へアクセスするには申請が必要で、普段アクセスできないようになっています。
また、性能については難しく、分かる人がいません。

という理由があり、再構築しようとしている
インデックスを確認すると、次のような状態でした。

・pg_stat_user_indexes.idx_scan:0
・avg_leaf_density:50を少し下回っている(半分以上が虫食い状態)

つまり、
・一度も検索で使われていない
・それなのに断片化している
という状態でした。(関連記事参照)

インデックスは検索処理を高速化しますが、
INSERT・UPDATE・DELETE など、
インデックスを更新する処理では オーバーヘッドになります。

インデックスを再構築するより、
まず、本当に必要なインデックスかを見直すべきです。

性能問題は、
「再構築すること」が目的ではありません。

「本当にそのインデックスが必要なのか」
まで確認することが重要だと痛感しました。

このような状況になった要因として、次のようなことが考えられます。
・インデックスの設計を基本設計の段階で行っており、その後見直していない
・性能テストで確認していない
・本稼働後、確認していない
 

関連記事

- データベース(PostgreSQL)のINDEX再構築の目安

- PostgreSQLでシステムテスト以降で性能を改善する監視すべきポイント その1

- PostgreSQLでシステムテスト以降で性能を改善する監視すべきポイント その2

- 【PostgreSQL】INDEXが効かない原因7選(実務でハマる落とし穴)

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

 

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

PostgreSQLの性能調査を体系的に学びたい方は
今回のような「不要なインデックスの見極め」を含め、
実務で役立つ性能分析・チューニングの進め方を講座で体系的に解説しています。

※現在Udemyセール中のため、通常より安く受講できます。
 残り 1日です。

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?