Ola Hallengren 的 @DatabasesInParallel 參數有問題
我正在測試這個新參數
@DatabasesInParallel
,它似乎一次只能備份 1 個數據庫,但它並沒有明確說明這是文件中的限制,所以我想知道我是否做錯了什麼。我設置了 4 個數據庫,並且手動執行以下 4 個命令:
EXECUTE [dbo].[DatabaseBackup] @Databases = 'AdminDB', @Directory = N'\\499bsl01\sqldata_test$', @BackupType = 'FULL', @Verify = 'Y', @CleanupTime = 24, @Compress = 'Y', @CheckSum = 'Y', @DatabasesInParallel = 'Y', @LogToTable = 'Y', @Execute = 'Y' EXECUTE [dbo].[DatabaseBackup] @Databases = 'Pop', @Directory = N'\\499bsl01\sqldata_test$', @BackupType = 'FULL', @Verify = 'Y', @CleanupTime = 24, @Compress = 'Y', @CheckSum = 'Y', @DatabasesInParallel = 'Y', @LogToTable = 'Y', @Execute = 'Y' EXECUTE [dbo].[DatabaseBackup] @Databases = 'DaveTest_StackOverflow2010', @Directory = N'\\499bsl01\sqldata_test$', @BackupType = 'FULL', @Verify = 'Y', @CleanupTime = 24, @Compress = 'Y', @CheckSum = 'Y', @DatabasesInParallel = 'Y', @LogToTable = 'Y', @Execute = 'Y' EXECUTE [dbo].[DatabaseBackup] @Databases = 'DaveTest_SUPERUSER', @Directory = N'\\499bsl01\sqldata_test$', @BackupType = 'FULL', @Verify = 'Y', @CleanupTime = 24, @Compress = 'Y', @CheckSum = 'Y', @DatabasesInParallel = 'Y', @LogToTable = 'Y', @Execute = 'Y'
當我檢查 QueueDatabase 表時,我可以看到所有 4 個數據庫的 DatabaseOrder 和 RequestStartTime 列完全相同。但是,當您查看 DatabaseStartTime 列時,它會顯示前 2 個數據庫同時啟動,然後在第 2 個數據庫完成備份和驗證檢查之前,接下來的 2 個數據庫不會啟動。
這是我正在使用的參數的預期功能嗎?我希望使用此參數同時啟動所有 4 個數據庫。
**編輯 11/14:**更新了文章的標題/措辭
原始文章說它一次只備份 2 個數據庫,但實際上一次只備份 1 個數據庫。在我的測試中備份的第一個數據庫是如此之小,以至於我沒有意識到它幾乎立即完成,而第二個數據庫則開始了。但是你可以看到這個
在閱讀了 Ola 的最後一條評論後,我靈光一現,發現自己做錯了什麼並讓它發揮了作用。
由於我只是在測試這些命令,我從未真正將它們放入代理作業中——我認為它們會以相同的方式工作,只需同時手動執行它們。我剛剛將所有 4 個作業命令粘貼到查詢視窗中,然後執行。我認為這會起作用,但似乎即使它們在 QueueDatabase 表中都顯示相同的 RequestStartTime 也不起作用。
創建作業並設置單個計劃後,我可以看到 RequestStartTime 以毫秒為單位變化,但 DatabaseStartTime 對於所有 DB 都是相同的。
下面的螢幕截圖顯示了我今天測試的 QueueDatabase 表(粉紅色),當我創建代理作業時它是成功的。11/8(藍色)的測試是在我手動執行查詢視窗中的命令時進行的。
我在一封電子郵件中詢問 Ola,如果這個功能在查詢視窗中手動執行時不起作用,是否有意義,下面是他的回复:
當您在一個查詢視窗中執行所有命令時,您永遠無法獲得併行執行(因為 T-SQL 不支持該功能)。
如果您想在 SSMS 中對其進行測試,那麼您需要我們 4 個不同的查詢視窗,然後快速開始執行所有這些視窗。