Como soluciono problemas de atraso na minha réplica de leitura do Amazon RDS para SQL Server?

5 minuto de leitura
0

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:

  • Verifique as métricas WriteIOPS, WriteThroughput, NetworkReceiveThroughput e NetworkTrasmitThroughput na instância primária. Determine se a atividade de gravação causou o atraso. Em seguida, verifique as mesmas métricas no mesmo período na réplica de leitura.
  • Verifique se há transações de longa duração na instância primária. Para verificar o status das transações ativas, execute uma consulta semelhante à seguinte:
    SELECT *
    FROM sys.sysprocesses
    WHERE open_tran = 1;

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