Im SQL-Server-2005 wird zwischen Sessions und Connections unterschieden. Als ich das in dieser Woche bemerkte, musste ich ziemlich lange suchen bis ich den Unterschied bzw. die Zusammenhänge verstand:
Eine Session in SQL-Server-2005 ist das, was "früher" der System-Prozess war, den man in der Systemtabelle "sysprocesses" beobachten konnte. Jede Session hat eine Session-ID, die exakt dem entspricht, was bisher die SPID (system process ID) war. Neben den Session, die von Benutzern kommen, gibt es auch eine ganze Reihe von Sessions, die vom SQL-Server zur internen Verwaltung genutzt werden ("internal tasks"). Wie bisher sind sie daran erkennbar, dass deren Session-ID kleiner als 50 ist.
Informationen über Sessions kann man aus der Dynamic-Management-View (DMV) sys.dm_exec_sessions erfahren. Darin stehen neben den "bisherigen" Infos auch jede Menge Eigenschaften der Session, z.B. die aktuell gesetzten Werte der einschlägigen Settings, z.B. den Isolation-Level oder den Lock-Timeout. Sehr praktisch!
Jede Verbindung, die von "außen" zum SQL-Server aufgebaut wird, ist eine "Connection". Jeder Connection ist genau eine Session zugeordnet. Ich habe lange rumgerätselt, ob eine Session auch mehrere Connections haben kann, das ist zwar laut Doku möglich, ich fand aber keinen Hinweis darauf in welchen Fällen das wie gehen soll. Aber es scheint so zu sein, dass eine Connection nacheinander mehrere Sessions haben kann. Das scheint bei SOAP-Verbindungen relevant zu sein.
Connection-Informationen stehen in der DMV sys.dm_exec_connections. Hier finden sich dann auch die Netzadresse des Clients, das Login und solche Dinge. Schick ist, dass es pro Connection eine eindeutige unique ID gibt. Damit hat man endlich eine brauchbare ID, die nicht nach Beenden der Connection sofort wieder verwendet wird, wie das bei der SPID ist.
Daneben gibt es übrigens auch noch den Request. Jede Session kann mehrere Request ausführen. Darin wird das auszuführende SQL-Statement hinterlegt, die Transaktion, der Zugriffsplan usw.
Diese Infos stehen unter sys.dm_exec_requests. Neben den oben genannten Dingen stehen hier auch Status, Blockierungsinformationen und I/O-Informationen.
Für weitere Infos zu dem Thema empfehle ich den Artikel "Dynamic Management Views" auf SQLTeam.com.