Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Use a extensão pg_profile para coletar estatísticas de atividades com uso intensivo de recursos

Última atualização: Jun 26, 2026

A extensão pg_profile coleta snapshots de estatísticas de atividade do banco de dados em intervalos agendados e gera relatórios de desempenho em HTML. Use-a para identificar instruções SQL que consomem muitos recursos e otimizar o desempenho do banco de dados no ApsaraDB RDS for PostgreSQL.

Como funciona

O pg_profile utiliza uma arquitetura com dois bancos de dados:

  • Banco de dados servidor: banco de dados monitorado. Executa pg_stat_statements e pg_stat_kcache para expor estatísticas de consultas.

  • Banco de dados de perfil: gerencia o monitoramento. Conecta-se ao banco de dados servidor, obtém snapshots de estatísticas via dblink e os armazena localmente. Gere relatórios de desempenho a partir deste banco de dados.

O banco de dados de perfil e o banco de dados servidor podem ser executados na mesma instância RDS ou em instâncias separadas.

Pré-requisitos

Antes de começar, verifique se você tem:

Observações de uso

  • O pg_profile requer o pg_stat_statements. Instale-o antes do pg_profile. Opcionalmente, instale também o pg_stat_kcache para coletar estatísticas de E/S no nível do kernel.

  • Snapshots consomem espaço em disco. O pg_profile inclui um mecanismo de limpeza automática; monitore o uso do disco e ajuste as configurações de retenção conforme necessário.

  • Cada snapshot leva tempo para ser concluído. Colete snapshots uma ou duas vezes por hora.

Instalar e desinstalar o pg_profile

Execute as seguintes instruções com uma conta privilegiada:

-- Install
CREATE EXTENSION pg_profile;

-- Uninstall
DROP EXTENSION pg_profile;

Configurar o monitoramento

Esta seção orienta a configuração de um banco de dados servidor chamado server e um banco de dados de perfil chamado profile na mesma instância RDS. Os mesmos passos se aplicam quando os bancos de dados estão em instâncias separadas — apenas os parâmetros de conexão diferem.

Configurar o banco de dados servidor

Execute as seguintes instruções com uma conta privilegiada.

  1. Crie o banco de dados servidor.

    CREATE DATABASE server;
  2. Conecte-se ao banco de dados servidor e instale as extensões necessárias.

    Tanto o pg_stat_statements quanto o pg_stat_kcache devem ser carregados na inicialização do banco de dados. Adicione ambos ao parâmetro shared_preload_libraries antes de criar essas extensões. O pg_stat_kcache depende do pg_stat_statements, portanto, ambos devem estar presentes no shared_preload_libraries . Para obter instruções, consulte Definir parâmetros .
    \c server
    CREATE EXTENSION pg_stat_statements;
    CREATE EXTENSION pg_stat_kcache;
  3. Verifique se as extensões foram instaladas.

    \dx

    Saída esperada:

    Name                | Version |   Schema   |                              Description
    --------------------+---------+------------+------------------------------------------------------------------------
     pg_stat_kcache     | 2.2.1   | public     | Kernel statistics gathering
     pg_stat_statements | 1.9     | public     | track planning and execution statistics of all SQL statements executed
     ...

Configurar o banco de dados de perfil

Execute as seguintes instruções com uma conta privilegiada.

  1. Crie o banco de dados de perfil.

    CREATE DATABASE profile;
  2. Conecte-se ao banco de dados de perfil e instale as extensões necessárias.

    \c profile
    CREATE EXTENSION plpgsql;
    CREATE EXTENSION dblink;
    CREATE EXTENSION pg_profile;
  3. Verifique se as extensões foram instaladas.

    \dx

    Saída esperada:

    Name        | Version |   Schema   |                         Description
    ------------+---------+------------+--------------------------------------------------------------
     dblink     | 1.2     | public     | connect to other PostgreSQL databases from within a database
     pg_profile | 4.0     | public     | PostgreSQL load profile repository and report builder
     plpgsql    | 1.0     | pg_catalog | PL/pgSQL procedural language
     ...

Registrar a conexão do banco de dados servidor

