Ok, para qualquer pessoa interessada,
Resolvemos o problema na questão há alguns meses, simplesmente instalando unidades SSD conectadas diretamente em cada um dos 3 servidores e movendo dados de banco de dados e arquivos de log da SAN para essas unidades SSD
Aqui está um resumo do que eu fiz para pesquisar sobre esse problema (usando recomendações de todos os posts desta pergunta), antes de decidirmos instalar unidades SSD:
1) começou a coletar contadores PerfMon para as seguintes unidades nos 3 servidores:
Disk F:
é um disco lógico baseado na SAN, contém arquivos de dados MDF
Disk I:
é um disco lógico baseado na SAN, contém arquivos de log LDF,
Disk T:
é conectado diretamente ao SSD, dedicado exclusivamente ao tempDB
A figura abaixo mostra os valores médios coletados por um período de 2 semanas
Disk I: (LDF)
tem uma E / S tão pequena e a latência é muito baixa, portanto, o Disco I: pode ser ignorado
Você pode ver que a Disk T: (TempDB)
E / S é maior em comparação com a E / S Disk F: (MDF)
e tem uma latência muito melhor ao mesmo tempo - 0 ms
Obviamente, há algo errado com o Disco F: onde os arquivos de dados residem, ele possui alta Latência e Fila Média de Gravação de Disco, apesar da baixa IO
2) Latência verificada para bancos de dados individuais usando a consulta deste site
https://www.brentozar.com/blitz/slow-storage-reads-writes/
Poucos bancos de dados ativos no servidor Primário tinham latência de leitura de 150-250 ms e latência de gravação de 150-450 ms
O interessante é que os arquivos de banco de dados mestre e msdb tinham latência de leitura de até 90 ms, o que é suspeito, devido ao tamanho pequeno dos dados e baixo IO - outra indicação de que algo está errado com a SAN
3) Não houve horários específicos
Durante o qual as mensagens "O SQL Server encontrou ocorrências ..."
foram exibidas Não havia manutenção ou ETL pesado em disco em execução quando essas mensagens foram registradas
4) Visualizador de Eventos do Windows
Não mostrou outras entradas que sugerissem o problema, exceto "O SQL Server encontrou ocorrências ..."
5) Começou a verificar as 10 principais consultas
De sp_BlitzCache (CPU, leituras, etc.) e omitindo sempre que possível
Não há consultas pesadas de super IO que gerem toneladas de dados e afetam fortemente o armazenamento, embora a
indexação em bancos de dados seja boa, eu mantenho isso
6) Não temos equipe SAN
Temos apenas 1 administrador de sistemas que ajuda no
caminho de rede da ocasião para a SAN - ele é de caminhos múltiplos, cada um dos 3 servidores possui 2 cabos de rede que levam aos comutadores e depois à SAN, e deve ser de 1 Gigabyte / s
7) Não houve resultados no CrystalDiskMark
Ou qualquer outro resultado de teste de benchmark de quando os servidores foram configurados, portanto, não sei quais devem ser as velocidades , e não é possível fazer benchmark neste momento para ver quais são as velocidades atualmente, pois isso afetaria a produção.
8) Configuração da sessão de eventos estendidos no evento do ponto de verificação para o banco de dados em questão
A sessão XE ajudou a descobrir que, durante as mensagens "O SQL Server encontrou ocorrências ...", o ponto de verificação aconteceu muito lento (até 90 segundos)
9) Log de erro do SQL Server
Contém entradas "FlushCache" "Saturação"
Elas devem aparecer quando o tempo do ponto de verificação para um determinado banco de dados exceder as configurações do intervalo de recuperação
Os detalhes mostraram que a quantidade de dados que o ponto de verificação está tentando liberar é pequena e está demorando muito para ser concluída, e a velocidade geral é de cerca de 0,25 MB / s ... estranho
10) Finalmente, esta imagem mostra a tabela de solução de problemas de armazenamento:
Parece que simplesmente temos um "Problema de hardware: - Trabalhe com o administrador do sistema / fornecedor de hardware para corrigir qualquer configuração incorreta da SAN, drivers antigos / defeituosos, controladores, firmware etc."
Em outra pergunta "Ponto de verificação lento ..." Ponto de verificação lento e avisos de E / S de 15 segundos no armazenamento flash
Sean tinha uma lista muito boa de quais itens devem ser verificados no nível de hardware e software para solucionar problemas
Nosso sysadmin não pôde verificar todas as coisas da lista; portanto, simplesmente escolhemos lançar algum hardware para esse problema - não foi nada caro
Resolução:
Pedimos unidades SSD de 1 TB e instalamos diretamente em servidores
Como temos grupos de disponibilidade, os arquivos de dados do banco de dados migraram da SAN para o SSD nas réplicas secundárias e, em seguida, efetuaram failover e os arquivos migrados no antigo primário. Isso permitiu um tempo de inatividade total mínimo - menos de 1 minuto
Agora, cada servidor possui uma cópia local dos dados do banco de dados e os backups completos / diff / log são feitos na SAN mencionada.
Não há mais mensagens "O SQL Server encontrou ocorrências ..." nos logs do Windows Event Viewer e desempenho de backups, verificações de integridade, recriações de índice, consultas etc. aumentou significativamente
Quanto desempenho em termos de latência de IO melhorou desde a migração dos arquivos de banco de dados para o SSD?
Para avaliar o impacto, o desempenho usado do Windows Performance Monitor registra 2 semanas antes da migração e 4 semanas após a migração:
Abaixo também está a comparação de estatísticas de latência no nível do banco de dados (usadas estatísticas de arquivos virtuais capturados do SQL Server antes e após a migração)
Sumário
A migração da SAN para SSDs locais conectados diretamente valeu a pena.
Ela teve um grande impacto na latência do armazenamento e melhorou muito mais de 90% em média (especialmente operações WRITE), e não temos mais picos de 20 a 50 segundos na IO
A mudança para o SSD local resolveu não apenas os problemas de desempenho de armazenamento, mas também a segurança dos dados que me preocupavam (se a SAN falhar, os três servidores perderão os dados ao mesmo tempo)