2011-01-24 59 views
0

我不得不面對以下問題。我有一個應用程序,用戶可以登錄並執行一些操作,如添加新項目。我也有Reporting Services中的統計數據。問題是統計數據非常耗時,而且執行時,用戶無法創建新項目。在我的sql查詢統計我有所有選擇語句裝飾WITH nolock語句。不過,我可以看到有些表使用活動監視器鎖定。我看到它們被對象選項卡鎖定是否正確?我怎樣才能找出哪些表被鎖定? 當我使用下面的語句:確定哪些表被鎖定

SELECT * FROM MyTable WITH (nolock) 

我也可以看到這個查詢鎖MyTable表。請幫幫我。

+0

並非所有的鎖是相同的:共享,更新,獨家 – JeffO

+0

你有任何的統計查詢多個表?如果是這樣,每個表是否都是'nolock'?例如'SELECT * FROM table1 WITH(nolock)INNER JOIN table2 WITH(nolock)ON ...' –

+0

yes ...他們每個人都有WITH(nolock) –

回答

0

請勿使用NOLOCK。 Dirty reads are inconsistent reads

改爲使用SNAPSHOT ISOLATION。然後你得到兩全其美:一致性讀數無鎖。從查詢中刪除所有的鎖提示,然後啓用讀提交快照:

ALTER DATABASE [<dbname>] SET READ_COMMITTED_SNAPSHOT ON 
+0

如果我在統計信息的查詢執行前設置它,它會工作嗎? –

+0

這是一個數據庫選項。一旦設置,它將保持設置。你只需要做一次,就是這樣。 –

+0

ok.but我想在執行查詢之前設置它,然後在執行查詢後恢復默認設置 –