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_profileestá instalado. Este banco se conecta ao banco de dados servidor viadblink, 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_statementsadicionada ao parâmetroshared_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_profilepossua 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 |
|
|
|
Nome definido pelo usuário para esta conexão. |
|
|
|
Nome do banco de dados servidor. |
|
|
|
Canal de conexão. Apenas |
|
|
|
Conta privilegiada do cluster onde reside o banco de dados servidor. |
|
|
|
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 |
|
|
|
Fator de escala. O valor |
|
|
|
Banco de dados a ser inicializado. |
|
|
|
Conta privilegiada do cluster onde reside o banco de dados servidor. |
|
|
|
Endpoint do cluster onde reside o banco de dados servidor. |
|
|
|
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_cronpara coletar amostras automaticamente conforme uma programação. A frequência recomendada é de uma a duas vezes por hora.