O que posso adicionar a um servidor para acelerar as restaurações do SQL?

8

Eu tenho um banco de dados SQL de 2,8 TB (principalmente arquivos de dados, cerca de 400 GB de arquivos de log) que atualmente leva cerca de 9 horas para restaurar. Esse banco de dados é usado para fins de teste e deve ser excluído e restaurado a partir de um backup entre cada execução, para garantir que estamos sempre começando do mesmo ponto.

Minha pergunta é: o servidor atualmente possui 12 núcleos e 92 GB de RAM, com um subsistema de disco RAID 5 no qual o banco de dados está. Quais áreas geralmente causam gargalos nos processos de restauração do SQL? É o disco, memória ou CPU?

Sean Long
fonte
3
De que mídia de backup você está restaurando? A propósito, o RAID 5 incorre em uma penalidade de gravação pesada quando comparado com a maioria dos outros níveis de RAID, portanto, isso pode não ser o melhor para testes de desempenho.
precisa
Os .baks (8 deles divididos) estão no mesmo array RAID 5 para o qual estão sendo restaurados, o que me faz perceber que provavelmente posso lidar com isso melhor no futuro. Não tenho outra matriz grande o suficiente para armazenar todos os .baks, mas posso dividi-los em diferentes unidades conectadas diretamente. Além disso, um bom argumento sobre o RAID 5. Estou ciente disso, mas ainda não estamos fazendo testes de estresse, por isso não há problema se houver gargalos na unidade de disco agora durante os testes de carga reais. Uma vez que temos um pouco mais adiante, vamos aumentar o desempenho do disco através de SAN, RAID 0 ou RAID 1 + 0
Sean Long
2
Certamente você está sofrendo indevidamente de ter os backups na unidade que você está restaurando também. Quantos discos no seu RAID5 atual?
Mark Storey-Smith
Então você está usando compressão, eu assumo. Quais outras opções de backup você está usando? Como seus dados são particionados? Você é capaz de distribuir dados de forma inteligente entre grupos de arquivos (você pode apenas fazer backups e restaurações de grupos de arquivos nos dados alterados)?
swasheck
O problema é que os testes atingem uma porcentagem muito grande do banco de dados; portanto, teríamos que restaurar vários grupos de arquivos (e os testes mudariam com base nas necessidades e no desenvolvimento da carga de trabalho). Portanto, teríamos que examinar constantemente a composição de teste e restaurar os grupos de arquivos específicos. Embora seja uma opção, não tenho certeza se isso nos daria muito tempo economizado.
Sean Long

Respostas:

6

Seu principal gargalo em uma restauração será a E / S do disco. Para corrigir isso, você basicamente precisa de discos mais rápidos ou de uma configuração diferente. Eu não sei o suficiente sobre RAID ou SANs para sugerir alguma coisa lá. Você pode até considerar SSDs. Eles são incrivelmente rápidos. Eu não gostaria de usá-los em algo que não seja recriado regularmente (o tempdb é sempre um bom candidato para isso), mas, como você o restaura com frequência, pode ser bom. Por outro lado, você provavelmente deseja garantir que o servidor de teste esteja o mais próximo possível do servidor de produção, se estiver realizando testes de desempenho.

Existem algumas outras coisas que você pode fazer para se ajudar. Primeiro comprima seus backups se você ainda não estiver. Obviamente, isso pressupõe o SQL 2008 ou superior. Isso reduzirá não apenas o espaço em disco para armazenar o backup, mas também o IO para lê-lo. Há um custo de CPU envolvido, portanto, esteja ciente. Também não exclua seu banco de dados, apenas restaure-o. Dessa forma, os arquivos já estão no lugar e não há sobrecarga para criá-los. Você pode ativar a inicialização instantânea de arquivos (é uma permissão no nível do servidor) para acelerar drasticamente a criação / crescimento de arquivos para o seu arquivo de dados, mas não funcionará no seu arquivo de log.

Kenneth Fisher
fonte
Boas informações, não percebi que restaurar sobre o existente é melhor do que remover / restaurar de um backup. Já estamos usando a compactação e estou planejando verificar se a inicialização instantânea de arquivos está ativada para a conta que está restaurando. Eu realmente aprecio a clareza da sua resposta, obrigado!
Sean Long
Verifique se a inicialização instantânea de arquivos também está ativada na conta que está executando o SQL Server. Para um banco de dados pequeno, provavelmente não é tão importante, mas para algo do tamanho que você está vendo, isso pode fazer uma grande diferença.
Kenneth Fisher
Boa decisão. Também obrigado por perceber que o teste de desempenho nem sempre significa teste de estresse (e que estou bastante confinado pela maneira como minha configuração de produção está definida atualmente).
Sean Long
OT: "considere os SSDs. ... eu não gostaria de usá-los em algo que não é recriado regularmente" ... por quê?
19313 Martin
Eu ainda estaria nervoso com o fracasso deles. Tudo o que li disse para usá-los em bancos de dados como tempdb, que são recriados toda vez que a instância é iniciada, mas não para bancos de dados de usuários comuns. Embora eu tenha certeza que isso está mudando com o tempo.
Kenneth Fisher
7

Não faça um backup e restauração; use instantâneos do SQL Server. É preciso muito espaço em disco para armazenar um arquivo esparso do mesmo tamanho dos arquivos que você capturou instantaneamente, mas a reversão é centenas de vezes mais rápida.

Eles estão disponíveis nas edições SQL Server Enterprise e SQL Server Developer.

Mark Henderson
fonte
É uma boa ideia, e se esse fosse outro servidor que não fosse um servidor de teste de desempenho, parece ser um ótimo caminho a percorrer. No entanto, parece que os instantâneos do banco de dados não funcionarão, pois causará uma sobrecarga adicional no banco de dados de origem, o que não posso ter. O teste que está sendo realizado é o de desempenho (carga, estresse etc.), portanto, precisamos evitar qualquer coisa externa que possa causar estresse.
Pessoalmente, não notei nenhuma diferença de desempenho em ter um instantâneo, mas acho que a cópia na gravação tem alguma sobrecarga; não conhecendo sua carga de trabalho, não posso julgar.
Mark Henderson
2
A sugestão de @SeanLong Mark é provavelmente a melhor opção para o seu cenário. O que eu acho que você está entendendo errado é quando e do que você tira a foto. O plano em um servidor de teste seria restaurar o banco de dados de teste do seu backup em tempo real, capturar instantaneamente o banco de dados de teste, executar seu ciclo de teste e, em seguida, reverter o instantâneo, enxaguar e repetir. Periodicamente, você pode retornar à etapa 1 e restaurar o backup ao vivo para testar novamente.
Mark Storey-Smith
Ah entendo. Eu pensei que a manutenção do instantâneo exigia uma quantidade constante de sobrecarga do banco de dados de teste, o que afetaria nossos testes de carga (muito pesados ​​de gravação / leitura). Não me importo se nossa carga de trabalho estiver causando o gargalo na unidade de disco, só não quero que um fator externo (que eu pensava que o snapshot db seria) causasse.
Sean Long