Sql-Server
使用 FileTable 恢復數據庫
我們有一個 SQL Server 2014 (build 12.0.24457.0) 數據庫,裡面有兩個表,都是 FileStream 表,最大的有 2979466 行,
SUM(cached_file_size)= 40564905472
.我們試圖將這個數據庫恢復到我們的測試伺服器上,但這需要很長時間。我們的 DBA 在 14 天后放棄了。
是否有其他人嘗試使用 FileStream 表恢復數據庫,其中包含更多文件?
我正在執行這個腳本來監控進度:
BEGIN TRY DROP TABLE #h END TRY BEGIN CATCH END CATCH DECLARE @r INT=1, @percent_complete NUMERIC(9,2), @Extimated_Completion_Datetime DATETIME2(0) CREATE TABLE #h ( start_time DATETIME2(0), percent_complete NUMERIC(9,2), Estimated_completion_time NUMERIC(9,2), HoursSinceStart NUMERIC(9,2), Extimated_Completion_Datetime DATETIME2(0), session_id INT, created_date datetime2(0)) DECLARE @d VARCHAR(19) , @e VARCHAR(max) WHILE @r > 0 BEGIN INSERT INTO #h SELECT start_time, percent_complete, CAST(ROUND(estimated_completion_time/3600000.0,1) AS DECIMAL(9,1)) AS Estimated_completion_time , CAST(ROUND(total_elapsed_time/3600000.0,1) AS DECIMAL(9,1)) AS HoursSinceStart , DATEADD(HOUR, CAST(ROUND(estimated_completion_time/3600000.0,1) AS DECIMAL(9,1)), GETDATE()) AS Extimated_Completion_Datetime , session_id , GETDATE() FROM sys.dm_exec_requests AS r WHERE r.session_id <> @@SPID AND r.session_id > 50 AND command LIKE 'restore database' SELECT @r = @@ROWCOUNT select top 1 @percent_complete=percent_complete, @Extimated_Completion_Datetime=Extimated_Completion_Datetime from #h ORDER BY created_date DESC SET @d = CONVERT(VARCHAR(19), @Extimated_Completion_Datetime, 121) SET @e = CONVERT(VARCHAR(19), GETDATE(), 121) + ' we are ' + LTRIM(@percent_complete) + '% complete. We estimate to finish at: ' + @d RAISERROR('At %s ', 10, 1, @e) WITH NOWAIT --WAITFOR DELAY '00:00:10' WAITFOR DELAY '00:01:00' END
到目前為止,我有這個結果:
在 2016-06-08 10:35:46,我們完成了 00.01%。 在 2016-06-08 14:22:46,我們完成了 39.26%。我們預計完成時間:2016-06-08 18:22:47 在 2016-06-08 14:23:46,我們完成了 39.27%。我們預計完成時間:2016-06-08 18:23:47 在 2016-06-08 14:24:46,我們完成了 39.28%。我們預計完成時間:2016-06-08 18:24:47 ... 在 2016-06-09 08:33:07,我們完成了 44.80%。我們預計完成時間:2016-06-10 09:33:08 在 2016-06-09 08:34:07 我們完成了 44.80%。我們預計完成時間:2016-06-10 09:34:08 在 2016-06-09 08:35:07,我們完成了 44.80%。我們預計完成時間:2016-06-10 09:35:08 在 2016-06-09 08:36:07,我們完成了 44.81%。我們預計完成時間:2016-06-10 09:36:08 在 2016-06-09 08:37:07,我們完成了 44.81%。我們預計完成時間:2016-06-10 09:37:08 在 2016-06-09 08:38:07,我們完成了 44.81%。我們預計完成時間:2016-06-10 09:38:08 在 2016-06-09 08:39:07,我們完成了 44.82%。我們預計完成時間:2016-06-10 09:39:08 ... 在 2016-06-10 08:12:01,我們完成了 47.86%。我們預計完成時間:2016-06-12 08:12:02 在 2016-06-10 08:13:01,我們完成了 47.86%。我們預計完成時間:2016-06-12 08:13:02
不完全快。它已經在 13:45 成功地從 42% 上升到 45%,所以按照目前的速度,它看起來會在 2016-06-27 13:45 或 18 天內完成。對於 44 GB!
SELECT top 10000 resource_description AS resource_description, * FROM sys.dm_os_waiting_tasks WHERE session_id=64
說:
等待類型=
BACKUPTHREAD
……有時
BACKUPIO
也是所以我設置了另一個恢復來獲取恢復消息:
DBCC TRACEON(3604, 3605, 3014); RESTORE DATABASE [VDCFileStreamhespotest] FROM DISK = N'\\dkrdsvdcp19\MSSQL_Backup\Full\Misc\VDCFileStream_backup_2016_06_07_180004_7123139.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 1 , move 'VDCFileStream' to 'P:\MSSQL\DPA\System\MSSQL10_50.DPA\MSSQL\DATA\UserDBs\VDCFileStream\VDCFileStreamDBhespo.mdf' , MOVE 'VDCFileStream_log' to 'P:\MSSQL\DPA\Log\Log02\VDCFileStream\VDCFileStreamDBhespo_log.ldf' , MOVE 'VDCFileStreamF1' to 'G:\VDCFileStream\FileStreamDatahespo'
恢復(VDCFileStreamhespotest):RESTORE DATABASE 已啟動 Restore(VDCFileStreamhespotest):打開備份集 Restore(VDCFileStreamhespotest):處理前導元數據 恢復(VDCFileStreamhespotest):計劃開始 備份/恢復緩衝區配置參數 記憶體限制:32767 MB 緩衝區計數:6 緩衝器組:2 最大傳輸大小:1024 KB 最小 MaxTransferSize:1024 KB 總緩衝區空間:12 MB 表格數據設備數:1 全文數據設備計數:0 文件流設備數:1 TXF 設備數:0 文件系統 i/o 對齊:512 媒體緩衝區計數:6 媒體緩衝區大小:1024 KB 編碼緩衝區計數:6 Restore(VDCFileStreamhespotest):有效選項:Checksum=1,Compression=1,Encryption=0,BufferCount=6,MaxTransferSize=1024 KB Restore(VDCFileStreamhespotest):規劃完成 恢復(VDCFileStreamhespotest):開始離線恢復 恢復(VDCFileStreamhespotest):附加數據庫為 DB_ID=48 恢復(VDCFileStreamhespotest):準備容器 恢復(VDCFileStreamhespotest):容器準備就緒 Restore(VDCFileStreamhespotest):恢復備份集 恢復(VDCFileStreamhespotest):估計要傳輸的總大小 = 45540792320 字節 恢復(VDCFileStreamhespotest):傳輸數據 1% 已處理。
您正嘗試在伺服器上使用 32GB 記憶體恢復 45GB 數據庫。
您可以做的是增加伺服器上的記憶體(RAM)並使用
- 將備份條帶化到多個 LUN 或磁碟。
- 使用
BUFFERCOUNT
,BLOCKSIZE
,MAXTRANSFERSIZE
備份參數和INIT
&COMPRESSION
(正如我從你的輸出中看到的那樣,你正在使用它)來調整你的備份。- 不要在備份時使用 CHECKSUM,因為它可能會延長備份時間。而是嘗試將備份恢復到不同的伺服器以進行測試 - 這將確認您能夠恢復它,然後執行 CHECKDB 以確認沒有損壞。
到目前為止,您只能獲得 6MB,這非常低。