Estou tentando estimar o tempo de restauração para alguns bancos de dados de 1 TB ou mais no SQL 2012. É possível examinar as restaurações concluídas do ano passado e listar o tempo de conclusão? É um servidor remoto estranho do outro lado do mundo, tudo o que sei é que restaurações completas costumavam ser executadas todo início de mês, por algum motivo, mas não consigo descobrir como acessar o histórico.
relate perguntas
-
SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado
-
Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?
-
Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?
-
Quais são as principais causas de deadlocks e podem ser evitadas?
-
Como determinar se um Índice é necessário ou necessário
Essas informações não são rastreadas no MSDB, portanto, não há como encontrá-las lá (a menos que a operação de restauração esteja em sua própria etapa em um trabalho; nesse caso, você pode obtê-las em
msdb.dbo.sysjobhistory
).Se você não pode confiar no histórico do trabalho, e ele foi recente o suficiente, você pode aproximá-lo do rastreamento padrão, supondo que o sistema faça algo no banco de dados assim que a restauração for concluída (o que acontece em todos os meus testes, embora possa haver cenários em que isso não aconteça, como restaurar com norecovery ou restaurar um banco de dados somente leitura - ambos os cenários que não testei):
(Eu tentei as consultas nesta resposta do Stack Overflow , mas elas não foram tão eficientes - você é mais do que bem-vindo para experimentá-las também, para ver se elas atendem melhor às suas necessidades.)
Um cenário que testei em que essa estratégia não funciona é se todas as opções de estatísticas automáticas estiverem desativadas - já que a atividade que parece acontecer imediatamente após a restauração são algumas operações de estatísticas automáticas em tabelas do sistema como
syscolpars
esysschobjs
. Isso não acontece - mesmo para tabelas do sistema - quando as estatísticas automáticas estão desabilitadas.Se você tiver carimbos de data/hora de eventos subseqüentes do sistema imediatamente após a restauração, terá uma estimativa aproximada de quanto tempo a restauração levou, mas não será necessariamente muito precisa. Você não obtém esse tipo de informação mais precisa, é claro, que é o que obtém a saída na guia de mensagens se você executar uma restauração interativamente (e também é gravada no log de erros, desde que o sinalizador de rastreamento 3226 não esteja ativado ):
Mas você ainda pode extrair essas informações do log de erros (novamente, desde que tenha ocorrido recentemente o suficiente para não ter desaparecido). Se você não tiver o sinalizador de rastreamento 3226 habilitado, deverá ver todas as mensagens como acima no log de erros atual usando a seguinte consulta:
Agora, você precisa expandir seu conjunto de pesquisa depois de identificar o período de tempo desejado, pois a(s) mensagem(ns) acima não inclui(em) o nome do banco de dados. Assim, você pode rastrear três conjuntos de mensagens do log: quando o banco de dados foi marcado como restauração, quando a restauração foi concluída e a mensagem que inclui as páginas e a hora (observe que a última pode não estar alinhada com o delta entre o os dois primeiros se você estiver tentando obter granularidade abaixo do segundo).
Se você estiver atrás apenas de um único banco de dados ou de um padrão de nome de banco de dados, poderá adicionar um segundo filtro à segunda e à terceira consultas, por exemplo:
Se o sinalizador de rastreamento 3226 estiver ativado, você receberá apenas as duas primeiras mensagens e não a terceira.
Se você deseja solucionar problemas de tempos de restauração lentos, primeiro verifique se a Inicialização instantânea de arquivo está ativada (consulte aqui e aqui ) e você também pode monitorar ativamente o processo (além da
STATS
opção, que não considera desfazer/refazer , trabalho VLF ou MSDB/manutenção de histórico) ativando sinalizadores de rastreamento 3604/3605, 3004 e 3014. Consulte este artigo para obter mais detalhes.Você pode usar um pouco do script abaixo para visualizar os detalhes da última restauração de um banco de dados específico.
Eu estava vasculhando as interwebs em busca de uma consulta para me ajudar com esse problema e me deparei com esse tópico. Obrigado Aaron por confirmar que as tabelas msdb não capturam o tempo de conclusão da restauração, portanto, calcular a duração apenas dessa fonte é impossível! Além de usar o rastreamento padrão como Aaron descreve, se você tiver ERRORLOGs disponíveis na época em que a restauração foi iniciada e concluída, você pode calcular a duração de outra maneira com alguma tolice. Para mim, meus logs de erros eram muito mais antigos do que meus arquivos de rastreamento padrão, portanto, essa abordagem forneceu muito mais informações históricas para mim.
Criei um script abaixo que deve fazer isso para você, desde que você tenha as permissões elevadas adequadas para chamar os sps estendidos:
Espero que ajude alguém no caminho!