Problem mit Lock / Too many connections

Allgemeines zu PostgreSQL.
Antworten
chkaufmann
Neuer Benutzer
Beiträge: 26
Registriert: Di 8. Mai 2018, 08:38

Problem mit Lock / Too many connections

Beitrag von chkaufmann » Fr 21. Dez 2018, 14:31

Zwischendurch habe ich das Problem "too many clients". Irgendwie schaffe ich nicht, das zu lokalisieren, denn wenn es passiert, kann ich ja auch mit keinem Tool mehr verbinden.

Ich vermute, dass irgend ein Statement in meiner Service Applikation ein Lock erzeugt und dann die PHP Requests der Website alle warten und so sehr schnell zu viele Connections offen sind. Aber auch da, ist es mal passiert, muss ich alles abschiessen und finde das "blocking" Statement nicht mehr.

Soweit ich gelesen habe, sind eigentlich nur DDL Statements gefährlich und da sollten eigentlich keine laufen.

Wie gehe ich am Besten vor das Problem einzugrenzen?

Christian

akretschmer
Erfahrener Benutzer
Beiträge: 7577
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Problem mit Lock / Too many connections

Beitrag von akretschmer » Fr 21. Dez 2018, 14:35

Wenn Du für Deine Applikation einen eigenen, Nicht-Superuser-User definierst und verwendest, dann kannst Du Dich als Superuser noch immer anmeldelden, solange `superuser_reserved_connections` nicht überschritten ist. Dazu solltest Du noch `log_lock_waits` setzen, dann findest die Locks im Log.
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

castorp
Erfahrener Benutzer
Beiträge: 1107
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Re: Problem mit Lock / Too many connections

Beitrag von castorp » Fr 21. Dez 2018, 14:56

Der Grund könnten auch DML Statements sein die nicht comitted werden.

Z.B. der Code macht einen UPDATE auf einen Datensatz, vergisst aber das COMMIT. Der Code der entscheidet, dass dieser Datensatz geändert werden musst läuft nochmal los, sieht (wegen dem fehlenden COMMIT) den altern Wert, versucht diesen zu ändern und wartet. Dann läuft der Code wieder los (usw.)

Konkurrierende INSERTs mit den gleichen Werten für die PK spalte können auch dazu führen, dass unterschiedliche Transaktionen auf einander warten.
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

Antworten