SQL: Jaka jest różnica między sesją a połączenie (session vs connection)

21-Lip-2015

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

Dodaj komentarz:

Autor: Rafał Kraik