Estamos enfrentando problemas com a flutuação da fila REDO, pois temos uma configuração secundária legível.
Com base no meu entendimento em versões mais recentes do SQL Server, os threads de redo foram tornados paralelos. A versão atual é o SQL Server 2017 em execução na VM com 64 núcleos.
Estou vendo problemas ao selecionar consultas na execução secundária no mesmo cpu/scheduler em que os threads AG estão sendo executados. Estou assumindo que o thread AG produz seu agendador e fica em segundo plano para permitir que outras consultas sejam executadas. E acredito que este seja o problema porque as consultas que chegam parecem estar atingindo o mesmo cpu_id onde os threads AG estão fazendo o trabalho de refazer.
Exemplo abaixo: spid 91 é uma consulta selecionada em cpu_id 6 e ao mesmo tempo spid 123 e 144 threads em execução para AGs conforme encontrado em sys.dm_exec_requests dmv. A fila REDO começa a se acumular quando 91 apareceu.
Não sei se existe algum processo que faça suas consultas irem para núcleos diferentes em vez de um em que o thread de AGs possa estar em execução.
Podemos controlar isso para que as consultas atinjam outros agendadores e não um em que o AG esteja trabalhando?
Vejo muitas esperas em PARALLEL_REDO_TRAN_TURN quando as consultas são executadas no secundário enquanto os threads AG estão suspensos. Pode rastrear a ajuda do sinalizador conforme mencionado aqui
Pode haver muitos outros agendadores disponíveis. Não consigo entender por que determinado processo está travado no slot do Numa. Eu acho que as versões mais recentes têm todos os numas suaves habilitados, então isso faz um balde de 8 numas suaves. 8*8 agendadores para 64 disponíveis. Desabilitar o numa soft é uma boa ideia aqui?
O isolamento de banco de dados é RCSI, mas não acho que isso importe aqui porque internamente ele foi alterado para instantâneo com base no design de secundários legíveis.
Embora isso possa não ser a resposta que você está procurando, pois exige uma migração no final, você pode tentar executar sua carga de trabalho no SQL Server 2019 para poder usar " SQL Server 2019 Intelligent Performance -Worker Migration " ou também comumente chamado de Worker Roubando.
Fonte
O Parallel Redo está qualificado para migração de trabalhadores, conforme observado na mesma fonte :
Ao migrar para o SQL Server 2019, esse recurso é habilitado por padrão.
Adição
Esse sinalizador de rastreamento pode fornecer benefícios se as consultas em execução no secundário não puderem ser adaptadas (por exemplo, consultas de longa execução no secundário com tempo reduzido). Mas pode haver outros motivos, como divisões de página frequentes.
Uma maneira de ver se a execução do serial de thread de redo é benéfica para sua configuração é examinar as
PARALLEL_REDO_TRAN_TURN
estatísticas de espera, mas você sempre deve compará-las com outras informações, como aumento/diminuição do tamanho da fila de redo no arquivo .Lembre-se de habilitar esse traceflag, pois o desempenho de redo pode ser prejudicado por ser serial em vez de paralelo.