Hat jemand Erfahrung mit der Konfiguration von Doctrine ORM für eine Postgres-Datenbank mit PGBouncer-Verbindungspooling? Wir verwenden eine von Digital Ocean verwaltete Postgres-Datenbank und dürfen 22 gleichzeitige DB-Verbindungen herstellen.
Unsere App kann keine Verbindung herstellen, wenn wir viel Datenverkehr haben, der mehr als 22 gleichzeitige HTTP-Anfragen verursacht ( für die jeweils eine DB-Verbindung erforderlich ist. Wir sehen manchmal Fehler wie FATAL: verbleibende Verbindungsslots sind für Rollen mit dem SUPERUSER-Attribut reserviert.
Mit unserer Symfony-App erstellt Doctrine beim Booten eine neue DB-Verbindung app für eine Anfrage, und während der Kernel-Beendigung wird die DB-Verbindung geschlossen, sodass sie für andere Anfragen frei wird. Es handelt sich um 1 DB-Verbindung pro Webanforderung.
Um dies zu mildern, haben wir das Postgres-Verbindungspooling von Digital Ocean aktiviert, das bis zu 5000 DB-Verbindungen zu einem kleineren Satz realer Verbindungen zum Postgres multiplext Instanz – diese verwendet PGBouncer für das Verbindungspooling. Als sich PGBouncer jedoch im „Transaktions“-Modus befand, begannen wir, Fehler wie FEHLER: Aktuelle Transaktion wurde abgebrochen, Befehle ignoriert bis zum Ende des Transaktionsblocks zu sehen.
Ich denke für PHP Anwendungen ist der „Transaktions“-Modus nicht geeignet, da die App jedes Mal gestartet wird, wenn eine Anfrage empfangen wird.
Wir haben PGBouncer dann auf die Ausführung im „Sitzungs“-Modus umgestellt, was jedoch zu Warnungen führt über Zeitüberschreitungen beim Schließen von PHP-Sitzungen (Sitzungsdaten werden auch in Postgres gespeichert) wie PHP Warnung: Nicht erfasste PDOException: SQLSTATE[HY000]: Allgemeiner Fehler: 7 FATAL: query_wait_timeout\nSSL-Verbindung wurde unerwartet in /app/vendor/symfony/http-foundation/Session/ geschlossen. Storage/Handler/PdoSessionHandler.php:564.
Vorerst haben wir die Verbindung entfernt Pooling, sind aber wiederum der geringen Anzahl zulässiger physischer DB-Verbindungen ausgesetzt. Ich kann nicht glauben, dass dies kein häufigeres Problem ist, aber Google verrät nicht viel über das hinaus, was ich über das Umschalten von PGBouncer vom „Transaktions“-Modus in den „Sitzungs“-Modus beschrieben habe.
Verwendung von Doctrine ORM mit Postgres- und PGBouncer-Verbindungspooling ⇐ Php
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Symfony 4.1: Sie haben einen nicht existierenden Dienst "Doctrine" angefordert
by Anonymous » » in Php - 0 Replies
- 10 Views
-
Last post by Anonymous
-