2014-11-21 25 views
0

在我們的應用程序按照來自DBA的建議,我們正在爲每個使用的選擇查詢添加無鎖提示。是否可以在數據庫級別設置不鎖定或TRANSACTION ISOLATION LEVEL READ UNCOMMITTED?

因此,它需要每個選擇查詢都需要修改以設置表提示,這是手動完成的時間。

當我們要使用的提示在所有表格中的數據庫,是否有可能設置沒有鎖提示(或事務隔離級別未提交讀)在數據庫水平,這樣不需要每個查詢被修改和表提示適用於所有查詢?

+0

我會要求你的dba證明每一個選擇語句都需要一個無鎖提示和他/她期望的問題的真實例子,並且我會在你的經理CC中進行對話以確保像這樣的變化有其標誌。 SQL Server非常擅長處理事物本身,而不使用提示。只有在極少數情況下,您可能會考慮使用它們,如果批量應用於每個選擇查詢,我會高度懷疑。 – Tanner 2014-11-21 11:22:06

+0

我有興趣瞭解建議背後的原因。 – NP3 2014-11-21 11:26:58

+0

@坦納,謝謝。我們意識到這樣的事實,它只會在某些情況下有所幫助,並且只是想知道是否存在這樣的功能或者可能的解決方法:) – Satyajit 2014-11-21 11:27:36

回答

4

簡短答案是「否」。 SQL Server中的默認隔離級別爲READ COMMITTED,無法全局或按數據庫將其更改爲UNCOMMITTED。這也是一件非常好的事情。

WITH (NOLOCK)從數據庫中獲取準確的結果是一個麻煩,在不好的情況下,甚至可能會導致由於數據移動而永久運行的查詢超時(NOLOCK無法防範)。有關更多討論,請參閱Is the NOLOCK (Sql Server hint) bad practice?,以及有關替代方案的一些好的提示。

特別是,許多閱讀量大且想要不受阻擋地進行的應用程序可以從快照隔離中受益。與UNCOMMITTED不同,可以通過將快照隔離設置爲READ_COMMITTED_SNAPSHOT選項。請務必仔細閱讀快照隔離的優缺點,或者更好的方法是,請您的DBA執行此操作,因爲任何推薦全局使用WITH (NOLOCK)的DBA都有一些閱讀需要做。查詢提示只能用作最後的手段。

+0

謝謝,你解釋得很好。我將探討更多關於快照隔離的知識,並在本地系統的示例數據庫中使用它,然後決定它是否有助於這種情況 – Satyajit 2014-11-21 12:01:30

相關問題