数据库SQL Server 2017 Enterprise CU16 14.0.3076.1
最近,我们尝试从默认的“索引重建”维护作业切换到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'
性能极度下降。使用100ms之前的一条更新语句IndexOptimize
之后(使用相同的计划)花费了78.000ms,并且查询的执行情况也差了几个数量级。
由于这仍然是一个测试数据库(我们正在从Oracle迁移生产系统),因此我们恢复为备份并禁用IndexOptimize
,一切恢复正常。
但是,我们想了解与可能导致这种极端性能下降IndexOptimize
的“正常” Index Rebuild
行为有何不同,以确保一旦投入生产就可以避免这种情况。关于寻找什么的任何建议将不胜感激。
update语句执行速度慢时的执行计划。即
在IndexOptimize
实际执行计划之后(尽快推出)