Monitorar o cache de gravação simultânea e os slots lógicos para a replicação lógica do Aurora PostgreSQL - Amazon Aurora

Monitorar o cache de gravação simultânea e os slots lógicos para a replicação lógica do Aurora PostgreSQL

Monitore o cache de gravação simultânea de replicação lógica e gerencie slots lógicos para melhorar a performance do cluster de banco de dados do Aurora PostgreSQL. A seguir, encontre mais informações sobre o cache de gravação simultânea e os slots lógicos.

Monitorar o cache de gravação simultânea de replicação lógica do Aurora PostgreSQL

Por padrão, as versões 14.5, 13.8, 12.12 e 11.17 e posteriores do Aurora PostgreSQL usam um cache de gravação para melhorar a performance da replicação lógica. Sem o cache de gravação, o Aurora PostgreSQL usa a camada de armazenamento do Aurora em sua implementação do processo nativo de replicação lógica do PostgreSQL. Ele faz isso gravando dados WAL no armazenamento e, depois, lendo os dados do armazenamento para decodificá-los e enviá-los (replicar) para seus destinos (assinantes). Isso pode causar gargalos durante a replicação lógica para clusters de banco de dados do Aurora PostgreSQL.

O cache de gravação simultânea minimiza a dependência da camada de armazenamento do Aurora. Em vez de gravar e ler dessa camada de maneira consistente, o Aurora PostgreSQL usa um buffer para armazenar em cache o fluxo lógico do WAL para uso durante o processo de replicação, reduzindo a necessidade de acessar o disco. Esse buffer é o cache nativo do PostgreSQL usado na replicação lógica e é identificado nos parâmetros do cluster de banco de dados do Aurora PostgreSQL como rds.logical_wal_cache.

Ao usar a replicação lógica com seu cluster de banco de dados do Aurora PostgreSQL (para as versões que são compatíveis com o cache de gravação), você pode monitorar a taxa de acerto do cache para ver se ela está funcionando bem em seu caso de uso. Para fazer isso, conecte-se à instância de gravação do cluster de banco de dados do Aurora PostgreSQL usando psql e, depois, use a função do Aurora, aurora_stat_logical_wal_cache, conforme mostrado no exemplo a seguir.

SELECT * FROM aurora_stat_logical_wal_cache();

A função retorna o resultado a seguir.

name | active_pid | cache_hit | cache_miss | blks_read | hit_rate | last_reset_timestamp -----------+------------+-----------+------------+-----------+----------+-------------- test_slot1 | 79183 | 24 | 0 | 24 | 100.00% | 2022-08-05 17:39... test_slot2 | | 1 | 0 | 1 | 100.00% | 2022-08-05 17:34... (2 rows)

Os valores last_reset_timestamp foram reduzidos para facilitar a leitura. Para ter mais informações sobre essa função, consulte aurora_stat_logical_wal_cache.

O Aurora PostgreSQL fornece as duas funções a seguir para monitorar o cache de gravação.

Se você achar que o tamanho do cache do WAL ajustado automaticamente não é suficiente para as workloads, altere o valor de rds.logical_wal_cache manualmente. Considere o seguinte:

  • Quando o parâmetro rds.logical_replication está desabilitado, rds.logical_wal_cache é definido como zero (0).

  • Quando o parâmetro rds.logical_replication está habilitado, rds.logical_wal_cache tem um valor padrão de 16 MB.

  • O parâmetro rds.logical_wal_cache é estático e requer a reinicialização da instância de banco de dados para que as alterações sejam aplicadas. Esse parâmetro é definido em termos de blocos de 8 Kb. Observe que qualquer valor positivo menor que 32 Kb é tratado como 32 Kb. Para ter mais informações sobre wal_buffers, consulte Write Ahead Log na documentação do PostgreSQL.

Gerenciar slots lógicos para o Aurora PostgreSQL

A atividade de streaming é capturada na visualização pg_replication_origin_status. Para ver o conteúdo dessa visualização, use a função pg_show_replication_origin_status(), conforme mostrado a seguir:

SELECT * FROM pg_show_replication_origin_status();

Você pode obter uma lista dos seus slots lógicos usando a consulta SQL a seguir.

SELECT * FROM pg_replication_slots;

Para descartar um slot lógico, use o pg_drop_replication_slot com o nome do slot, conforme mostrado no comando a seguir.

SELECT pg_drop_replication_slot('test_slot');