2009-08-04 94 views
1

我已經將一組數據庫從sql server 2000升級到sql server 2008,現在大量讀取阻止寫入,但這在sql server 2000中不是問題(相同的數據庫和相同的應用程序&報告)爲什麼? 2008年的設置有什麼不同? 2000年是否默認讀取未提交的交易?sql server 2008讀取阻止寫入

(更新) 將(nolock)添加到有問題的報告視圖可以在短期內修復問題 - 從長遠來看,我們必須複製數據以用快照或手動報告。 [嘆氣]我仍然想知道sql server 2008是如何使這成爲必要的。

(update 2)由於有問題的視圖僅用於報告「未讀取」,因此現在應該可以。

回答

2

默認情況下,SQL Server 2000沒有使用READ UNCOMMITTED,沒有。

它可能與執行計劃中的優化更改有關。某些索引可能與SQL Server 2000中的順序不同。或者,SQL Server 2008使用SQL Server 2000完全忽略該索引的索引。

如果沒有更多信息,很難確切說明發生了什麼,但請仔細閱讀鎖定類型並檢查兩個衝突查詢的執行計劃。這是一個很好的short article,它解釋了爲什麼事情可能會陷入僵局的另一個例子。

+0

*是*好文章。 Thx – 2009-08-05 01:36:15

1

Read Committed是SQL Server 2000中的默認隔離級別,而不是Read Uncommitted。

http://msdn.microsoft.com/en-us/library/aa259216(SQL.80).aspx

我想象的東西在你的應用程序中設置隔離級別 - 可能是通過連接對象的屬性之一。查看用於通過ADO,ODBC和OLE DB設置事務隔離級別的方法here

你可以在SQL Server 2008中做同樣的事情,但是......你確定你的應用程序應該在未讀取的情況下運行嗎?您的應用專門用於處理數據移動和幻像讀取嗎?

1

我真的很驚訝你沒有遇到SQL Server 2000中的問題。我們似乎每個星期都在修復鎖定表的存儲過程,因爲有人忘記了nolocks。

+0

所以我們只是幸運? – 2009-08-04 20:46:02