

# Monitoração e ajuste do processo de replicação
<a name="USER_PostgreSQL.Replication.ReadReplicas.Monitor"></a>

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 `ReplicaLag` entre 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 `ReplicaLag` do Amazon RDS. Para saber mais sobre `ReplicaLag` e outras métricas do Amazon RDS, consulte [Métricas do Amazon CloudWatch para o Amazon RDS](rds-metrics.md).
+ **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_segments` se necessário. Por exemplo, suponha que o log do PostgreSQL em `checkpoint complete` exibe `35 recycled` por um intervalo de 5 minutos. Neste caso, o valor padrão de 32 de `wal_keep_segments` nã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 `TransactionLogsGeneration` para 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
<a name="USER_PostgreSQL.Replication.ReadReplicas.Monitor-monitor-replication-slots"></a>

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 de `max_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](monitoring-cloudwatch.md). 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](https://aws.amazon.com/blogs/database/best-practices-for-amazon-rds-postgresql-replication/) no *Blog de banco de dados da AWS*. 