In unserem Fall hatte das Problem nicht viel mit den Schlössern selbst zu tun.
Das Problem war, dass einer unserer Anwendungsendpunkte 2 Verbindungen parallel öffnen musste, um eine einzige Anfrage zu verarbeiten.
Beispiel:
- 1. Verbindung öffnen
- Start Transaktion 1
- 1 Zeile in Tabelle1 sperren
- 2. Verbindung öffnen
- Transaktion 2 starten
- 1 Zeile in Tabelle2 sperren
- Transaktion 2 festschreiben
- 2. Verbindung freigeben
- Commit-Transaktion 1
- 1. Verbindung freigeben
Unsere Anwendung hatte einen auf 10 Verbindungen begrenzten Verbindungspool.
Leider funktionierte die Anwendung unter Last nicht mehr, sobald alle Verbindungen genutzt wurden, und wir hatten dieses Problem. Wir hatten mehrere Anfragen, die eine zweite Verbindung öffnen mussten, um sie abzuschließen, was aber aufgrund der Begrenzung des Verbindungspools nicht möglich war. Infolgedessen hielten diese Anfragen eine Sperre für die Zeile table1 für eine lange Zeit, was dazu führte, dass die folgenden Anfragen, die dieselbe Zeile sperren mussten, diesen Fehler auslösten.
Lösung:
- Auf kurze Sicht Wir haben das Problem behoben, indem wir das Limit für den Verbindungspool erhöht haben.
- Auf lange Sicht haben wir alle verschachtelten Verbindungen entfernt, um das Problem vollständig zu lösen.
Tipps:
Sie können leicht überprüfen, ob Sie verschachtelte Verbindungen haben, indem Sie versuchen, das Limit Ihres Verbindungspools auf 1 zu senken und Ihre Anwendung zu testen.