Pular para o conteúdo principal

Utilizando a pg_stat_activity para analisar estatísticas do PostgreSQL

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.

Análise das Conexões Estabelecidas


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:

  •  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.

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:

Resultado após criação de um pool com 10 conexões.

Podemos analisar algumas informações importantes no resultado:

  • 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.


Comentários

Postagens mais visitadas deste blog

Utilizando LocalDate, LocalDateTime e LocalTime na Prática

Tudo bem pessoal, hoje iremos avaliar e analisar operações de manipulação de Datas envolvendo a JavaTime API introduzida no Java 8.

Exemplos da java.time API
Já se passaram alguns anos desde o lançamento do Java 8 e mesmo após este período, há empresas que desconhecem o poder da java.time API, esta foi uma nova API de datas introduzida no Java 8 visando resolver problemas que tínhamos com as velhas classes Date e Calendar.

Vamos mostrar vários exemplos práticos do uso da API:
Criação de objetos No exemplo abaixo, estamos criando os objetos para manipulação de datas, perceba que temos 3 tipos, sendo LocalDate para manipular datas, LocalDateTime para manipular data/hora e LocalTime para horas:
LocalDate localDate = LocalDate.now(); LocalDateTime localDateTime = LocalDateTime.now(); LocalTime localTime = LocalTime.now();
Utilizando formatação Aqui realizamos a operação de formatação, perceba que não foi necessário utilizar a classe SimpleDateFormat, que usaríamos em conjunto com D…

Lendo e Manipulando arquivos CSV com Java

Olá hoje veremos como realizar a leitura e manipulação de arquivos CSV com Java, mostrando que as novas versões da plataforma Java deixaram algumas tarefas simples de serem realizadas.

Exemplo de Arquivo Hoje em dia é comum ao realizar integrações ou carga de dados o uso de arquivos CSV, isto porque, este arquivo possui uma estrutura de fácil entendimento e simples de manipular na maioria das plataformas de desenvolvimento.

Para realizar a leitura dos dados vamos manipular um arquivo com as seguintes colunas: namecpfagephone address:

name;cpf;age;phone;address caio;123456789;20;1145223643;AvenidaPaulista vinicius;147852369;18;1125253625;AvenidaManoel sandra;963258741;30;1174587858;RuaTeixeira regina;125478522;40;1145254536;RuaFernando fernando;785245563;42;1145253669;RuaPereira augusto;456123014;50;1125363633;AvenidaPaulinia maria;456123789;10;1125455525;AvenidaNossaSenhora
Para representar os dados em objetos Java iremos utilizar a seguinte classe:

importlombok.AllArgsConstruc…

Versionamento de Banco Dados com Flyway

Olá pessoal, hoje iremos analisar e aprender como realizar o versionamento e gerenciamento das bases de dados relacionais utilizando o framework Flyway.

Versionamento de Banco Dados Ao trabalhar com desenvolvimento de sistemas é comum realizarmos o versionamento, isso porque uma aplicação pode necessitar de correções, novas funcionalidades e evoluções, onde para garantir a compatibilidade e cuidar do seu ciclo de vida, geramos versões onde é especificado quais itens estão presentes em cada release.
Vamos imaginar seguinte cenário: Sistema ERP1.0.0: Entrega dos módulos Financeiro e RH;1.1.0: Entrega do módulo Contas a Receber. Perceba que a ideia é controlar o que cada versão possui de diferente, e para controlar essas mudanças no lado da aplicação existem várias técnicas e ferramentas, mas e para controlar as mudanças no lado do Banco de dados ? 
Para isso podemos utilizar ferramentas de versionamento que ajudam a realizar este controle, a ferramenta que iremos utilizar é o Flyway.
Con…