Wir haben derzeit eine kleine Situation in unseren Händen - es scheint, dass jemand, irgendwo vergessen, die Verbindung in Code zu schließen. Das Ergebnis ist, dass der Pool von Verbindungen relativ schnell erschöpft ist. Als temporärer Patch haben wir Max Pool Size = 500;
zu unserer Verbindungszeichenfolge im Webservice hinzugefügt und den Pool wiederverwendet, wenn alle Verbindungen verbraucht sind, bis wir das herausgefunden haben.Alle Verbindungen im Pool sind in Verwendung
Bisher haben wir dies getan:
SELECT SPId
FROM MASTER..SysProcesses
WHERE DBId = DB_ID('MyDb') and last_batch < DATEADD(MINUTE, -15, GETDATE())
SPID ist zu erhalten, die 15 Minuten lang nicht verwendet werden. Wir versuchen nun die Abfrage zu erhalten, die zuletzt, dass SPID mit der Verwendung ausgeführt wurde:
DBCC INPUTBUFFER(61)
aber die angezeigten Abfragen sind vielfältig, was bedeutet, entweder etwas auf Basisebene bezüglich Verbindung Manipulation war gebrochen, oder unser Abzug fehlerhaft ist. ..
Gibt es einen Fehler in unserem Denken hier? Liefern die DBCC/Sysprocesses Ergebnisse, die wir erwarten, oder gibt es Nebeneffekte? (Zum Beispiel Verbindungen im Pool Einfluss?)
(bitte halten, was wir mit SQL herausfinden konnten, da die Jungs, die den Code taten es viele und nicht alle Anwesenden jetzt)
'die Leute, die den Code gemacht haben, sind viele und nicht alle gegenwärtig '.. Ich glaube nicht, dass sie alle da waren, als sie vergaßen, ihre SQL-Verbindungen zu schließen. ;) –
hast du den Quellcode richtig? Es sollte nicht schwer sein, nach all den Verbindungen zu suchen, die geöffnet und geschlossen werden, vorausgesetzt, dass sie nicht absichtlich Verbindungen herumreichen ... –
@will @mitch - du * willst * nicht auf den Code schauen, vertrau mir :) Aber letztendlich war das die einzige Option am Ende ... und wir haben es behoben, indem wir try-finally {close} überall hin brachten ... – veljkoz