Minha análise de WaitStats do nosso Banco de Dados SQL do Azure está mostrando WRITELOG e HADR_SYNC_COMMIT como contador de espera mais alta. Este é um recurso Premium 250 eDTU.
Roteiro
SELECT TOP (10) wait_type,
CAST (([wait_time_ms] / 1000.0) AS DECIMAL (16, 2)) AS [WaitS],
CAST (100.0 * [wait_time_ms] / SUM([wait_time_ms]) OVER () AS DECIMAL (16, 2)) AS [Percentage]
FROM sys.dm_db_wait_stats
ORDER BY [Percentage] DESC;
Não consigo encontrar muitas informações sobre como resolver isso no banco de dados SQL do AZure.
Qualquer ajuda é apreciada.
Obrigado
WRITELOG está aguardando confirmação para que os registros de log de sua transação sejam protegidos em disco e HADR_SYNC_COMMIT está aguardando confirmação para que os registros de log de sua transação sejam enviados pela rede para uma réplica secundária e protegidos para disco. Portanto, são esperas muito, muito semelhantes.
Ambos indicam que seu aplicativo está cometendo muitas transações, talvez muitas.
E no premium seu arquivo de log está em uma unidade flash local com latência muito baixa, então sofrer muitas esperas de WRITELOG sugere que há algo que precisa ser corrigido em seu aplicativo.
Se você tiver algum processo que execute INSERT, UPDATE ou DELETE de linhas únicas em um loop apertado, considere envolvê-los em uma transação explícita, para que você só precise esperar que o log de transações seja liberado no final.
Como sempre , o Query Store é seu amigo e pode mostrar as esperas por consulta, e você também pode analisar as esperas por sessão em sys.dm_exec_session_wait_stats para ver quais partes de sua carga de trabalho estão sofrendo essas esperas.
Você pode ter uma noção melhor de quanto seus clientes estão esperando comparando o tempo decorrido da sessão e o tempo de CPU com os tempos de espera. POR EXEMPLO