web-dev-qa-db-ja.com

FileTableを使用してデータベースを復元する

SQL Server 2014(ビルド12.0.24457.0)データベースには2つのテーブルがあり、どちらも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

言う:

wait_type = 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が開始されました
復元(VDCFileStreamhespotest):バックアップセットを開いています
復元(VDCFileStreamhespotest):先頭のメタデータを処理しています
復元(VDCFileStreamhespotest) :計画の開始
バックアップ/復元バッファー構成パラメーター
メモリ制限:32767 MB 
 BufferCount:6 
バッファーのセット:2 
 MaxTransferSize:1024 KB 
最小最大転送サイズ:1024 KB 
合計バッファスペース:12 MB 
表形式のデータデバイス数:1 
フルテキストデータデバイス数:0 
ファイルストリームデバイス数:1 
 TXFデバイス数:0 
ファイルシステムI/Oアラインメント:512 
メディアバッファー数:6 
メディアバッファーサイズ:1024 KB 
エンコードバッファカウント:6 
復元(VDCFileStreamhespotest):有効なオプション:チェックサム= 1、圧縮= 1、暗号化= 0、バッファカウント= 6、MaxTransferSize = 1024 KB 
復元(VDCFileStreamhespotest):計画が完了しました
復元(VDCFileStreamhespotest):オフライン復元を開始します
復元(VDCFileStreamhespotest):DB_ID = 48としてデータベースに接続しましたコンテナの準備
復元(VDCFileStreamhespotest):コンテナの準備ができています
復元(VDCFileStreamhespotest):バックアップセットの復元
復元(VDCFileStreamhespotest):転送する推定合計サイズ= 45540792320バイト
 Restore(VDCFileStreamhespotest):データを転送しています
 1%処理されました。

ここで5日後、私たちは今その途中にいます: but the rest of the journey is going to be long

サーバー上に32GBのメモリを持つ45GBのデータベースを復元しようとしています。

あなたができることは、サーバーのメモリ(RAM)を増やして、遊ぶことです

  1. バックアップを複数のLUNまたはディスクにストライプ化します。
  2. BUFFERCOUNTBLOCKSIZEMAXTRANSFERSIZE バックアップパラメータをINITCOMPRESSIONとともに使用します(これを使用しています)出力からわかるように)バックアップを調整します。
  3. バックアップ時間を長くする可能性があるため、バックアップの実行中はCHECKSUMを使用しないでください。代わりに、バックアップを別のサーバーに復元してテストしてください。これにより、バックアップを復元できることを確認し、CHECKDBを実行して破損がないことを確認します。

現在のところ、6MBしかありません。これはかなり低い容量です。

1
Kin Shah

編集:
データベースを復元することができました。
サーバーの一部の設定を変更したところ、124分しかかかりませんでした。

私はここに設定を見つけました: https://support.Microsoft.com/da-dk/kb/2160002

そしてここに https://technet.Microsoft.com/en-us/library/cc778996.aspx

リンクが機能しなくなった場合:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemで、NtfsDisableLastAccessUpdateおよびNtfsDisable8dot3NameCreationを1に設定する必要があります。