Todos os produtos
Search
Central de documentação

PolarDB:pg_profile (Resource Monitoring)

Última atualização: Jul 14, 2026

A extensão pg_profile é suportada pelo PolarDB for PostgreSQL e desenvolvida por terceiros. Ela coleta estatísticas sobre atividades que consomem muitos recursos em um banco de dados alvo, facilitando a análise e a otimização do desempenho. Baseada em visualizações estatísticas do PostgreSQL e em diversas extensões da comunidade, essa ferramenta foi escrita inteiramente em PL/pgSQL e não depende de bibliotecas ou softwares externos. Ao utilizá-la em conjunto com o pg_cron, você agenda amostragens periódicas para diagnosticar cargas de trabalho históricas — por exemplo, para identificar "o que causou a lentidão há duas horas?".

Versões suportadas

Versão do PostgreSQL

Versão secundária mínima do mecanismo

PostgreSQL 16

2.0.16.9.9.0

PostgreSQL 15

2.0.15.14.6.0

PostgreSQL 14

2.0.14.10.18.0

Visualize a versão secundária do mecanismo no console ou execute o comando SHOW polardb_version; . Caso seu cluster não atenda ao requisito de versão, atualize a versão secundária do mecanismo .

Como funciona

O pg_profile utiliza dois bancos de dados dedicados dentro do mesmo cluster:

  • Banco de dados servidor: É o banco monitorado. Ele possui as extensões de estatísticas instaladas e aceita conexões de amostragem.

  • Banco de dados de perfil: É onde o pg_profile está instalado. Este banco se conecta ao banco de dados servidor via dblink, obtém as estatísticas mais recentes e as armazena localmente.

Devido à dependência do dblink, ambos os bancos de dados devem residir no mesmo cluster do PolarDB for PostgreSQL.

Após coletar duas ou mais amostras, chame a função get_report() para gerar um relatório HTML. Esse documento resume instruções SQL e objetos que consumiram muitos recursos entre dois pontos de amostragem quaisquer.

Pré-requisitos

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

  • Um cluster do PolarDB for PostgreSQL executando uma versão suportada

  • Uma conta privilegiada para o cluster

  • A extensão pg_stat_statements adicionada ao parâmetro shared_preload_libraries (adicionada por padrão)

Para verificar ou modifique o parâmetro shared_preload_libraries , consulte Configurar parâmetros do cluster . A modificação desse parâmetro reinicia o cluster. Planeje suas operações adequadamente.

Opcional: Instale o pg_stat_kcache para coletar informações adicionais. Sem ele, o pg_profile continua funcionando, mas relata menos métricas.

Observações de uso

  • Cada operação de amostragem leva alguns segundos. Realize amostragens no máximo uma ou duas vezes por hora para evitar sobrecarga excessiva.

  • Os dados de amostra ocupam espaço em disco. Embora o pg_profile possua um mecanismo automático de limpeza, monitore a retenção de dados para evitar consumo inesperado de disco.

  • São necessárias pelo menos duas amostras antes de gerar um relatório.

Configure o pg_profile

Etapa 1: Crie o banco de dados servidor

Conecte-se ao seu cluster e crie o banco de dados servidor:

CREATE DATABASE server;

Conecte-se ao banco de dados servidor e instale as extensões de estatísticas:

\c server
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
CREATE EXTENSION IF NOT EXISTS pg_stat_kcache;
O pg_stat_kcache é opcional. Ignore-o caso não precise das métricas adicionais fornecidas nos relatórios.

Etapa 2: Crie o banco de dados de perfil

Crie o banco de dados de perfil:

CREATE DATABASE profile;

Conecte-se ao banco de dados de perfil e instale o pg_profile:

\c profile
CREATE EXTENSION IF NOT EXISTS pg_profile CASCADE;

Etapa 3: Crie uma conexão de amostragem

Execute o seguinte comando no banco de dados de perfil para registrar o banco de dados servidor como alvo de monitoramento:

SELECT create_server(
   'server',
   'dbname=server channel_name=localhost user=<privileged_account_of_the_server_database> password=<password_for_the_account>'
);

Parâmetro

Exemplo

Descrição

server (primeiro argumento)

server

Nome definido pelo usuário para esta conexão.

dbname

server

Nome do banco de dados servidor.

channel_name

localhost

Canal de conexão. Apenas localhost é suportado.

user

test_user

Conta privilegiada do cluster onde reside o banco de dados servidor.

password

T123456!

Senha da conta.

A saída esperada é semelhante a:

                                    show_servers
-------------------------------------------------------------------------------------
 (server,"dbname=server channel_name=localhost user=test_user password=****",t,)
(1 row)

Para atualizar as informações de conexão posteriormente, utilize set_server_connstr():

SELECT set_server_connstr(
   'server',
   'dbname=server channel_name=localhost user=<privileged_account_of_the_profile_database> password=<password_for_the_account>'
);
Não altere o primeiro argumento ( server ). Ele identifica a conexão existente pelo nome.

Etapa 4: Coletar uma amostra inicial

Execute o seguinte comando no banco de dados de perfil para coletar a primeira amostra:

SELECT take_sample();

A saída contém três colunas: o nome do servidor, o resultado (OK ou uma mensagem de erro) e o tempo decorrido:

      take_sample
-------------------------
 (server,OK,00:00:02.81)
(1 row)

Etapa 5: Gerar uma carga de trabalho e coletar uma segunda amostra

Para capturar uma diferença significativa de carga de trabalho entre as amostras, execute um teste de estresse no banco de dados servidor. O exemplo abaixo utiliza o pgbench:

pgbench -s 100 -i server -U test_user -h pc-****.pg.rds.aliyuncs.com -p 5432

Parâmetro

Exemplo

Descrição

-s

100

Fator de escala. O valor 100 cria 10.000.000 linhas na tabela pgbench_accounts.

-i

server

Banco de dados a ser inicializado.

-U

test_user

Conta privilegiada do cluster onde reside o banco de dados servidor.

-h

pc-****.pg.rds.aliyuncs.com

Endpoint do cluster onde reside o banco de dados servidor.

-p

5432

Porta. Utilize a porta exibida no console.

Após a conclusão do teste, colete uma segunda amostra no banco de dados de perfil:

SELECT take_sample();

Visualize todas as amostras coletadas:

SELECT * FROM show_samples('server');

A saída esperada é semelhante a:

 sample |      sample_time       | sizes_collected | dbstats_reset | bgwrstats_reset | archstats_reset
--------+------------------------+-----------------+---------------+-----------------+-----------------
      1 | 2024-02-23 07:29:53+00 | t               |               |                 |
      2 | 2024-02-23 08:11:39+00 | t               |               |                 |

Etapa 6: Gerar um relatório

Exporte os dados entre duas amostras para um relatório HTML utilizando um dos métodos a seguir.

Método 1: Utilize a linha de comando interativa do psql para gravar a saída em um arquivo local.

\o report_1_2.html
SELECT get_report('server',1,2);

Método 2: Execute o psql diretamente pela linha de comando para gravar a saída em um arquivo.

psql -Aqtc "SELECT get_report('server',1,2)" \
   -o report_server_1_2.html -d profile \
   -h <endpoint_of_the_profile_database_cluster> \
   -p <port_of_the_database_cluster> \
   -U <privileged_account_for_the_profile_database_cluster>

Substitua os espaços reservados pelos valores reais do seu cluster de banco de dados de perfil.

Próximos passos

  • Agendar amostragens periódicas: Utilize o pg_cron para coletar amostras automaticamente conforme uma programação. A frequência recomendada é de uma a duas vezes por hora.