2011-09-22 37 views
15

在sql server中被認爲是一個會話。 我試圖使用sp_getapplock和文檔狀態:SQL Server會話

放置在資源上的鎖與當前事務或當前會話相關聯。當事務提交或回滾時,會釋放與當前事務關聯的鎖。會話註銷時釋放與會話關聯的鎖。當服務器因任何原因關閉時,所有鎖都被釋放。

'會話註銷時會釋放與會話關聯的鎖'。

我需要知道什麼是會話。使用管理工作室進行連接是數據庫的會話;使用asp.net連接到sql server也會創建一個會話。

如果我使用ADO.net和連接池,連接池中的每個連接都被認爲是不同的會話?

回答

3

如果我用ADO.net和連接池,連接池中的每個連接都被認爲是不同的會話?

的排序。幾乎每次你打開/關閉一個新的連接,這是一個單一的會話。然而,連接池的其中一個「特性」是,它並不總是根據命令打開/關閉,並且當它看到你反覆打開和關閉一堆連接時,它將在幕後使用單個連接,我相信這會導致在sql server上進行單個會話。

+4

「...我相信結果在一個單一的會話上的SQL Server」。這聽起來像純粹的猜測,即使它以這種方式工作,它似乎沒有記錄,因此不應該依賴。 –

3

使用連接池時,請注意sp_reset_connection在重用連接的每次重新分配之間調用。 This SO Post詳細介紹了由sp_reset_connection完成的清理。

編輯 在你的問題的情況下,sp_reset_connection「釋放獲取的鎖」。

0

sp_getapplock的@LockOwner是指當它被釋放到:

  • 「會話」:在會話結束
  • 「交易」:對提交或回退

基本上,一個SPID在sys.sysprocesses是一個「會話」