Jobs

如何處理 SQL Azure 彈性作業代理中失敗的索引優化 (Ola Hallengren) 步驟?

  • September 12, 2019

我使用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 程序被取消或終止,它們會發生什麼情況。

所以總結一下,我有以下問題:

  1. 如果步驟失敗,重試索引維護是個好主意嗎?
  2. 當 INDEX REBUILD、INDEX REORGANIZE 或 UPDATE STATISTICS 程序失敗或終止時會發生什麼。

感謝您對此事的回饋。

在您的情況下,您應該將 @Resumable = ‘Y’ 選項添加到您的作業中,然後重新啟動或等待下一個計劃執行作業並完成,具體取決於時間和並發問題,因為在許多使用者使用時執行索引重建數據庫可能是個問題。

統計和索引重建在早期版本中是事務性的,因此如果更改索引重建語句失敗,結果將回滾並使用舊對象,但在 2017 年以後,有一個新選項WITH (RESUMABLE=ON)允許您恢復索引重建之後。

您還應該查看Ola 腳本中的 @WaitAtLowPriorityMaxDuration 和 @LockTimeout 參數,因為它們有助於最大限度地減少阻塞。

引用自:https://dba.stackexchange.com/questions/233673