Temos um banco de dados SQL Server 2014 (build 12.0.24457.0) com duas tabelas, ambas são tabelas FileStream, a maior tem 2979466 linhas, SUM(cached_file_size)= 40564905472
.
Tentamos restaurar esse banco de dados em nosso servidor de teste, mas leva muito tempo. Nosso DBA desistiu após 14 dias.
Alguém mais tentou restaurar um banco de dados com tabelas FileStream, com mais de alguns arquivos?
Estou executando este script para monitorar o progresso:
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
Até agora eu tenho este resultado:
Em 2016-06-08 10:35:46, estamos 00,01% completos. Em 2016-06-08 14:22:46, estamos 39,26% concluídos. Estimamos terminar em: 2016-06-08 18:22:47 Em 2016-06-08 14:23:46, estamos 39,27% concluídos. Estimamos terminar em: 2016-06-08 18:23:47 Em 2016-06-08 14:24:46, estamos 39,28% concluídos. Estimamos terminar em: 2016-06-08 18:24:47 ... Em 2016-06-09 08:33:07, estamos 44,80% concluídos. Estimamos terminar em: 2016-06-10 09:33:08 Em 2016-06-09 08:34:07, estamos 44,80% concluídos. Estimamos terminar em: 2016-06-10 09:34:08 Em 2016-06-09 08:35:07, estamos 44,80% concluídos. Estimamos terminar em: 2016-06-10 09:35:08 Em 2016-06-09 08:36:07, estamos 44,81% concluídos. Estimamos terminar em: 2016-06-10 09:36:08 Em 2016-06-09 08:37:07, estamos 44,81% concluídos. Estimamos terminar em: 2016-06-10 09:37:08 Em 2016-06-09 08:38:07, estamos 44,81% concluídos. Estimamos terminar em: 2016-06-10 09:38:08 Em 2016-06-09 08:39:07, estamos 44,82% concluídos. Estimamos terminar em: 2016-06-10 09:39:08 ... Em 2016-06-10 08:12:01, estamos 47,86% concluídos. Estimamos terminar em: 2016-06-12 08:12:02 Em 2016-06-10 08:13:01, estamos 47,86% concluídos. Estimamos terminar em: 2016-06-12 08:13:02
Não exatamente rápido. Conseguiu passar de 42% para 45% em 13h45, pelo que com a velocidade atual parece terminar às 13h45 de 27-06-2016, ou seja, em 18 dias. Para 44GB!
SELECT top 10000 resource_description AS resource_description, *
FROM sys.dm_os_waiting_tasks
WHERE session_id=64
diz:
wait_type=
BACKUPTHREAD
... às vezes BACKUPIO
também
Então, configurei outra restauração para obter mensagens de restauração:
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'
Restore(VDCFileStreamhespotest): RESTORE DATABASE iniciado Restore(VDCFileStreamhespotest): Abrindo o conjunto de backup Restore(VDCFileStreamhespotest): processando os principais metadados Restore(VDCFileStreamhespotest): O planejamento começa Parâmetros de configuração do buffer de backup/restauração Limite de memória: 32767 MB Contagem de buffer: 6 Conjuntos de buffers: 2 MaxTransferSize: 1024 KB Tamanho mínimo de transferência máxima: 1.024 KB Espaço total do buffer: 12 MB Contagem de dispositivos de dados tabulares: 1 Contagem de dispositivo de dados de texto completo: 0 Contagem de dispositivos de fluxo de arquivos: 1 Contagem de dispositivos TXF: 0 Alinhamento de E/S do sistema de arquivos: 512 Contagem de buffer de mídia: 6 Tamanho do buffer de mídia: 1024 KB Contagem de buffer de codificação: 6 Restore(VDCFileStreamhespotest): Opções efetivas: Checksum=1, Compression=1, Encryption=0, BufferCount=6, MaxTransferSize=1024 KB Restore(VDCFileStreamhespotest): Planejamento concluído Restore(VDCFileStreamhespotest): Começando a restauração OFFLINE Restore(VDCFileStreamhespotest): Banco de dados anexado como DB_ID=48 Restore(VDCFileStreamhespotest): Preparando contêineres Restore(VDCFileStreamhespotest): os contêineres estão prontos Restore(VDCFileStreamhespotest): Restaurando o conjunto de backup Restore(VDCFileStreamhespotest): Tamanho total estimado para transferência = 45540792320 bytes Restore(VDCFileStreamhespotest): Transferindo dados 1% processado.
EDIT:
finalmente consegui restaurar o banco de dados.
Demorou apenas 124 minutos, quando alteramos algumas configurações no servidor.
Encontrei as configurações aqui: https://support.microsoft.com/da-dk/kb/2160002
e aqui https://technet.microsoft.com/en-us/library/cc778996.aspx
Caso os links parem de funcionar: em HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem NtfsDisableLastAccessUpdate e NtfsDisable8dot3NameCreation devem ser definidos como 1
Você está tentando restaurar um banco de dados de 45 GB com 32 GB de memória no servidor.
O que você pode fazer é aumentar a memória (RAM) no servidor e jogar com
BUFFERCOUNT
,BLOCKSIZE
,MAXTRANSFERSIZE
parâmetros de backup junto comINIT
&COMPRESSION
(você está usando, como vejo em sua saída) para ajustar seu backup.A partir de agora, você está recebendo apenas 6 MB, o que é muito baixo.