MicrosoftはAzure SQL Database、Azure SQL Managed Instance(always-up-to-dateポリシー適用済み環境)、およびFabric SQLに対して、インデックス自動圧縮機能「Auto Index Compaction」をパブリックプレビューとして公開した。従来DBAが手動で組んでいた夜間インデックス再構築ジョブを、プラットフォーム側が自律的に代替する機能だ。

インデックス断片化との長い戦いに終止符

RDBMSを長く運用していると必ず向き合うのがインデックス断片化の問題だ。データの挿入・更新・削除を繰り返すうちにB-Treeのページが断片化し、クエリパフォーマンスが徐々に低下する。これを解消するために多くの現場では深夜に ALTER INDEX ... REBUILDREORGANIZE を走らせるジョブを組んでいる。

しかしこのアプローチには根本的な課題がある。REBUILD処理はテーブル全体を対象とするため、I/Oとメモリを大量消費する。クラウド環境では「深夜帯だからコストを気にしなくていい」という理屈は通らず、スロットリングや予期しないコスト増につながるリスクがある。また、REBUILDのオンラインモードは一部の旧エディションでは非対応だった歴史もあり、メンテナンスウィンドウの設計が複雑になりがちだった。

Auto Index Compactionの仕組み

Auto Index Compactionが従来のREBUILD/REORGANIZEと根本的に異なるのは、処理済みページのみを対象にするという設計思想だ。テーブル全体をスキャンして再構築するのではなく、実際にDMLが発生して断片化したページだけを継続的に圧縮・整理する。

これにより以下のメリットが生まれる:

  • リソース消費が大幅に少ない: 全件スキャンではないため、CPU・I/O・メモリへの影響が局所的に留まる
  • バックグラウンドで継続稼働: 特定の時間帯に集中させる必要がなく、アイドル時間を活用して常時最適化が進む
  • 設定が1コマンド: ALTER DATABASE [database_name] SET AUTOMATIC_INDEX_COMPACTION = ON のみで有効化完了

現時点でパブリックプレビューが適用されるのはAzure SQL Database、Azure SQL Managed Instance(always-up-to-dateポリシー)、Fabric SQLの3環境。オンプレミスのSQL Serverは対象外であることに注意が必要だ。

実務への影響:日本のDBAが今すぐ見直すべきこと

1. 既存のインデックスメンテナンスジョブの棚卸し

SQL Server AgentやAzure Automationで組んでいる夜間REBUILDジョブを一覧化しよう。Auto Index Compactionが有効な環境では、それらジョブを無効化または削除できる可能性が高い。ジョブの削除はメンテナンスコストの削減に直結する。

2. コスト試算の見直し

Azure SQL Database(サーバーレスモデル)を使っている場合、夜間の大規模REBUILDによるvCoreスパイクがコストに響いていたケースがある。Auto Index Compactionへの移行で、このスパイクを平準化できるかモニタリングしてみる価値がある。

3. Fabric SQL利用者にとっての意義

Fabric SQLはまだ採用初期の組織が多いが、インフラ管理の手間を最小化したいという需要に応える形でこの機能が提供されたことは注目に値する。Fabricの「フルマネージドで運用負荷ゼロ」というコンセプトと一貫している。

4. プレビュー中の動作検証を早めに

パブリックプレビューの段階では本番へのいきなり適用より、まずステージング環境で有効化し、クエリ実行計画やシステムDMVを通じてインデックスの状態推移を観察することをお勧めする。sys.dm_db_index_physical_stats で断片化率の推移を継続的に確認するのが基本だ。

筆者の見解

Azureのマネージドサービスが「運用を人間から引き受けていく」という方向性は、個人的にずっと正しいと思っている。インデックスのメンテナンスは重要だが、それ自体はビジネス価値を生む作業ではない。DBAやインフラエンジニアの時間が、本来集中すべきクエリ設計やスキーマ設計に向かうようになれば、チーム全体の生産性は上がる。

日本の現場では、「夜間ジョブが何十本も走っている」という運用をそのまま引き継いでいるケースが少なくない。クラウドに移行してもオンプレ時代の運用をそのまま持ってきている例を多く見てきた。こういう機能が出るたびに、「そのジョブ、本当に今でも必要ですか」と問い直す機会にしてほしい。

Azure SQLプラットフォームとしての進化の方向感は引き続き信頼できる。プレビューのうちに積極的に試して、GAに備えておく価値がある機能だと判断している。


出典: この記事は Stop Defragmenting and Start Living: Introducing Auto Index Compaction の内容をもとに、筆者の見解を加えて独自に執筆したものです。