A reinicialização do servidor em um agendamento seria uma boa ideia para desempenho?

14

Eu estou querendo saber se a reinicialização de um servidor em um agendamento seria uma boa ideia para o desempenho.

Digamos que queremos reinicializar o servidor às 02:00 por 2 noites.

O servidor aqui é Windows Server 2008 R2 . Principalmente, o SQL Server e o IIS 7.5 (quase 15 aplicativos em execução) estão sendo executados nesse servidor. O servidor tem 4 GB de memória.

    
por tugberk 22.09.2011 / 13:22

11 respostas

32

Embora eu concorde que não há nada errado com a reinicialização da caixa, por si só, com base no seu comentário de que o SQL Server Agent está parando, eu recomendaria uma análise de causa raiz adicional. Os serviços geralmente não param, e os serviços do SQL Server Agent não agiram dessa maneira na minha experiência, normalmente.

Acho que você faria bem, além de reinicializar, para examinar os logs de eventos e executar um log de contador de desempenho de longo prazo que possa ser analisado com Análise de desempenho de logs (PAL) para ver se "vê" algo errado. Você deve tentar, se nada mais, correlacionar os eventos associados ao SQL Agent com outros fatores.

    
por 22.09.2011 / 13:35
38

Se você estiver procurando reinicializar o computador para melhorar o desempenho, isso provavelmente significa que, eventualmente, você está enfrentando problemas de gerenciamento de memória.

O cache é bom

No mínimo, a reinicialização dos servidores prejudicaria o desempenho (e o tempo de atividade, é claro) em um ambiente ideal . Um dos fundamentos do desempenho na computação é aproveitar o cache (ter dados disponíveis na memória rápida). Cada vez que você reiniciar, você explode seu cache. Isso vale tanto para o SQL Server quanto para o IIS. Embora você possa não ter o ambiente ideal, o seguinte deve ajudar a guiá-lo para uma opção melhor do que reinicializar o servidor em uma programação.

Vazamentos de memória do IIS?

Agora você mencionou que este é o IIS 7.5. Embora eu ache deprimente, muitos aplicativos da web executados no IIS 7.5 têm vazamentos de memória que o padrão no IIS é reiniciar o aplicativo a cada X minutos e desligá-lo se um pool de aplicativos estiver ocioso. O ideal é consertar os vazamentos de memória - mas, se você não puder, poderá ajustar o estas configurações , que incluem limites de memória e temporizadores. Você pode usar o perfmon para descobrir qual processo w3wp está usando a memória. É um pouco doloroso, mas você pode vinculá-lo ao pool de aplicativos com %systemroot%\system32\inetsrv\APPCMD list wps .

Memória SQL

Voltando ao armazenamento em cache, o SQL terá a memória que puder. Você pode limitar isso nas propriedades do SQL Server. Se você não limitar a memória e também estiver executando o IIS na caixa, eles poderão começar a disputar o desempenho de eliminação de memória. Este excelente artigo aborda isso em detalhes: Guia do Sysadmin do Microsoft SQL Memória .

Saldo

Como você tem o IIS e o SQL na mesma caixa, você precisará equilibrar o uso de memória. Se você não fizer isso, poderá obter memória que provavelmente será usada novamente em disco - o que é um lugar terrível para se estar (deve haver contadores de desempenho para a atividade de troca). Usando as configurações de Reciclagem do IIS e os limites de memória SQL, você deve conseguir tornar esse sistema estável. Para equilibrar isso, você pode precisar de mais memória que 4 GB. Além disso, se for uma opção, recomendo enfaticamente colocar o SQL Server em uma máquina dedicada - isso tornará o desempenho muito melhor e simplificará bastante as coisas.

    
por 22.09.2011 / 16:11
12

Eu não sou um proponente da reinicialização de servidores em um cronograma, especialmente não como meio de resolver algum problema subjacente. Se você precisar reinicializar esse servidor para resolver um problema de desempenho, o melhor curso de ação é encontrar a causa do problema e resolvê-lo. A reinicialização do servidor em uma programação regular está apenas ofuscando o problema subjacente.

    
por 22.09.2011 / 14:30
5

Se você tem vazamentos significativos de memória, então, por que não - caso contrário, reinicie mensalmente com atualizações.

    
por 22.09.2011 / 13:25
2

Se você realmente deseja reinicializar o servidor em um agendamento (por causa dos vazamentos de memória ou atualizações mencionados acima ou por qualquer outro motivo) - por que não examinar uma solução de cluster? Coloque outro servidor em paralelo, conecte-os a um balanceador de carga (até mesmo um simples) e você poderá reinicializá-los o quanto quiser, sem perder o tempo de serviço ou se preocupar com o fato de o servidor não inicializar. você estará fora.

    
por 22.09.2011 / 15:00
1

Não é uma idéia horrenda , mas se for apenas 'vodu', provavelmente não vai te ajudar muito.

