Mamy w SQL dwa widoki:
- sys.dm_exec_connections
- sys.dm_exec_sessions
Dlaczego dane o połączeniach/sesjach zostały podzielone na 2 widoki? Czy może być sesja bez połączenia albo połączenie bez sesji?
Zazwyczaj jedna sesja = 1 połączenie. Ale połączenie określa raczej fizyczne cechy komunikacyjne między klientem a serwerem, jak rodzaj protokołu, ilość wysyłanych i odbieranych pakietów, szyfrowanie połączenia, parametry wykorzystanego protokołu itp.
Sesja to obiekt, w którym z kolei zapisujemy informacje o nawiązanym przez klienta połączeniu, ale tam interesują nas bardziej typowo SQL-owe parametry jak informacja o tym kto się zalogował, jaki poziom izolacji transakcji ma być używany, jaki jest język, ustawienia daty itp.
A w jakim przypadku nie ma zależności 1 połaczenie = 1 sesja?
- Istnieje coś takiego jak Multiple Active Result Sets (MARS), gdzie w jednym połączeniu może być wiele sesji.
- Mogą być też sesje bez połączeń – nawiązane przez procedury aktywacyjne brokera, sesje systemowe
- Istnieją też połączenia bez sesji, np wykorzystywane poza TDS np. mirroring lub broker