Temos tido muitos problemas de desempenho de banco de dados ultimamente e tenho tentado ver se consigo descobrir o motivo. Não temos um DBA (sou desenvolvedor de software), então estou meio que improvisando, e muito do que encontro online parece uma língua estrangeira para mim.
Reiniciamos o SQL Server todas as manhãs porque essa é a única maneira de funcionar durante o dia útil. Percebi que todas as manhãs, por volta das 5 da manhã, começamos a receber esta mensagem a cada dois minutos no log:
FlushCache: limpou 11848 bufs com 7432 gravações em 97168 ms (evitou 8139 novos bufs sujos) para db 9:0
última meta pendente: 4, avgWriteLatency 32
taxa de transferência média: 0,72 MB/s, saturação de E/S: 11635, alternâncias de contexto 18849
Os números diferem a cada vez, é claro, mas é a mesma mensagem repetidamente nesse padrão até que eu reinicie o servidor. Não tenho certeza de como interpretar isso, tenho tentado pesquisar no Google sobre isso 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 de SSD, então não achei que deveria ser um problema de gravação.
Alguém poderia dar uma luz sobre isso?
A mensagem FlushCache no log de erros é causada pelo log de ponto de verificação e, neste caso, por um ponto de verificação longo (que é definido como um ponto de verificação que está demorando mais do que o intervalo de recuperação). Seja registrado ou não, o comportamento é diferente em pré-2012 e 2012+. Antes do SQL Server 2012, para obter o log de ponto de verificação, você precisava ativar um sinalizador de rastreamento (T3504). Mas, 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 olhar para esses números considerando seu contexto. Você levou mais de 97 segundos para liberar apenas cerca de 93 MB de buffers sujos. Parece que isso pode ser uma mistura de muita rotatividade de dados (durante o ponto de verificação real, cerca de 64 MB de buffers também foram sujos) e potencialmente armazenamento que não está acompanhando a modificação de dados e/ou o resto da carga de trabalho de E/S.
O que eu faria é verificar a integridade do seu subsistema de armazenamento , observar as esperas e obter uma imagem geral do desempenho da instância. Dê uma olhada nos contadores de desempenho de disco lógico e veja qual é a variação geral de E/S com taxa de transferência , latência e IOps . Isso o ajudará a pintar uma imagem mais vívida de como os discos estão funcionando. Se você tiver a capacidade de comparar seu armazenamento, se ainda não o tiver definido como linha de base, 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 levantados 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, devo ter perdido este comentário:
Veja o que está acontecendo em seu armazenamento neste momento de acordo com as orientações acima. Isso soa como uma operação agendada de livro didático que está afetando o armazenamento, fazendo com que o desempenho do ponto de verificação sofra e seja "longo".