Eu tenho uma instância do Amazon Relational Database Service (Amazon RDS) para Microsoft SQL Server com réplica de leitura. Quero solucionar o atraso de réplica na minha instância do Amazon RDS para SQL Server.
Breve descrição
O Amazon RDS para SQL Server Enterprise Edition é compatível com a criação de réplicas de leitura na mesma região AWS e entre regiões. A replicação de dados é assíncrona e usa a tecnologia Always-On para replicar dados de uma instância primária para uma instância de réplica. O RDS para SQL Server não reduz automaticamente o alto atraso de réplica entre uma instância de banco de dados de origem e as réplicas de leitura.
Resolução
Verificar a utilização dos recursos
Use os Amazon CloudWatch Enhanced Monitoring and Performance Insights para verificar a utilização de recursos em suas instâncias primárias e replicadas em detalhes.
Confirme se a utilização da CPU não está limitada. Se você usa um tipo de instância expansível, verifique se você tem créditos de CPU disponíveis ou se ativou o modo Ilimitado.
Certifique-se de que haja memória livre suficiente e que ReadIOPS e WriteIOPS atendam às cotas provisionadas. Se você usar um volume gp2, confirme se o equilíbrio de intermitência está disponível.
Verifique se ReadThroughput e WriteThroughput atingiram as cotas do tipo de instância.
Observação: a falta de recursos na instância de réplica pode causar atraso na réplica. O recomendado é criar instâncias primárias e de réplica com o mesmo tipo de instância, tipo de armazenamento e número de IOPS.Também é possível aumentar ou reduzir a escala verticalmente da réplica de leitura quando o uso for mínimo em comparação com a instância primária.
Identifique o período em que o atraso da réplica começou a aumentar e, em seguida, execute as seguintes ações:
Identificar esperas e impasses
Verifique se há esperas ou impasses de bloqueio na instância de réplica. Os impasses ocorrem entre as transações Select e DDL/DML e causam atrasos na aplicação dos logs de transações da instância primária.
Para verificar o bloqueio, execute uma consulta semelhante à seguinte:
SELECT * FROM sys.sysprocesses WHERE blocked > 0;
Verificar o atraso da réplica
Execute uma consulta na instância primária para verificar o atraso da réplica e o atraso máximo da réplica.
Atraso da réplica
Execute a seguinte consulta:
SELECT
AR.replica_server_name,
DB_NAME (ARS.database_id) 'database_name',
AR.availability_mode_desc,
ARS.synchronization_health_desc,
ARS.last_hardened_lsn,
ARS.last_redone_lsn,
ARS.secondary_lag_seconds,
FROM
sys.dm_hadr_database_replica_states ARS
INNER JOIN
sys.availability_replicas AR ON ARS.replica_id = AR.replica_id
WHERE
DB_NAME(ARS.database_id) = 'database_name'
ORDER BY
AR.replica_server_name;
Observação: substitua database_name pelo nome do seu banco de dados.
Verifique se o valor de last_hardened_lsn progride na réplica de leitura.
Atraso máximo da réplica
No SQL Server, a métrica ReplicaLag é o atraso máximo dos bancos de dados atrasados em segundos. Por exemplo, se você tiver dois bancos de dados com atraso de 5 segundos e 10 segundos, ReplicaLag será 10 segundos. Para calcular a métrica ReplicaLag, execute a seguinte consulta na instância primária:
SELECT max(secondary_lag_seconds) max_lag
FROM sys.dm_hadr_database_replica_states;
Gerenciar a sincronização de dados e a integridade da instância
Quando você cria uma réplica de leitura, o Amazon RDS tira um snapshot da instância primária e depois restaura o snapshot para criar uma instância de réplica de leitura. O Amazon RDS reproduz os logs de transações para sincronizar os dados com a instância primária. No entanto, depois de criar uma nova instância, o carregamento lento da instância causa atraso na réplica. Esse é o comportamento esperado. Para reduzir os efeitos do carregamento lento, use o tipo de volume io1 ou io2 ao criar a réplica de leitura. Depois de criar a réplica, é possível convertê-la novamente em um tipo de volume gp2 ou gp3.
Execute transações em lotes na instância primária para evitar transações longas e mantenha o tamanho do arquivo de log de transações pequeno. Reinicie a instância de réplica somente quando necessário durante um alto atraso na réplica. Caso contrário, o Amazon RDS atrasa as reproduções de logs de transações e os bancos de dados podem entrar no estado de Recuperação.
Como os logs são processados a partir da instância primária, o atraso da réplica pode ocorrer temporariamente quando você modifica o tipo de instância na instância primária ou de réplica.
Além disso, quando você modifica o tipo ou o tamanho do armazenamento, o atraso na réplica pode ocorrer temporariamente até que a otimização do armazenamento seja concluída. Não é possível monitorar o progresso da otimização do armazenamento.
Se continuar enfrentando atrasos na réplica, verifique o status dos bancos de dados do usuário na instância de réplica. Para reproduzir os logs, o status do banco de dados deve ser On-line.
Observação:
- o Amazon RDS inclui bancos de dados recém-criados no cálculo do atraso somente depois de serem acessíveis na réplica de leitura.
- ReplicaLag retorna -1 quando o Amazon RDS não consegue determinar o atraso, como durante a configuração da réplica ou quando a réplica de leitura está no estado de Erro.
Informações relacionadas
Trabalhar com réplicas de leitura para Microsoft SQL Server no Amazon RDS