No entanto, há duas razões para não permitir que este seja o fim de sua investigação para melhorar seu desempenho.

Uma é a escalabilidade futura. Se suas interrupções forem resultado de carga, um determinado número de consultas, uma consulta específica que atinge um cache, uma compilação de consulta ou um bug de indexação da btree ou outros problemas que atualmente ocorrem diariamente, eles provavelmente ocorrerão com mais frequência aumenta com o tempo. Belisque isso pela raiz.

O outro problema é que eu suspeito que você precisará interromper as solicitações de entrada dos serviços dependentes durante a reinicialização. Você acabou de criar uma cadência operacional. Toda vez que alguma tarefa diária precisa ser executada, ela acabará atrelada ao seu reinício. Em algum momento, você terá esses reinícios maciços que levam seis horas (não estou exagerando aqui, já vi isso acontecer em mais de uma empresa) e ninguém se lembrará de por que tudo precisa ser interrompido e reiniciado no meio da noite.

Minha recomendação seria monitorar o processo SQL e reiniciar conforme necessário. Como mencionado por um poster anterior, o SQL não tem o vazamento de memória que as pessoas acham que ele faz (e digo isso como uma pessoa que estava na equipe do MSSQL em meados dos anos 90). Você deseja que seu servidor de banco de dados use quase 100% de memória e CPU. Qualquer coisa menos é desperdiçar recursos.

    
por 23.09.2011 / 02:07
0

Se você tiver códigos mal escritos e vazamentos de memória, a reinicialização poderá ser a única maneira de retornar a memória alocada de volta ao pool. Se você tiver processos ligados à memória, essa atualização do pool para um estado limpo pode certamente melhorar o desempenho ... por um tempo. Mas esta é realmente uma maneira ruim de lidar com problemas de desempenho, a causa real deve ser fixada e fixada.

Caso contrário, deixe-o ser executado até que você precise de uma janela de manutenção para aplicar patches / aplicativos / restaurar dados. Este pode ser um bom momento para sugerir a um engenheiro de desempenho que dê uma olhada nos servidores em questão exatamente por que / quais problemas são convincentes.

    
por 22.09.2011 / 15:50
0

Embora não seja uma resposta completa per se , mas é uma opção viável adicionar mais RAM ao servidor? 4 GB é um pouco baixo para uma máquina IIS / SQL Server. Dependendo se é realmente uma unidade de servidor dedicado ou um desktop pressionado em serviço, você pode conseguir 8GB ou mais por um custo razoavelmente baixo. Concedido, se for um servidor, pode custar um pouco mais do que a RAM padrão de desktop, mas lhe daria um pouco mais de tempo entre as reinicializações forçadas.

Dizendo isso, veja se você pode limitar o SQL Server a usar no máximo 80% da RAM, ou verificar os logs para refinar exatamente o que está errado e / ou porque o serviço está parando.

    
por 22.09.2011 / 16:33
0

Não relacionado ao problema de SQL com o qual você está lidando se tiver servidores Windows e estiver seguindo qualquer tipo de rotina de correção, você reinicializará os servidores regularmente, sem ter que reinicializar "apenas porque". Quando trabalhei para a "GRANDE MULTINACIONAL", fomos obrigados a corrigir mensalmente e, como tal, todos os nossos servidores foram reinicializados mensalmente pelo menos uma vez.

    
por 22.09.2011 / 21:44
0

Estou fazendo isso em 3 servidores, 1 é nosso e 2 clientes. Eu o configurei por várias razões - um servidor 2008R1 tem muitas atualizações pendentes para instalação, mas eu não consigo instalá-las em lote, então estou instalando-o um por um todos os dias; outro servidor 2012R2 - para resolução de problemas de inicialização e alguns problemas de desempenho, etc. Eu não acho que é uma prática ruim para agendar uma reinicialização periódica, do outro disco Pode ajudar a controlar vários problemas de hardware e software, especialmente aqueles que estão envolvidos no início automático .

    
por 15.01.2015 / 14:34
-2

Eu conheço uma grande empresa que não está apenas reiniciando seus servidores Windows todas as noites, mas alguns deles são reinstalados a cada 24 horas. Para eles, é necessário por causa da memória dos alhos-porros nos problemas de software e segurança.

Parece que algumas empresas estão reiniciando a cada 24 horas - embora pareça estranho para mim como um administrador do Linux. Para deixar claro: eu nunca recomendaria fazer isso por causa de um problema de memória - rastreie o problema e resolva-o.

Se o uso da memória ficar fixo em 75% por meses, possivelmente não há necessidade de reinicializar - é totalmente normal que um aplicativo de servidor use toda a memória disponível - ele aumenta bastante o desempenho porque você precisa de menos IOs de disco se você usar a RAM para armazenar seus dados em cache.

    
por 22.09.2011 / 13:45