A reinicialização do SQL Server o acelera?

22

Notei que alguns DBAs reiniciam o SQL Server com muita frequência, às vezes até à noite. Eu acredito que eles fazem isso para liberar um pouco de memória, ou talvez para acelerar as consultas também. Sei que, após uma reinicialização, os planos de consulta precisam ser recompilados, mas mesmo incluindo isso, pergunto-me se há um benefício líquido para essa prática.

É verdade que reiniciar o SQL Server diariamente torna a execução mais rápida?

Nick Chammas
fonte

Respostas:

37

Reiniciar o servidor é provavelmente uma das coisas mais prejudiciais para o desempenho. Isso significa que você força um cache frio para dados, um cache frio para planos de consulta e todos os caches internos do SQL Server também são fragmentados no processo. Sem mencionar que, jogando fora todas as estatísticas coletadas nas DMVs das estatísticas operacionais, você diminui suas chances de investigar algo com êxito.

Não há orientação oficial para apoiar esta prática, nunca a vi mencionada em nenhum trabalho respeitável de boas práticas, nunca ouvi falar de um especialista respeitável que tenha mencionado isso como uma prática. Não faça isso.

Remus Rusanu
fonte
Discordo. O SQL Server está hospedado em um servidor Windows em que as correções de segurança e as atualizações do MS exigem reinicializações periódicas. Acredito que um melhor design do SQL é a chave para resolver problemas de desempenho e não depender de reinicializações do servidor, mas às vezes é uma etapa necessária.
Fandango68
27

Embora as outras respostas sejam boas, falta uma peça importante: o cache de arquivos do Windows.

No Windows de 64 bits, não há limite para a quantidade de memória que o Windows usará para armazenar arquivos em cache. O Windows pode esgotar completamente a memória do sistema e, nesse ponto, você começará a trocar para o disco. Foi documentado em alguns lugares:

Ao reiniciar o SQL Server, você força o SQL a desistir de memória, permitindo que o Windows obtenha mais e a paginação para temporariamente. O SQL será iniciado novamente com o uso de memória quase zero e aumentará gradualmente. Quando a caixa ficar sem memória novamente, a reinicialização ajudará temporariamente. Ao reiniciar todo o sistema operacional, você também forçará o uso do cache de arquivos do Windows.

A correção real: pare de copiar arquivos do servidor Windows ou limite a quantidade de cache de arquivos em uso com o Serviço de Cache Dinâmico de Arquivos, conforme documentado nas postagens acima.

Brent Ozar
fonte
3
O +1 estava ciente do problema, não sabia que o cache poderia ser limitado usando o serviço de cache dinâmico.
Mark-Storey-Smith
A prática de "fixar" a memória em um MIN e MAX (embora eles devam e possam ter exatamente a mesma quantidade de KB) ajudaria a garantir que o SQL Server consuma apenas uma quantidade predefinida de MIN / MAX RAM, permitindo outros serviços / aplicativos do Windows / pedidos de rede para continuar funcionando. Essa tem sido minha prática e funcionou bem. Quaisquer outros pensamentos?
11138 SnapJag
@ SnapJag - não necessariamente, porque o SQL não consome o valor mínimo imediatamente. O SQL inicia em zero e aumenta gradualmente com base na necessidade.
Brent Ozar
11

Se acelerar as consultas, pode estar envolvido o sniffing de parâmetros . Se um plano de porcaria é armazenado em cache e aplicado a chamadas subseqüentes inadequadas, o milagre da reinicialização permite que o plano comum / correto seja armazenado em cache. Se for esse o caso, existem maneiras infinitamente melhores de corrigir o comportamento, como outros indicaram. Mas até que eles parem de reiniciar a caixa, não há como executar a análise de causa raiz.

billinkc
fonte
Esta deveria ter sido a resposta aceita. O design adequado do SQL e do plano é crucial para evitar a necessidade de uma reinicialização do servidor, mas as reinicializações do servidor podem ser necessárias de qualquer maneira devido às políticas do servidor - como patches de segurança etc.
Fandango68
11

Você não deve reiniciar o SQL Server, a menos que tenha alterado as propriedades do serviço ou definido os rastreamentos de inicialização que deseja entrar em vigor imediatamente.

Como o @RemusRusanu afirmou muitos pontos, ele limpa muitos caches e faz com que o SQL Server execute muitos trabalhos de inicialização desnecessários .

Parece que este servidor não é um servidor SQL Server / banco de dados dedicado. É uma prática recomendada que um servidor de banco de dados de produção tenha apenas um propósito ... ser um servidor de banco de dados. Nesse caso, você reservaria memória e recursos suficientes para o sistema operacional e daria todo o resto para o SQL Server. Isso levaria você a não passar fome por outros aplicativos ou funções de servidor.

Thomas Stringer
fonte
2

Concordo com o sentimento de que, se você estiver fazendo tudo certo, talvez não seja necessário reiniciar / reiniciar o servidor MSSQL.
Para mim, isso se aplica ao cenário em que todos são competentes e você pode consertar qualquer coisa.

Eu não sou um DBA. Sou arquiteto de software e parte disso envolve a criação de esquemas de banco de dados inteiros do zero e, infelizmente , trabalhar com bancos de dados de terceiros sobre os quais não tenho absolutamente nenhum controle.
As pessoas, que criaram e mantêm um de nossos principais bancos de dados de terceiros, mal o tornaram funcional.

Eu mencionei que também não sou especialista em segurança ou engenheiro de rede?

  • Pelo menos uma atualização do sistema operacional Windows principal, atualização de segurança, atualização do BIOS, OS / MSSQL Service Pack ou atualização cumulativa do MSSQL será lançada a cada mês ou dois.
  • A aplicação oportuna significa Reiniciar / Reiniciar o servidor a cada trimestre.
  • Mesmo ao operar dentro de uma intranet, por que você não aplicaria atualizações de segurança?
  • Se eu tivesse permissão para ter SSL em nossos sites da Intranet da PHI, faria isso porque nenhuma rede é infalível. Eu sou paranóico, eu acho.


Para mim, a pergunta se torna: devo reiniciar o SQL Server com mais frequência a cada três meses?

Programação Reiniciar com a promessa de uma polegada extra de performance, é como dançar para a chuva.
Talvez venha, talvez não, mas você não saberá ao certo o que causou a chuva.

  • Se você notar um aumento significativo no desempenho após a reinicialização do servidor devido à manutenção regular, investigue por que isso acontece.
  • Se você estiver tendo problemas e não tiver certeza do que os está causando, então, à medida que você reduz suas variáveis, interrompe serviços e tarefas para encontrar algo como um vazamento de memória (em casos extremos como esse), talvez reinicie / reinicie o servidor com alguns serviços ativados desativado (ou rastreamentos ativados) ajudará você a descartar esses outros serviços como a causa.

Eu não como dizer que você nunca necessário reiniciá-lo para solucionar um problema ou verificar failover, mas eu faço tem um problema com Restarts agendamento para manter um problema de desempenho desconhecido ocorra aleatoriamente.

A única exceção é se você gerenciar um banco de dados de terceiros não autorizado onde reiniciá-lo a cada semana ou duas parece ser a única maneira de mantê-lo operacional e você não poderá consertá-lo ou mesmo tocá-lo.
Mesmo assim, você deve procurar correções, compartilhá-las com o proprietário e aumentar o inferno até que isso seja resolvido.

MikeTeeVee
fonte