Capturar planos de execução nas réplicas do Aurora PostgreSQL
O QPM (gerenciamento de planos de consulta) permite capturar os planos de consulta gerados pelas réplicas do Aurora e armazená-los na instância de banco de dados primária do cluster de banco de dados do Aurora. Você pode coletar os planos de consulta de todas as réplicas do Aurora e manter um conjunto de planos ideais em uma tabela persistente central na instância primária. Então, você pode aplicar esses planos a outras réplicas quando necessário. Isso ajuda você a manter a estabilidade dos planos de execução e melhorar a performance das consultas nos clusters de banco de dados e nas versões do mecanismo.
Pré-requisitos
Ativar capture_plan_baselines parameter
na réplica do Aurora: defina o parâmetro capture_plan_baselines
como automático ou manual para capturar os planos nas réplicas do Aurora. Para ter mais informações, consulte apg_plan_mgmt.capture_plan_baselines.
Instalar a extensão postgres_fdw: você deve instalar a extensão postgres_fdw
externa do wrapper de dados para capturar os planos nas réplicas do Aurora. Para instalar a extensão, execute o command a seguir o em cada banco de dados.
postgres=>
CREATE EXTENSION IF NOT EXISTS postgres_fdw;
Gerenciar a captura de planos em réplicas do Aurora
Ativar a captura de planos em réplicas do Aurora
Você deve ter privilégios de rds_superuser
para criar ou remover a captura de planos nas réplicas do Aurora. Para obter mais informações sobre funções e permissões de usuário, consulte Noções básicas de perfis e permissões do PostgreSQL.
Para capturar planos, chame a função apg_plan_mgmt.create_replica_plan_capture na instância de banco de dados de gravação, conforme mostrado a seguir:
postgres=>
CALL apg_plan_mgmt.create_replica_plan_capture('cluster_endpoint'
,'password'
);
cluster_endpoint - cluster_endpoint (endpoint de gravação): fornece suporte de failover para a captura de planos em réplicas do Aurora.
Senha: siga as diretrizes abaixo ao criar a senha para aumentar a segurança:
Deve conter pelo menos oito caracteres.
Deve conter pelo menos uma letra maiúscula, uma letra minúscula e um número.
Deve ter pelo menos um caractere especial (
?
,!
,#
,<
,>
,*
e assim por diante).
nota
Se você alterar o endpoint, a senha ou o número da porta do cluster, deverá executar apg_plan_mgmt.create_replica_plan_capture()
novamente com o endpoint e a senha do cluster para reinicializar a captura de plano. Caso contrário, os planos de captura das réplicas do Aurora falharão.
Desativar a captura de planos em réplicas do Aurora
Você pode desativar o parâmetro capture_plan_baselines
na réplica do Aurora definindo o respectivo valor como off
no grupo de parâmetros.
Remover a captura de planos em réplicas do Aurora
Você pode remover completamente a captura de planos nas réplicas do Aurora, mas certifique-se antes de fazer isso. Para remover a captura de planos, chame apg_plan_mgmt.remove_replica_plan_capture
conforme mostrado:
postgres=>
CALL apg_plan_mgmt.remove_replica_plan_capture();
Você deve chamar apg_plan_mgmt.create_replica_plan_capture() novamente para ativar a captura de planos nas réplicas do Aurora com o endpoint e a senha do cluster.
Solução de problemas
A seguir vão algumas ideias e soluções alternativas de problemas caso o plano não seja capturado nas réplicas do Aurora conforme o esperado.
Configurações de parâmetros: verifique se o parâmetro
capture_plan_baselines
está definido com o valor adequado para ativar a captura de planos.A extensão
postgres_fdw
está instalada: use a consulta a seguir para verificar sepostgres_fdw
está instalada.postgres=>
SELECT * FROM pg_extension WHERE extname = 'postgres_fdw'create_replica_plan_capture() é chamado: use o comando a seguir para verificar se o mapeamento do usuário existe. Caso contrário, chame
create_replica_plan_capture()
para inicializar o atributo.postgres=>
SELECT * FROM pg_foreign_server WHERE srvname = 'apg_plan_mgmt_writer_foreign_server';Endpoint de cluster - Verifique se o endpoint e o número da porta do cluster são apropriados. Não haverá nenhuma mensagem de erro exibida se esses valores estiverem incorretos.
Use o comando a seguir para verificar se o endpoint é usado no create() e para verificar em qual banco de dados ele reside:
postgres=>
SELECT srvoptions FROM pg_foreign_server WHERE srvname = 'apg_plan_mgmt_writer_foreign_server';reload (): você deve chamar apg_plan_mgmt.reload() depois de chamar apg_plan_mgmt.delete_plan() nas réplicas do Aurora para tornar a função delete efetiva. Isso garante que a mudança seja implementada com sucesso.
Senha: você deve inserir a senha em create_replica_plan_capture() de acordo com as diretrizes mencionadas. Caso contrário, você receberá uma mensagem de erro. Para obter mais informações, consulte Gerenciar a captura de planos em réplicas do Aurora. Use outra senha que esteja de acordo com os requisitos.
Conexão entre regiões: a captura de planos nas réplicas do Aurora também é compatível com o banco de dados global do Aurora, onde a instância de gravação e as réplicas do Aurora podem estar em regiões diferentes. A instância de gravação e a réplica entre regiões devem ser capazes de se comunicar usando o emparelhamento de VPC. Para obter mais informações, consulte Emparelhamento de VPC. Se ocorrer um failover entre regiões, você deverá reconfigurar o endpoint com o novo endpoint primário do cluster de banco de dados.