Temos um servidor de banco de dados de produção no SQL 2005. Tudo funciona normalmente por um tempo, mas depois de algumas semanas, vemos uma queda notável no desempenho. Somente reiniciar o SQL Server traz o desempenho de volta ao normal.
Alguns antecedentes:
- Executando mais de 1200 bancos de dados (principalmente inquilino único, alguns multilocatário). Antes de alguém dar uma palestra sobre como mudar para somente multi-inquilino, há razões válidas para manter essa estrutura ......
- RAM é de 16 GB. Após reiniciar, o SQL Server não demora muito para voltar ao uso de 15 GB.
- As conexões do banco de dados ativo têm cerca de 80 conexões - o que consideramos razoavelmente íntegro, considerando que há um pool de conexões por servidor web por processo -, portanto, não temos um problema de vazamento de conexão.
Tentamos várias coisas fora do horário de pico: - Execute DBCC DROPCLEANBUFFERS (com um CHECKPOINT) para limpar o cache de dados. Não tem efeito, nem apaga nenhum uso da RAM). - Execute o FREEPROCCACHE e o FREESYSTEMCACHE para limpar os planos de consulta e o cache de proc armazenado. Sem efeito
Obviamente, reiniciar o SQL Server não é ideal em um ambiente de produção ativo. Estamos perdendo alguma coisa. Alguém mais passou por isso?
UPDATE: April-28-2012 Ainda lutando contra esse problema. Reduzi a memória do SQL Server para 10 GB, apenas para descartar qualquer disputa com o sistema operacional. Estou chegando perto de reduzi-lo, mas preciso de ajuda do meu próximo passo.
Aqui está o que eu descobri, depois de reiniciar o SQL Server, o arquivo de paginação fica entre 12,3 GB e 12,5 GB. Vai ficar assim por dias. O total de threads do servidor fica entre 850 e 930 - também estável e consistente por dias a fio (o sqlserver está entre 55 e 85 deles, dependendo do tráfego).
Então, há "um evento". Não tenho idéia do que é o evento, não consigo vê-lo nos logs e não consigo ver nada consistente no dia da semana ou no horário em que ocorre, mas todo o arquivo de paginação suddent salta para 14.1 ou 14.2 GB e os threads saltam para entre 1750 e 1785.
Verificando o desempenho quando isso acontece, mais de 900 desses threads são sqlserver. Então eu vou ao sp_who2 para ver de onde vêm esses threads ... e há apenas as conexões db de 80 ou mais usadas.
Então .... alguém tem alguma idéia de como posso localizar onde está o restante desses 900 threads no SQL server e o que eles estão fazendo?
ATUALIZAÇÃO: junho-01-2012 Ainda lutando contra o problema. Para quem ainda está lendo isso, o problema com os threads subindo foi resolvido. Isso foi causado pelo software de backup ComVault autodated. Ele estava criando um encadeamento tentando fazer backup de bancos de dados que não estavam mais lá (estava mantendo uma lista de bancos de dados anteriores), em vez de apenas fazer backup dos bancos de dados atuais.
Mas - o problema ainda permanece, e temos que reiniciar toda semana, mais ou menos alguns dias. Trabalhando com a equipe da Rackspace para ver se eles conseguem lançar alguma luz.