Otrzymywanie wielu zapytań z „pokaż poziom izolacji transakcji” w pg_activity

10

Używam serwera PostgreSQL do celów produkcyjnych.

Kiedy odpalam takie zapytanie

select * from pg_stat_activity

na moim serwerze otrzymuję 98% takich zapytań

SHOW TRANSACTION ISOLATION LEVEL

a mój serwer akceptuje tylko 100 połączeń, więc nie mogę kontynuować.

Dlaczego to się dzieje? Jak mogę zablokować wszystkie te zapytania?

Yogesh Prajapati
źródło
4
Postgres nie tworzy połączeń samodzielnie. To twoja aplikacja tworzy te połączenia i uruchamia te zapytania. Być może pula połączeń lub coś podobnego.
a_horse_w_no_name
2
Czy korzystasz z aplikacji Java? Używasz HikariCP, a może innej opcji łączenia pul? Używam HikariCP i widzę podobne rzeczy, kiedy się loguję psqli robię select query from pg_stat_activity;... Zastanawiałem się również, dlaczego tak się dzieje; Domyślam się, że jest to mechanizm, dzięki któremu HikariCP utrzymuje „świeże” połączenia.
Chris W.

Odpowiedzi:

2

Jeśli tam są; są tam, ale magicznie nie wyskoczyły z powietrza. Chociaż chciałbym, abyś wrócił i powiedział nam, co było w twoim przypadku, zazwyczaj jest to jedna z dwóch rzeczy,

  1. Pula połączeń
  2. Abstrakcja ORM lub SQL

Czasami ci faceci łączą się i rozpoczynają puste transakcje lub przygotowują transakcję. Zawsze jest to wynikiem złej biblioteki. Jest to usprawiedliwione, jeśli biblioteka jest nowa lub nowa w bazie danych. Jeśli biblioteka ma już lata i robi to, podejrzewam, że nie mają na nią zbyt wielu oczu i szukają alternatyw.

Z komentarzy

Postgres nie tworzy połączeń samodzielnie. To twoja aplikacja tworzy te połączenia i uruchamia te zapytania. Być może pula połączeń lub coś podobnego. - a_horse_w_no_name 10 września 13 o 9:03

Czy korzystasz z aplikacji Java? Używasz HikariCP, a może innej opcji łączenia pul? Używam HikariCP i widzę podobne rzeczy, gdy loguję się do psql i wybieram zapytanie z pg_stat_activity; ... Zastanawiałem się również, dlaczego tak się dzieje; Domyślam się, że jest to mechanizm, dzięki któremu HikariCP utrzymuje „świeże” połączenia. - Chris W. 16 stycznia 16 o 19:22

Chociaż jest to możliwe, jest to próba utrzymania świeżości połączenia, koszerny sposób na zrobienie tego jest mniej więcej taki

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

Zamiast tego możesz złożyć raport o błędzie, aby użyć tej metody.

Evan Carroll
źródło