Obtendo várias consultas com "mostrar nível de isolamento da transação" em pg_activity

10

Estou usando o servidor PostgreSQL para uso em produção.

Quando aciono uma consulta como

select * from pg_stat_activity

no meu servidor, estou recebendo 98% de consultas como

SHOW TRANSACTION ISOLATION LEVEL

e meu servidor aceita apenas 100 conexões, portanto, não posso prosseguir.

Por que isso está acontecendo? Como posso bloquear todas essas consultas?

Yogesh Prajapati
fonte
4
O Postgres não cria conexões por si só. É seu aplicativo que cria essas conexões e executa essas consultas. Possivelmente um pool de conexão ou algo semelhante.
a_horse_with_no_name 10/09
2
Você está executando um aplicativo Java? Usando o HikariCP, ou talvez outra opção de pool de conexão? Estou usando o HikariCP e vejo uma coisa semelhante ao entrar psqle fazer select query from pg_stat_activity;... Também estava me perguntando por que isso está ocorrendo; Meu palpite é que este é um mecanismo pelo qual o HikariCP mantém as conexões "atualizadas".
Chris W.

Respostas:

2

Se eles estão lá; eles estão lá, mas não saíram magicamente do nada. Embora eu adorasse que você voltasse e nos dissesse o que eram no seu caso, geralmente é uma das duas coisas,

  1. Pool de conexão
  2. Abstração ORM ou SQL

Às vezes, esses caras se conectam e iniciam transações vazias ou preparam uma transação. É sempre o resultado de uma biblioteca ruim. É desculpável se a biblioteca for nova ou nova no banco de dados. Se a biblioteca tem anos e faz isso, eu suspeitaria que eles não têm muitos olhos nela e procuramos alternativas.

Dos comentários,

O Postgres não cria conexões por si só. É seu aplicativo que cria essas conexões e executa essas consultas. Possivelmente um pool de conexão ou algo semelhante. - a_horse_with_no_name 10/09 '13 às 9:03

Você está executando um aplicativo Java? Usando o HikariCP, ou talvez outra opção de pool de conexão? Estou usando o HikariCP e vejo uma coisa semelhante quando faço logon no psql e seleciono query em pg_stat_activity; ... Também estava me perguntando por que isso está ocorrendo; Meu palpite é que este é um mecanismo pelo qual o HikariCP mantém as conexões "atualizadas". #: 22416 Chris W.

Embora seja possível, é uma tentativa de manter uma conexão "atualizada". A maneira mais kosher de fazer isso é algo como isto

result = PQexec(imp_dbh->conn, "/* DBD::Pg ping test v3.6.0 */");

Você pode enviar um relatório de erro para usar esse método.

Evan Carroll
fonte