Recentemente, migramos da configuração do LogShipping standby/read-only
para a configuração do Multi Subnet AG com secundários legíveis.
Geralmente, na configuração antiga, temos consultas selecionadas em execução por mais tempo, pois o banco de dados em questão tem mais de 20 TB e tem uma mistura de carga de trabalho de leitura e gravação no primário.
Depois de passar para a nova configuração do AG, começamos a ver bloqueios que não consigo entender. Por que as consultas selecionadas no secundário estão bloqueando outras consultas selecionadas em minha instância de réplica secundária legível, mesmo quando o banco de dados que está sendo consultado tem RCSI enabled
?
Abaixo está o que eu capturei
O bloqueador de leads é uma consulta de longa duração
SELECT
que não mostra nenhum tipo de espera específico como particular, digamos SPID129
SPID 129
bloqueia um ID de sessão45
(tenho certeza de que não é um ID de usuário) por quase 6 horas, o que depende do spid129 e o tipo de espera éLCK_M_SCH_M
Aí vem o problema quando isso
SPID 45
apenas bloqueia todas as outras consultas selecionadas agora nessa duração de 6 horas.
Não estou conseguindo entender o que está acontecendo. Alguém pode me ajudar a solucionar problemas ou olhar na direção correta?
As consultas em réplicas secundárias somente leitura são executadas implicitamente no isolamento de instantâneo, independentemente do nível de isolamento da sessão ou da configuração RCSI. Isso evita o bloqueio devido a alterações de DML. As consultas somente leitura ainda adquirem bloqueios de estabilidade de esquema , que bloquearão as operações DDL por threads de redo e vice-versa.
No seu caso, parece que um thread de redo está aguardando um bloqueio de modificação de esquema, mas está bloqueado por um bloqueio de estabilidade de esquema de consulta/transação de execução muito longa. Outras consultas, por sua vez, são bloqueadas pelo thread de redo.
Dê uma olhada no
SELECT
plano de execução da consulta e na duração da transação para correção.Encontrei o mesmo problema que vinha de uma atividade ALTER INDEX REBUILD. Resolvi mover esta atividade em outra janela de tempo.