Erhalten mehrerer Abfragen mit "show transaction isolation level" in pg_activity

9

Ich benutze postgres DB-Server für meine Produktion verwenden.

Wenn ich eine Anfrage select * from pg_stat_activity auf meinem Postgresql-Server auslöst, Also bekomme ich 98% der Anfragen wie "SHOW TRANSACTION ISOLATION LEVEL" und mein postgresql Server akzeptiert nur 100 Verbindungen. und mein Server bleibt stecken. also kann ich nicht weiter vorgehen.

Hat jemand eine Idee, warum das passiert ist, gibt es eine Idee, diese alle Fragen zu blockieren. oder warum diese Abfrage so viele Verbindungen erzeugt?.

    
Yogesh Prajapati 10.09.2013, 08:26
quelle

2 Antworten

1

SHOW TRANSACTION ISOLATION LEVEL wird wahrscheinlich aufgerufen, wenn Ihr Verbindungspool eine Verbindung öffnet

Haben Sie versucht, die Größe Ihres Verbindungspools zu reduzieren, versuchen Sie, ihn auf 1 zu setzen, und Sie werden vielleicht eine bessere Vorstellung davon bekommen, was vor sich geht.

Ich hatte gerade ein ähnliches Problem heute, das ist, wie ich diesen Beitrag gefunden habe, fand ich max connection reached nur in meiner Testumgebung, der Grund ist, dass mein Test-Framework (ScalaTest) scheint das Datenbankobjekt in ORM für jeden zu instanziieren Testfall.

Zum Beispiel haben meine Postgres

  • max_connections = 100
  • connection pool = 100

Es sollte in Ordnung sein, wenn nur eine App mit der Datenbank verbunden ist, aber im Test wird der Verbindungspool so viele Instanzen wie meine Testfälle instanziiert, so dass er das Maximum erreicht.

    
Qingwei 01.05.2016 13:38
quelle
0

Es gibt nicht annähernd genug Informationen, um in Ihrer Beschreibung zu beginnen, dies zu lösen. Es folgt ein allgemeiner Ratschlag zur Fehlerbehebung.

  1. Beginnen Sie mit den anderen Informationen in pg_stat_activity. Was ist der Anwendungsname? Um welche IP-Adressen handelt es sich? Kurz gesagt, woher kommen diese Anfragen?
  2. Wenn Sie einen Mangel an Verbindungen haben, sind die Fragen, warum Sie so viele bekommen und warum tun sie so wenig Arbeit. Dies beinhaltet die Fehlerbehebung der Client-Software, nicht des Servers selbst. Es lohnt sich auch zu fragen, ob die Abfragen in der Transaktion aktiv, inaktiv oder inaktiv sind und, wenn sie gerade inaktiv sind, warum sie die Verbindung nicht getrennt haben, wenn dies ein Limit ist.

Dies wird gesagt, meine Vermutung ist, dass diese von einem db-Framework stammen, das die Client-Software verwendet, um eine Verbindung herzustellen. Und meine Vermutung ist, dass Sie wahrscheinlich ein db connecction leak haben als viele Abfragen, die nutzloses Zeug machen.

    
Chris Travers 26.10.2015 16:05
quelle

Tags und Links