Jobs
如何處理 SQL Azure 彈性作業代理中失敗的索引優化 (Ola Hallengren) 步驟?
我使用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 程序失敗或終止時會發生什麼。
感謝您對此事的回饋。
在您的情況下,您應該將 @Resumable = ‘Y’ 選項添加到您的作業中,然後重新啟動或等待下一個計劃執行作業並完成,具體取決於時間和並發問題,因為在許多使用者使用時執行索引重建數據庫可能是個問題。
統計和索引重建在早期版本中是事務性的,因此如果更改索引重建語句失敗,結果將回滾並使用舊對象,但在 2017 年以後,有一個新選項WITH (RESUMABLE=ON)允許您恢復索引重建之後。
您還應該查看Ola 腳本中的 @WaitAtLowPriorityMaxDuration 和 @LockTimeout 參數,因為它們有助於最大限度地減少阻塞。