データベースSQL Server 2017 Enterprise CU16 14.0.3076.1
最近、デフォルトのIndex RebuildメンテナンスジョブからOla Hallengrenへの切り替えを試みましたIndexOptimize
。デフォルトのインデックス再構築ジョブは問題なく数か月間実行されており、クエリと更新は許容可能な実行時間で機能していました。IndexOptimize
データベースで実行した後:
EXECUTE dbo.IndexOptimize
@Databases = 'USER_DATABASES',
@FragmentationLow = NULL,
@FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationLevel1 = 5,
@FragmentationLevel2 = 30,
@UpdateStatistics = 'ALL',
@OnlyModifiedStatistics = 'Y'
パフォーマンスが極端に低下しました。IndexOptimize
100ミリ秒かかった更新ステートメントは、その後78.000ミリ秒かかり(同じプランを使用)、クエリのパフォーマンスも数桁悪化していました。
これはまだテストデータベースであるため(Oracleから運用システムを移行しています)、バックアップにIndexOptimize
戻り、無効にしてすべてを通常に戻しました。
ただし、この極端なパフォーマンスの低下を引き起こす可能性のIndexOptimize
ある「通常」Index Rebuild
とは何が異なるのかを理解して、本番環境に移行したときにそれを回避できるようにします。何を探すべきかについての提案は大歓迎です。
遅い場合の更新ステートメントの実行計画。すなわち、
IndexOptimizeの実際の実行計画の後
(できるだけ早く)
違いを見つけることができませんでした。
高速な場合は同じクエリを計画する
実際の実行計画