Anzahl der geöffneten verbindungen und der Bedeutung von Schlaf-status einer Verbindung
Lief ich diese Abfrage in meiner Datenbank :
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE dbid > 0
GROUP BY dbid, loginame
---------------------------------------------------
SELECT COUNT(dbid) as TotalConnections
FROM sys.sysprocesses
WHERE
dbid > 0
---------------------------------------------------
exec sp_who2 'Active'
Ich möchte wissen, die Gesamtzahl der verbindungen zu meiner Datenbank. Die Summe der ersten Abfrage und der Betrag der zweiten Abfrage sind gleich, aber die Dritte Abfrage gibt eine unterschiedliche Anzahl von Zeilen.
Ich will wissen, was die Dritte Abfrage zurückgegeben? Ich sehe einige der status' in das Ergebnis der Dritten Abfrage sleeping
. Was bedeutet das? Ist die Verbindung im Leerlauf befindet, oder ist es bereit in den pool? Was bedeutet es, wenn ich viele sleeping
verbindungen in meinem Ergebnis?
Dank
- Ich glaube nicht, dass
sleeping
würde zurückgegeben werden, durch die Dritte Abfrage, es sei denn, Sie liefen ihn ohne Angabe'active'
...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Status
sleeping
die Sitzung verbunden ist, aber nicht aktiv, läuft alles (z.B. die einfachste definition, während Sie vielleicht nicht 100% korrekt, ist, dass es nichts für, dasssession_id
imsys.dm_exec_requests
).sp_who2 'active'
filtert alle spid statussleeping
oder hat einen letzten Befehl vonAWAITING COMMAND
,LAZY WRITER
oderCHECKPOINT SLEEP
. Nein habe ich nicht merken, wassp_who2
tut, schaute ich einfach im source-code:Beachten Sie, dass
sp_who2
ist undokumentierte und nicht unterstützte, und der sysprocesses-ist veraltet und wird derzeit nur aus Gründen der Abwärtskompatibilität. Sie werden besser bedient, denke ich, mit einem Verfahren, wie Adam Machanic ' s sp_whoisactive. Oder zumindest wissen, wie Sie mit den modernen DMVs, wiesys.dm_exec_sessions
undsys.dynamischen Verwaltungssichten dm_exec_requests
.BEARBEITEN
Sollte ich hinzufügen-die unglückliche disclaimer, dass die moderne DMVs immer noch nicht richtig verraten, die Datenbank(en) beteiligt. Aber was bedeutet es eigentlich, eh? Wenn Sie eine Abfrage wie diese:
Welche Datenbank-id erwarten Sie, zu bekommen, spiegelt sich in
sys.sysprocesses.dbid
für diese Sitzung während diese Abfrage ausgeführt wird? Das überlasse ich als übung dem Leser zu bestimmen, was eigentlich passiert. Lange Geschichte kurz, das ist nicht die Ansicht/Spalte, die Sie möchten, verlassen sich auf zu wissen, welche Datenbanken derzeit "berührt."sleeping
meine Verbindung nicht geschlossen nach dem letzten Befehl ausführen?sys.dm_exec_sessions
würde Niederlage der Zweck der Verbindungs-pooling.