Ola Hallengren DataBaseBackup 到 URL 導致文件大小不相等導致 IO 設備錯誤
自從我們將系統遷移到 Azure IAAS 以來,我們一直在使用 Ola 的維護解決方案和數據庫備份直接到 URL。我們有數 TB 的數據庫(大約 40% 的文件流數據),因此將備份拆分為多個文件,以使每個文件保持在 195GB 以下。直到最後幾週,完全備份開始失敗並出現 IO 設備錯誤,我們才遇到任何問題,告訴我文件大小大於 195GB 限制,所以我增加了 @NumberOfFiles 參數。這工作的第一周,下週它再次失敗,即使數據庫的大小只增長了幾 GB。我最終不得不將 10 添加到文件數參數中,並且備份成功完成。
問題是,寫入的大多數文件大約為 90GB,而 4 個文件大約為 180GB。有誰知道文件大小不相等的原因以及防止這種情況的方法?
EXECUTE [dbo].[DatabaseBackup] @Databases = '<dbname>', @URL = '<storage account>', @BackupType = 'FULL', @Compress = 'Y', @Verify = 'Y', @CheckSum = 'Y', @LogToTable = 'Y', @MaxTransferSize = 4194304, @Blocksize = 65536, @NumberOfFiles = 36
提前致謝
Ola 的所有過程都是呼叫 BACKUP 命令。即,您正在使用 Ola 的程序這一事實是無關緊要的。如果您想 100% 確定這一點,那麼只需選擇執行的備份命令(應該在 CommandLog 表中,或者使用跟踪的最壞情況)並直接執行(可能使用代理作業)。
我的猜測是你很不幸結合使用備份壓縮。即,某些備份執行緒碰巧遇到了壓縮不好的數據,因此該文件的大小變得比其他執行緒的文件大。
您可以通過關閉壓縮來驗證這一點,並看到您獲得了更均勻的文件大小。我知道由於數據庫大小,這可能不切實際,但也許您有一個較小的數據庫,具有相同的症狀,您可以對其進行此測試?我已經四處打聽了,我們會看看我是否可以確認我的理論。
我自己嘗試過,確實看到壓縮後文件大小的變化更大。
FWIW,在 7.0(引入條帶化時)中,備份執行緒將盡可能多的數據推送到目標(文件或磁帶)中,因為目標可以使用。這提供了最佳的備份吞吐量,但如果一個磁帶設備(或文件目標)恰好比另一個慢得多,則文件大小不均勻。該算法在 2000 年發生了變化,將數據均勻地分佈在備份文件中。我的假設是,數據如何傳播的決定是在壓縮之前完成的。
SQL Server 出於性能原因預先分配備份文件。當您使用壓縮時,它必須猜測您最終得到的大小。您最終可能會遇到這樣的情況:它嘗試預分配的數量超過了最終需要的數量,從而導致備份失敗。跟踪標誌 3042 改變了這一點。它使 SQL Server 動態分配儲存。我非常懷疑這會改變你的任何事情,但我想我會提到這一點,這樣你就可以知道跟踪標誌的作用,並且不要抱太大希望,以防你讀到跟踪標誌並決定測試它。