Monitoração e ajuste do processo de replicação
Convém monitorar rotineiramente a instância de banco de dados do RDS para PostgreSQL e as réplicas de leitura. Verifique se suas réplicas de leitura estão acompanhando as alterações na instância de banco de dados de origem. O Amazon RDS recupera suas réplicas de leitura de forma transparente quando ocorrem interrupções no processo de replicação. No entanto, é melhor evitar qualquer necessidade de recuperação. A recuperação que usa slots de replicação é mais rápida do que usar o arquivo do Amazon S3, mas qualquer processo de recuperação pode afetar a performance de leitura.
Para determinar como suas réplicas de leitura estão acompanhando a instância de banco de dados de origem, é possível fazer o seguinte:
-
Verifique a quantidade de
ReplicaLagentre a instância de banco de dados de origem e as réplicas. Atraso da réplica refere-se ao tempo em milissegundos durante o qual uma réplica de leitura fica atrasada em relação à instância de banco de dados de origem. Essa métrica retorna o resultado a seguir.SELECT extract(epoch from now() - pg_last_xact_replay_timestamp()) AS "ReplicaLag";O atraso de réplica é uma indicação de como uma réplica de leitura está acompanhando a instância de banco de dados de origem. É a quantidade de latência entre a instância de banco de dados de origem e uma instância de leitura específica. Um valor alto de atraso de réplica pode indicar uma incompatibilidade entre as classes ou os tipos de armazenamento (ou ambos) usados pela instância de banco de dados de origem e suas réplicas de leitura. A classe e os tipos de armazenamento da instância de banco de dados de origem e de todas as réplicas de leitura devem ser iguais.
O atraso de réplica também pode ser o resultado de problemas de conexão intermitentes. Você pode monitorar o atraso da replicação no Amazon CloudWatch visualizando a métrica
ReplicaLagdo Amazon RDS. Para saber mais sobreReplicaLage outras métricas do Amazon RDS, consulte Métricas do Amazon CloudWatch para o Amazon RDS. -
Verifique o log do PostgreSQL para obter informações que podem ser usadas para ajustar suas configurações. Por exemplo, em cada ponto de verificação, o log do PostgreSQL captura o número de arquivos de log de transações reciclados, como mostrado no exemplo a seguir.
2014-11-07 19:59:35 UTC::@:[26820]:LOG: checkpoint complete: wrote 376 buffers (0.2%); 0 transaction log file(s) added, 0 removed, 1 recycled; write=35.681 s, sync=0.013 s, total=35.703 s; sync files=10, longest=0.013 s, average=0.001 sÉ possível usar essas informações para descobrir quantos arquivos de transação estão sendo reciclados em um determinado período de tempo. É possível alterar a configuração para
wal_keep_segmentsse necessário. Por exemplo, suponha que o log do PostgreSQL emcheckpoint completeexibe35 recycledpor um intervalo de 5 minutos. Neste caso, o valor padrão de 32 dewal_keep_segmentsnão é suficiente para acompanhar a atividade de streaming, e recomendamos aumentar o valor desse parâmetro. -
Use o Amazon CloudWatch para monitorar métricas que podem prever problemas de replicação. Em vez de analisar diretamente o log do PostgreSQL, é possível usar o Amazon CloudWatch para verificar as métricas coletadas. Por exemplo, é possível verificar o valor da métrica
TransactionLogsGenerationpara ver quantos dados de WAL estão sendo gerados pela instância de banco de dados de origem. Em alguns casos, a workload em sua instância de banco de dados pode gerar uma grande quantidade de dados de WAL. Nesse caso, talvez seja necessário alterar a classe da instância de banco de dados de origem e das réplicas de leitura. Usar uma classe de instância com alta performance de rede (10 Gbps) pode reduzir o atraso de réplica.
Monitorar os slots de replicação da instância de banco de dados do RDS para PostgreSQL
Todas as versões do RDS para PostgreSQL usam slots de replicação para réplicas de leitura entre regiões. O RDS para PostgreSQL 14.1 e versões superiores usam slots de replicação para réplicas de leitura na região. As réplicas de leitura na região também usam o Amazon S3 para arquivar dados de WAL. Em outras palavras, se sua instância de banco de dados e réplicas de leitura estiverem executando o PostgreSQL 14.1 ou superior, os slots de replicação e os arquivos do Amazon S3 estarão disponíveis para recuperar a réplica de leitura. Recuperar uma réplica de leitura usando seu slot de replicação é mais rápido do que recuperar do arquivo do Amazon S3. Portanto, convém monitorar os slots de replicação e as métricas relacionadas.
É possível visualizar os slots de replicação em suas instâncias de banco de dados do RDS para PostgreSQL consultando a visualização pg_replication_slots da forma a seguir.
postgres=>SELECT * FROM pg_replication_slots;slot_name | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn | wal_status | safe_wal_size | two_phase ---------------------------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------+------------+---------------+----------- rds_us_west_1_db_555555555 | | physical | | | f | t | 13194 | | | 23/D8000060 | | reserved | | f (1 row)
O wal_status do valor reserved indica que a quantidade de dados de WAL mantidos pelo slot está dentro dos limites do parâmetro max_wal_size. Ou seja, o slot de replicação está dimensionado corretamente. Outros valores de status possíveis são os seguintes:
-
extended: o slot excede a configuração demax_wal_size, mas os dados de WAL estão retidos. -
unreserved: o slot não tem mais todos os dados de WAL necessários. Alguns deles serão removidos no próximo ponto de verificação. -
lost: alguns dados de WAL necessários foram removidos. O slot não é mais utilizável.
Os estados unreserved e lost do wal_status são vistos somente quando max_slot_wal_keep_size não é negativo.
A visualização pg_replication_slots mostra o estado atual dos slots de replicação. Para avaliar a performance dos slots de replicação, é possível usar o Amazon CloudWatch e monitorar as seguintes métricas:
-
OldestReplicationSlotLag– mostra a quantidade de dados do log de gravação antecipada (WAL) na origem que não foi consumida pela réplica mais atrasada. -
TransactionLogsDiskUsage– Mostra quanto armazenamento está sendo usado para dados WAL. Quando uma réplica de leitura atrasa significativamente, o valor dessa métrica pode aumentar substancialmente.
Para saber mais sobre o uso do Amazon CloudWatch e suas métricas para o RDS para PostgreSQL, consulte Monitorar métricas do Amazon RDS com o Amazon CloudWatch. Para obter mais informações sobre como monitorar a replicação de streaming em suas instâncias de bancos de dados do RDS para PostgreSQL, consulte Práticas recomendadas para replicação do Amazon RDS para PostgreSQL