我使用Azure Elastic Job Agent创建了一个 SQL 维护作业,步骤如下:
EXEC jobs.sp_add_jobstep @job_name = @jobName,
@step_name = 'Optimize indexes and statistics',
@command=N'
EXECUTE dbo.IndexOptimize
@Databases = ''USER_DATABASES'',
@FragmentationLow = NULL,
@FragmentationMedium = ''INDEX_REORGANIZE,INDEX_REBUILD_ONLINE'',
@FragmentationHigh = ''INDEX_REBUILD_ONLINE'',
@FragmentationLevel1 = 10,
@FragmentationLevel2 = 30,
@MinNumberOfPages = 10,
@TimeLimit = 3600,
@UpdateStatistics = ''ALL'',
@OnlyModifiedStatistics = ''Y'',
@SortInTempdb = ''Y'',
@MaxDOP = 1,
@LogToTable = ''Y''
',
@credential_name = @jobStepCredName,
@target_group_name= @targetGroupName,
@retry_attempts = 0,
@step_timeout_seconds = 3600,
@max_parallelism = 1 -- IMPORTANT! We don't want to run index optimization on multiple databases at the same time
该代码使用 Ola Hallengren 提供的存储过程dbo.IndexOptimize。
该作业计划每天早上 5 点运行,每周失败一到两次。失败的原因是 Azure 弹性作业代理的内部问题:“作业服务在此任务进行时重新启动。”。Azure 的服务仍处于预览阶段,因此预计会出现内部服务错误。
我当前的解决方案是将 @retry_attempts 设置为大于 0 的某个数字,以便 Job Agent 可以重试该步骤,但是我不确定重试失败的步骤以进行索引优化是否是个好主意。
特别是,我不确定如果 INDEX REBUILD、INDEX REORGANIZE 或 UPDATE STATISTICS 进程被取消或终止,它们会发生什么情况。
所以总结一下,我有以下问题:
- 如果步骤失败,重试索引维护是个好主意吗?
- 当 INDEX REBUILD、INDEX REORGANIZE 或 UPDATE STATISTICS 进程失败或终止时会发生什么。
感谢您对此事的反馈。