No banco de dados de perfil, registre o banco de dados servidor como alvo de monitoramento. Execute a seguinte instrução com uma conta privilegiada.

SELECT create_server('server', 'host=<host> dbname=server port=<port> user=<user> password=<password>');

Parâmetro

Exemplo

Descrição

host

127.0.0.1

Endpoint da instância RDS onde o banco de dados servidor é executado. Consulte a tabela abaixo para valores por topologia de rede.

dbname

server

Nome do banco de dados servidor.

port

3002

Porta da instância RDS onde o banco de dados servidor é executado. Execute SHOW PORT; para obter a porta.

user

test_user

Nome de usuário da conta privilegiada para a instância do banco de dados servidor.

password

T123456!

Senha da conta.

Valores de host por topologia de rede:

Topologia

**Valor para host**

Mesma instância RDS

127.0.0.1

Instâncias diferentes, mesma virtual private cloud (VPC)

Endpoint interno da instância do banco de dados servidor

Instâncias diferentes, VPCs diferentes

Endpoint público da instância do banco de dados servidor. A instância do banco de dados de perfil deve ser configurada com um NAT gateway e um endereço IP público.

Para obter os endpoints internos e públicos de uma instância, consulte Visualizar e modificar o endpoint e o número da porta de uma instância .

Saída esperada:

show_servers
---------------------------------------------------------------------------------------
 (local,"dbname=profile port=3002",t,)
 (server,"host=127.0.0.1 dbname=server port=3002 user=test_user password=****",t,)
(2 rows)
Criar uma conexão de servidor também cria uma conexão local que representa o próprio banco de dados de perfil. É possível visualizá-la na saída acima.

Configurar a conexão do banco de dados de perfil

Após a criação da conexão local, configure suas credenciais. Execute a seguinte instrução com uma conta privilegiada.

SELECT set_server_connstr('local','host=127.0.0.1 dbname=profile port=<port> user=<user> password=<password>');

Parâmetro

Exemplo

Descrição

host

127.0.0.1

Defina como 127.0.0.1.

dbname

profile

Nome do banco de dados de perfil.

port

3002

Porta da instância do banco de dados de perfil. Execute SHOW PORT; para obter o valor.

user

test_user

Nome de usuário da conta privilegiada para a instância do banco de dados de perfil.

password

T123456!

Senha da conta.

Coletar snapshots e gerar relatórios

Coletar um snapshot

No banco de dados de perfil, execute take_sample() para coletar um snapshot de todos os servidores registrados. Use uma conta privilegiada.

SELECT take_sample();

Saída esperada:

 take_sample
-------------------------
 (server,OK,00:00:00.52)
 (local,OK,00:00:00.51)
(2 rows)

Colete pelo menos dois snapshots antes de gerar um relatório — o relatório cobre a atividade entre dois pontos de snapshot.

Visualizar snapshots coletados

SELECT * FROM show_samples('server');

Exemplo de saída:

 sample |      sample_time       | sizes_collected | dbstats_reset | bgwrstats_reset | archstats_reset
--------+------------------------+-----------------+---------------+-----------------+-----------------
      1 | 2022-09-30 02:14:07+00 | t               |               |                 |
      2 | 2022-09-30 02:16:59+00 | t               |               |                 |
      3 | 2022-09-30 02:17:58+00 | t               |               |                 |

Gerar um relatório

Um relatório cobre a atividade entre dois snapshots — especifique os números de amostra inicial e final.

Opção 1: Via psql no banco de dados de perfil

\o report_2_3.html
SELECT get_report('server',2,3);

Opção 2: Via interface de linha de comando (CLI)

psql -Aqtc "SELECT profile.get_report('server',2,3)" \
  -o report_server_2_3.html \
  -d profile \
  -h <endpoint of the profile database instance> \
  -p 5432 \
  -U <privileged account of the profile database instance>

Ambos os métodos exportam o relatório como um arquivo HTML para sua máquina local.

Automatizar a coleta de snapshots

Use o pg_cron para executar take_sample() conforme um agendamento. Colete snapshots uma ou duas vezes por hora para capturar intervalos significativos sem gerar excesso de dados.

Próximos passos