Recentemente precisei analisar e dimensionar as conexões estabelecidas e os processos que estavam sendo executados em cada uma das conexões no PostgreSQL, o banco de dados possui uma série de estruturas que permitem recuperar tais informações estatísticas.
Um cenário comum quando precisamos analisar a performance dos nossos sistemas, é o levantamento das conexões estabelecidas com o banco de dados, tal informação é útil para:
Como resultado, teremos apenas uma simples conexão com nosso banco de dados, isto porque, não temos nenhuma aplicação conectada no momento, veja abaixo:
Agora para simular um ambiente real, irei executar um aplicativo que irá criar um pool de conexões com 10 conexões, e novamente executar a query de estatística, o resultado será como o abaixo:
Podemos analisar algumas informações importantes no resultado:
Análise das Conexões Estabelecidas
- Analisarmos se o pool esta corretamente a dimensionado;
- Analisar quantas conexões estão sendo utilizadas;
- Analisar se existem muitas conexões alocadas e ociosas com a base de dados.
Em muitas aplicações podemos encontrar problemas relacionados a integração entre o aplicativo e o banco de dados.
Coleta de Estatísticas no PostgreSQL
O PostgreSQL possui uma série de views que nos fornecem dados estatísticos e gerenciais sobre as base de dados, para mais detalhes podemos consultar o site oficial, onde temos todos os dados que podemos utilizar para o monitoramento:
Vamos nos concentrar na view pg_stat_activity, ela fornece informações sobre todas as conexões alocadas e o que esta sendo executado em cada uma delas.
Para ver o funcionamento, criei um database chamado bd_analise, e agora vamos rodar a seguinte query em nosso banco de dados:
select datid, datname, pid, usename, query_start, waiting, state, query from pg_stat_activity;
Como resultado, teremos apenas uma simples conexão com nosso banco de dados, isto porque, não temos nenhuma aplicação conectada no momento, veja abaixo:
Resultado da execução da query sobre a view pg_stat_activity. |
Resultado após criação de um pool com 10 conexões. |
- datid: Identificação da conexão;
- datname: Nome da base de dados;
- pid: Identificação do processo de execução;
- usename: Nome do usuário;
- query_start: Horário em que a consulta foi iniciada;
- waiting: Verifica se a conexão esta em espera;
- state: Estado atual da conexão;
- query: Query mais recente executada.
Obs: Existem outras colunas que podem ser utilizada para uma análise mais detalhada, isso depende da informação que necessitamos encontrar na análise.
Além da view pg_stat_activity, existem outras que possuem finalidades diferentes, para mais detalhes, consulte a documentação oficial, lá existem explicações detalhadas para as diversas análises possíveis.
Até a próxima.
Referências:
https://www.postgresql.org/docs/9.4/static/monitoring.html
https://www.postgresql.org/docs/9.4/static/monitoring-stats.html
Referências:
https://www.postgresql.org/docs/9.4/static/monitoring.html
https://www.postgresql.org/docs/9.4/static/monitoring-stats.html
Comentários
Postar um comentário