當通過DataReader
從SQL服務器查詢返回大型數據集時,我們的數據層存在一些問題。當我們使用DataReader
填充業務對象並將它們序列化回客戶端時,獲取可能需要幾分鐘的時間(我們向用戶展示了進展:-)),但是我們發現有一些相當硬核鎖定正在進行在受影響的表上導致其他更新被阻止。使用SQL Server鎖定的DataReader行爲
所以我想我的天真的問題是,在什麼時候執行查詢實際放棄的結果取出鎖?我們似乎發現,鎖直到DataReader
的最後一行被處理,DataReader
實際上關閉 - 這看起來是否正確?關於DataReader
如何在幕後工作的快速101會很好,因爲我一直在努力尋找任何體面的信息。
我應該說我意識到鎖定問題是主要關心的問題,但我只關心DataReader
這裏的行爲。
第1點很有趣:我經常看到它 – gbn 2009-10-08 18:50:18
非常棒的答案,謝謝。查詢在讀取提交隔離級別下執行,並將READ COMMITTED SNAPSHOT ON設置確實解決了阻塞問題。我仍然很好奇爲什麼這些鎖(其中大多數是S Page鎖)在查詢期間被保留,因爲沒有使用鎖提示,並且根據SQL Profiler,沒有發生鎖升級。 – Graham 2009-10-09 07:38:33