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.
Tópicos
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.
A função
aurora_stat_logical_wal_cache
: para obter a documentação de referência, consulte aurora_stat_logical_wal_cache.A função
aurora_stat_reset_wal_cache
: para obter a documentação de referência, consulte aurora_stat_reset_wal_cache.
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 sobrewal_buffers
, consulte Write Ahead Logna 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');