No último sábado à noite, nosso site ficou fora do ar por cerca de 10 minutos. A análise dos logs mostrou os seguintes erros no SQL Server principal (em um par espelhado), durante a interrupção e não fora da interrupção:
- 06/06/2015 23:14:41,spid[vários],Desconhecido,Tempo esgotado durante a espera da trava: class 'ACCESS_METHODS_DATASET_PARENT' id [vários] tipo 4 Tarefa [vários]: [vários] tempo de espera 300 sinalizadores 0x1a possuindo tarefa [ vários]. Continuando a espera.
- 06/06/2015 23:06:54,spid19s,Desconhecido,Tempo esgotado durante a espera pelo tipo de trava de buffer 3 para a página (5:159076157) ID do banco de dados 6.
- 06/06/2015 23:06:54,spid19s,Desconhecido,Erro: 845 Gravidade: 17 Estado: 1.
- 06/06/2015 23:06:54,spid19s,Desconhecido, Ocorreu um tempo limite durante a espera pela trava do buffer - digite 3 bp 0000000518FA1200 página 5:159076157 stat 0xc0000b ID do banco de dados: 6 ID da unidade de alocação: 72057793340899328 tarefa 0x00000048: 0x0000004 tempo de espera 300 sinalizadores 0x100000001a possuindo tarefa 0x0000000004472BC8. Não continuar esperando.
Houve mais de uma centena do primeiro erro, principalmente antes, mas também depois dos outros, que ocorreram apenas uma vez. Esses erros ocorreram cerca de 2 horas depois de fazer um failover, aplicar atualizações do sistema operacional e retornar ao servidor original. Estamos executando nesses servidores há cerca de 2 anos e nunca vimos esse problema. O software que chama os servidores foi atualizado mais recentemente na tarde de quinta-feira (cerca de 55 horas antes da interrupção).
Estou encontrando muito pouca informação aqui ou no google sobre esse timeout. A coisa mais próxima que encontrei é a segunda resposta a esta pergunta: https://stackoverflow.com/questions/3149310/time-out-occurred-while-waiting-for-buffer-latch-type-2-error-in -sql-server , que fala sobre o erro de trava tipo 4 relacionado ao tempdb e causado por um bug em 2008, mas esse bug foi resolvido em 2009, antes do lançamento de 2008 R2. A versão exata relata como:
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
Os servidores usam SSDs Intel Enterprise espelhados para tudo (matrizes RAID 10 duplas para os dados) e nenhuma das unidades está relatando problemas. O volume tempdb tem 200 GB livres. Existem 20 arquivos tempdb (é um servidor BIG). O tráfego SQL caiu significativamente em relação ao pico de um ano atrás devido a otimizações no esquema, procedimentos armazenados e o software que chama o SQL, então provavelmente não é um problema relacionado ao carregamento.
O tipo 4 está definitivamente relacionado ao tempdb, como muitas postagens parecem indicar (o banco de dados 6 mencionado na mensagem de erro é nosso banco de dados principal, não o tempdb)? O que posso fazer para evitar que esse problema volte a acontecer?
Tivemos outra falha misteriosa do SQL ontem à tarde (sem logs para esse também - apenas uma mensagem de erro do SQL). Fizemos o failover para o espelho e executamos alguns testes de gravação neste sistema e descobrimos que este servidor tinha um módulo de memória que deve ter desenvolvido problemas recentemente. Eu acredito que esta é provavelmente a causa desses problemas. Obrigado a todos que analisaram isso!