Problem mit Lock / Too many connections

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

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.

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.