2013-05-17 7 views
9

Chcę zastosować niektóre ustawienia poziomu sesji sql dla niektórych procesów w mojej aplikacji c#.SqlConnection vs Sql Session. Czy ich życie jest zbieżne?

Na przykład chcę ustawić DEADLOCK_PRIORITY dla niektórych procesów w tle na LOW.

Pytania są:

  1. Gdybym otwarcie nowego połączenia SQL, który ma rozpocząć nową sesję SQL?

  2. Czy sesja sql będzie trwała, dopóki połączenie nie zostanie zamknięte? Jeśli zastosuję moje ustawienia zaraz po otwarciu SqlConnection, czy będą one ważne dla wszystkich zapytań wykonanych w kontekście tego samego SqlConnection?

  3. Co z połączeniem przy połączeniu? Czy jest to możliwe, że moje ustawienie SET DEADLOCK_PRIORITY LOW zostanie ponownie użyte przez inne procesy w moim systemie (których nie chcę), ponieważ SqlConnection nie jest faktycznie zamknięty (łączenie połączeń asp.net decyduje się na ponowne użycie).

Dziękujemy!

+0

Z tego co pamiętam, 'sesja' pokazuje zewnętrzne połączenia i wewnętrzne procesy, a" połączenie "pokazuje tylko połączenia zewnętrzne. – Brian

Odpowiedz

2

ADO.NET wykonuje sp_reset_connection po pobraniu SqlConnection z puli (po jej zamknięciu, aby powrócić do puli). Zgodnie z What does "exec sp_reset_connection" mean in Sql Server Profiler? wszystkie opcje SET są resetowane. Obejmuje to DEADLOCK_PRIORITY.

Proponuję ci napisać mały program testowy, aby to potwierdzić. Pule sesji ADO.NET nie są doskonałe, na przykład nie resetuje ISOLATION LEVEL i nie wycofuje transakcji podczas zamykania.

+0

Dziękujemy! To było raczej przydatne. Czy możesz odpowiedzieć również na pierwsze 2 pytania? Chyba odpowiedź brzmi "tak" dla obu? –

+1

'SqlConnection' naprawdę reprezentuje sesję dla SQL Server. Fizyczne połączenie jest zarządzane przez ADO.NET. Ilekroć "Otwórz" 'SqlConnection' tworzysz nową sesję, a nie nowe połączenie. A więc: 1 = tak, 2 = tak, 3 = nie (ale uważaj na "POZIOM IZOLACJI"! - uważam to za błąd). – usr

+0

Dziękuję bardzo! –

Powiązane problemy