【Oracle】表や索引の断片化を防ぐ!インデックス再構築と表領域メンテナンスの実践ガイド

IT技術情報

Oracleで断片化が起こる理由

Oracleデータベースを長期間運用していると、表や索引(インデックス)の断片化が徐々に進行します。
これは削除・更新を繰り返すことで、**データブロック間に無駄な空き領域(HWM下の未使用領域)**が生まれるためです。

結果として…

  • SELECTやJOIN時のI/Oコスト増大
  • 表領域の肥大化
  • バックアップ時間の増加

など、パフォーマンス低下と管理コストの上昇を招きます。

本記事では、実際の業務現場で行われている
✅ 断片化の確認方法
✅ インデックス再構築の実施方法
✅ 表領域の整理(SHRINK・MOVE)
をわかりやすく解説します。


1. 断片化の発生状況を確認する

■ DBA_INDEXES から確認する

BLEVEL(ブランチ階層)が高く、LEAF_BLOCKS が極端に多い場合は断片化が進行しているサインです。


■ 表断片化の確認(NUM_ROWS と BLOCKS 比較)

削除・更新が多い表では BLOCKS が過大になる傾向があります。
ANALYZE TABLE ... COMPUTE STATISTICS で統計情報を更新してから比較すると正確です。


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

Oracleでは、インデックス再構築を主に2つの方法で行います。

■ ① REBUILD(再構築)

  • ONLINE オプションを指定すれば、テーブルへのDML操作をブロックせずに再構築可能。
  • 大規模テーブルでは PARALLEL オプションの併用も有効。

■ ② COALESCE(空き領域の再結合)

  • ロック時間を最小化したい場合に適しています。
  • 断片化が軽度な場合に有効。

3. 表領域(TABLESPACE)の断片化を整理する

テーブルやLOB列を頻繁に更新するシステムでは、表領域自体が断片化することもあります。

■ ① SHRINK SPACE

  • ROW MOVEMENTを有効にすることで、Oracleが行を詰め直して空き領域を開放。
  • 注意:一時的にUNUSABLEインデックスが発生する場合あり。

■ ② MOVE文で物理再配置

  • SHRINKで効果が薄い場合に実施。
  • 再構築後はインデックスも必ずREBUILDが必要です。

4. メンテナンス運用の自動化例(スケジュール実行)

毎週末にインデックス再構築を自動実行する場合の例です。

これにより、定期的な断片化対策を自動化できます。


5. SHRINK実施時の注意点

注意点内容
LOB列が含まれる場合SHRINK対象外(別途 ALTER TABLE ... MOVE LOB が必要)
外部キー制約SHRINK中に一時ロックが発生する可能性あり
アーカイブログモードSHRINKはREDO生成量が多く、ログ容量に注意

6. パフォーマンス改善の効果確認

再構築後は DBMS_STATS.GATHER_TABLE_STATS で統計を更新し、SQLの実行計画を比較してみましょう。

再構築により、アクセスパスがINDEX RANGE SCANに戻る/I/Oコストが半減するケースが多く報告されています。


まとめ

ポイント内容
✅ インデックス断片化は放置するとI/Oコスト増大BLEVELとLEAF_BLOCKSで確認可能
✅ 軽度なら COALESCE、高度なら REBUILDONLINEオプションで業務影響を最小化
✅ 表の断片化は SHRINK や MOVEで解消LOB列・外部キー制約に注意
✅ 定期ジョブ化で自動化DBMS_SCHEDULERで毎週再構築可

Oracleの断片化メンテナンスは、「どの程度の断片化で行うか」を定期的にモニタリングすることが重要です。
DBの運用年数が長いほど、「再構築する勇気」も性能チューニングの一部と言えます。

著:小田 圭二, 著:杉田 敦史, 著:山本 裕美子, 著:辻井 由佳, 著:寺村 涼, 監修:小田 圭二
¥2,277 (2025/10/14 23:18時点 | Amazon調べ)
\楽天ポイント4倍セール!/
楽天市場
著:渡部 亮太, 著:舛井 智行, 著:岡野 平八郎, 著:峯岸 隆一, 著:日比野 峻佑, 著:相川 潔, 監修:株式会社コーソル
¥3,105 (2025/10/14 23:18時点 | Amazon調べ)
\楽天ポイント4倍セール!/
楽天市場

コメント

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