O ‘pg_stat_activity’ é uma das views do PostgreSQL a ser usada quando se trata de monitoramento e diagnóstico. Ela fornece informações das atividades correntes no banco de dados, mostrando uma linha por sessão ou conexão com detalhes como o estado da consulta, o tempo de início e a consulta atual.


PostgreSQL: MonitoramentoPostgreSQL: pg_stat_activity view 

Como utilizar a query pg_stat_activity ?

Para obter informações sobre todas as sessões correntes, você pode executar a seguinte consulta:

SELECT * FROM pg_stat_activity;

Para facilitar sua análise, você pode filtrar pelos seguintes campos:

Campos úteis e suas descrições

datid e datname

ID e nome do banco de dados ao qual a sessão está conectada, respectivamente.
pidID do processo do sistema operacional associado à sessão.

usesysid e usename

ID e nome do usuário do banco de dados.
application_nameNome da aplicação que iniciou a sessão.
client_addrEndereço IP do cliente.
stateEstado atual da sessão, como 'active', 'idle', 'idle in transaction' etc.
query_startTimestamp de quando a consulta atual foi iniciada.
queryTexto da última consulta executada ou atualmente em execução pela sessão.

Identificando sessões inativas

Conexões "idle in transaction" podem ser problemáticas, pois indicam transações que foram iniciadas, mas ainda não foram confirmadas nem revertidas:

SELECT * FROM pg_stat_activity WHERE state = 'idle in transaction';

Identificando consultas demoradas

Para encontrar consultas que estão sendo executadas há mais de 5 minutos, por exemplo, você pode usar:

SELECT * FROM pg_stat_activity
WHERE state = 'active' AND now() - query_start > interval '5 minutes';

Identificando sessões ativas

Consultando sessões em estado ativas.

SELECT * FROM pg_stat_activity WHERE state = 'active';

Identificando sessões que estão bloqueadas por outras

SELECT
  blocking.pid AS blocking_pid,
  blocking.query AS blocking_query,
  blocked.pid AS blocked_pid,
  blocked.query AS blocked_query
FROM
  pg_stat_activity AS blocked
JOIN
  pg_stat_activity AS blocking ON blocked.waiting_pid = blocking.pid
WHERE
  blocked.wait_event IS NOT NULL;
A view pg_stat_activity é uma ferramenta para administradores e desenvolvedores de banco de dados que desejam monitorar e diagnosticar atividades no PostgreSQL. Com ela, você pode identificar rapidamente sessões inativas, consultas demoradas e até intervir quando necessário. Como sempre, ao trabalhar com operações que podem impactar a disponibilidade ou integridade dos dados, é essencial proceder com cautela e ter backups atualizados.