Ultimamente, temos tido muitos problemas de desempenho do banco de dados e tenho tentado descobrir se consigo descobrir o porquê. Nós não temos um DBA (eu sou desenvolvedor de software), então eu meio que estou torcendo por ele, e muito do que eu acho on-line me parece uma língua estrangeira.
Fomos reiniciados o SQL Server todas as manhãs porque é a única maneira de operar durante o dia útil. Notei que todas as manhãs, por volta das 5 horas da manhã, começamos a receber essa mensagem a cada dois minutos no log:
FlushCache: limpou 11848 bufs com 7432 gravações em 97168 ms (8139 novos bufs sujos evitados) para db 9: 0
último objetivo pendente: 4, avgWriteLatency 32
rendimento médio: 0,72 MB / s, saturação de E / S: 11635, comutadores de contexto 18849
Os números diferem a cada vez, é claro, mas é a mesma mensagem repetidamente nesse padrão até eu reiniciar o servidor. Não tenho certeza de como interpretar isso, tenho tentado pesquisar no Google e tudo o que reuni é que isso significa que pode haver algo errado com a E / S e que algo está demorando mais do que deveria. Recentemente, mudamos para o uso do SSD, então não achei que fosse um problema de gravação.
Alguém poderia lançar alguma luz sobre isso?
fonte
Respostas:
A mensagem FlushCache no log de erros é causada pelo log do ponto de verificação e, nesse caso, por um ponto de verificação longo (que é definido como um ponto de verificação que está demorando mais que o intervalo de recuperação). Seja logado ou não, o comportamento é diferente nos períodos anteriores a 2012 e 2012+. Antes do SQL Server 2012, para obter o log do ponto de verificação, seria necessário ativar um sinalizador de rastreamento (T3504). Porém, a partir do SQL Server 2012, essa mensagem é registrada por padrão quando um ponto de verificação longo é encontrado.
Agora, quanto à questão de "isso é realmente ruim ?" , você realmente precisa começar a analisar esses números, considerando o contexto deles. Foram necessários mais de 97 segundos para liberar apenas cerca de 93 MB de buffers sujos. Parece que isso pode ser uma mistura de grande quantidade de rotatividade de dados (durante o próprio ponto de verificação em si, cerca de 64 MB de buffers também foram sujos) e potencialmente de armazenamento que não acompanha a modificação dos dados e / ou o restante da carga de trabalho de E / S.
O que eu faria é verificar a integridade do seu subsistema de armazenamento , analisar as esperas e obter uma imagem geral do desempenho da instância. Dê uma olhada nos contadores de perfmon de disco lógico e veja qual é a rotatividade geral de E / S com taxa de transferência , latência e IOps . Isso ajudará você a criar uma imagem mais vívida do desempenho dos discos. Se você tem a capacidade de avaliar o seu armazenamento, se ainda não o baselou, deverá ver do que esses volumes em questão são capazes (o SQLIO é um ótimo utilitário para isso) e o que eles estão fazendo agora (é bom ter uma linha de base de referência quando os volumes foram elevados para comparar com uma referência atual).
Aqui está um ótimo artigo explicando esta mensagem - Como funciona: quando a mensagem FlushCache é adicionada ao log de erros do SQL Server?
EDIT : relendo sua pergunta, eu devo ter perdido este comentário:
Veja o que está acontecendo no seu armazenamento no momento, conforme as orientações acima. Isso soa como uma operação agendada de livro didático que está afetando o armazenamento, causando um prejuízo e um desempenho "longo" no ponto de verificação.
fonte