Gostaria de saber se a reinicialização de um servidor em uma agenda seria uma boa idéia para o desempenho.
Digamos que queremos reiniciar 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 em execução nesse servidor. O servidor possui 4 GB de memória.
Respostas:
Embora eu concorde que não há nada errado em reiniciar a caixa, por si só, com base no seu comentário de que o SQL Server Agent está parando, aconselho algumas análises adicionais de causa raiz. 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 reiniciar, examinar os logs de eventos e executar um contador de desempenho de longo prazo que você pode analisar com o Performance Analysis of Logs (PAL) para ver se "vê" algo errado. Você deve tentar, se nada mais, correlacionar os eventos associados ao SQL Agent parando com outros fatores.
fonte
Se você deseja reiniciar o computador para melhorar o desempenho, provavelmente significa que, eventualmente, você está enfrentando problemas de gerenciamento de memória.
O armazenamento em cache é bom
De qualquer forma, a reinicialização dos servidores prejudicaria o desempenho (e o tempo de atividade, é claro) em um ambiente mais ideal . Um dos fundamentos do desempenho em computação é tirar proveito do cache (ter dados disponíveis em memória rápida). Cada vez que você reinicia, você acaba com o cache. Isso vale para o servidor SQL e o IIS. Embora você possa não ter o ambiente ideal, o seguinte deve ajudá-lo a obter uma opção melhor do que reiniciar 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 os padrões no IIS são reiniciar o APP a cada X minutos e desligá-lo se um pool de aplicativos estiver ocioso. O ideal é corrigir os vazamentos de memória - mas se você não puder, poderá ajustar essas configurações, que incluem limites e temporizadores de memória. Você pode usar o perfmon para descobrir qual processo w3wp está usando a memória. É um pouco trabalhoso, mas você pode vinculá-lo ao pool de aplicativos
%systemroot%\system32\inetsrv\APPCMD list wps
.Memória SQL
Voltando ao cache, o SQL utilizará a memória possível. Você pode limitar isso nas propriedades do servidor SQL. Se você não limitar a memória e também estiver executando o IIS na caixa, eles poderão começar a brigar pelo desempenho de perda de memória. Este excelente artigo aborda isso em detalhes: Guia do Sysadmin para memória Microsoft SQL .
Saldo
Como você possui o IIS e o SQL na mesma caixa, precisará equilibrar o uso de memória deles. Caso contrário, você poderá obter a memória que provavelmente será usada novamente trocada para o disco - que é um local terrível para se estar (deve haver contadores de perfmon para a atividade de troca). Usando as configurações de Reciclagem do IIS e os limites de memória SQL, você poderá 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, eu recomendo fortemente colocar o servidor SQL em uma máquina dedicada - isso tornará o desempenho muito melhor e simplificará bastante as coisas.
fonte
Eu não sou um defensor da reinicialização de servidores em um cronograma, especialmente como forma de resolver algum problema subjacente. Se você precisar reinicializar este 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 apenas ofusca o problema subjacente.
fonte
Se você tem um vazamento significativo de memória, por que não? Reinicie-o mensalmente com atualizações.
fonte
Se você realmente deseja reiniciar o servidor em um agendamento (devido aos vazamentos ou atualizações de memória mencionados acima ou por qualquer outro motivo) - por que não procurar uma solução de cluster? Coloque outro servidor em paralelo, conecte-os a um balanceador de carga (mesmo que um simples faria) e você poderá reiniciá-los o quanto quiser, sem perder o tempo de serviço ou se preocupando com o fato de o servidor não inicializar e você estará fora.
fonte
Não é uma ideia horrenda , mas se for apenas 'vodu', provavelmente não vai ajudar muito.
No entanto, existem 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 resultarem de carregamento, um determinado número de consultas, uma consulta específica que atinge um bug de cache, compilação de consulta ou indexação de btree ou outros problemas que ocorrem atualmente diariamente, provavelmente ocorrerão com mais freqüência como carregamento aumenta com o tempo. Belisque isso pela raiz.
O outro problema é que suspeito que você precisará interromper solicitações recebidas de serviços dependentes durante a reinicialização. Você acabou de criar uma cadência operacional. Sempre que uma tarefa diária precisar ser executada, ela acabará ligada à sua reinicialização. Em algum momento, você terá essas enormes reinicializações contínuas que levarão 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 em um pôster anterior, o SQL não tem o vazamento de memória que as pessoas pensam (e eu 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 está desperdiçando recursos.
fonte
Se você tiver um código mal escrito 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 certamente poderá melhorar o desempenho .... por um tempo. Mas essa é realmente uma maneira ruim de lidar com problemas de desempenho, a causa real deve ser definida e corrigida.
Caso contrário, deixe-o funcionar até que você precise de uma janela de manutenção para aplicar patches / aplicativos / restaurar dados. Pode ser um bom momento para sugerir que um engenheiro de desempenho dê uma olhada nos servidores em questão para saber exatamente por que / quais problemas são convincentes.
fonte
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 for uma unidade de servidor realmente dedicada ou uma área de trabalho pressionada para o serviço, você poderá obtê-lo com 8 GB ou mais por um custo bastante baixo. É verdade que, se for um servidor, pode custar um pouco mais do que a RAM padrão da área de trabalho, mas ofereceria um pouco mais de tempo entre as reinicializações forçadas.
Dizendo isso, verifique se você pode limitar o SQL Server a usar no máximo 80% da RAM ou consulte os logs para descobrir exatamente o que está errado e / ou por que o serviço está sendo interrompido.
fonte
Independentemente do problema de SQL com o qual você esteja lidando, se tiver servidores Windows e seguir qualquer tipo de rotina de correção, reiniciará os servidores regularmente sem precisar reiniciar "apenas porque". Quando trabalhei na "BIG MULTINATIONAL", fomos mandatados para corrigir mensalmente e, como tal, todos os nossos servidores foram reiniciados mensalmente pelo menos uma vez.
fonte
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 não posso instalá-las em lote, por isso estou instalando uma por uma todos os dias; outro servidor 2012R2 - para solução de problemas de inicialização e alguns problemas de desempenho, etc. Não acho uma prática ruim agendar uma reinicialização periódica, por outro lado. Isso pode ajudar a rastrear vários problemas de hardware e software, especialmente aqueles envolvidos na inicialização automática .
fonte
Conheço uma grande empresa que não apenas reinicia seus servidores Windows todas as noites, mas alguns deles são reinstalados a cada 24 horas. Para eles, é necessário por causa da falta de memória nos problemas de software e segurança.
Parece que algumas empresas estão reiniciando a cada 24 horas - embora me pareça estranho como administrador de linux. Para deixar claro: eu nunca recomendaria fazer isso por causa de um problema de memória - localize o problema e resolva-o.
Se o uso da memória permanecer fixo em 75% por meses, é possível que não seja necessário reinicializar - é totalmente normal que um aplicativo de servidor use toda a memória disponível - isso aumenta muito o desempenho, pois você precisa de menos IO de disco se usar a RAM para armazenar em cache seus dados.
fonte