2010-01-28 81 views
4

使用SET TRANSACTION ISOLATION LEVEL REPEATABLE READ時,風險或性能下降情況如何?SQL Server中的事務隔離級別可重複讀取

我們有一些從BizTalk服務調用的SP。我們有時會陷入僵局。如果我們改變隔離級別,哪些風險和可能的性能下降?

+0

「死鎖」是什麼意思?問題是,SQL Server會返回一個錯誤消息,說明死鎖已經解決,或者您的事務剛剛掛起?後者不是一個僵局,而是一場爭奪戰。 – Quassnoi 2010-01-28 14:33:02

回答

5

可重複讀取將鎖定已獲取 的所有行。在使用 光標獲取大量數據的情況下,這可能會導致 與其他用戶的爭用,因爲它們不能通過 獲取鎖以更新光標爲 的遊標所讀取的行,直到遊標關閉。

性能下降的風險是交易可能會遇到更多的超時和/或死鎖。該風險 與兩個事務需要 同時讀取/更新相同行的概率成正比。 可能影響您的應用程序的另一個因素是鎖的大小。如果在頁面級鎖取 ,那麼如果事務需要訪問的不同數據的數據位於同一頁 - 不一定是同一行,則可能發生爭用。

在另一方面,當你使用較低的隔離級別,例如 遊標穩定性,你離開打開行,你有你的交易過程中先前所獲取的可 通過其他交易你的工作單位之前更新的可能性 已完成 。

1

讀取完成後,可重複讀取操作不會解除共享鎖定。

這意味着如果您在RR事務中執行了SELECT,則併發事務將無法更新您的SELECT鎖定的行。

2

試試吧。我們無法告訴您單個數據點可能遇到的潛在風險或性能問題(事務隔離級別)。我們對數據,數據量,TPS,數據依賴關係沒有其他了解。無論何時表現是一個問題,嘗試一下,衡量一下。沒有其他答案。

2

要添加到已經說過的話:你不能完全消除死鎖。你所能做的就是儘量減少它們發生的可能性。