SQL Server 2014 SP1的NOLOCK指令中斷

來源:互聯網
上載者:User

SQL Server 2014 SP1的NOLOCK指令中斷

在針對SQL Server 2014 SP1的Cumulative Update #6更新中,NOLOCK指令中斷。因此,依賴NOLOCK指令的資料庫可能會意外地經曆阻塞或是死結。根據SQL Server Release Services部落格最新更新的一篇文章,具體的情景是這樣的:

在預設的基於鎖的隔離等級或更高的隔離等級下,執行並行的SELECT (…) INTO Table FROM
SourceTable語句,特別當使用NOLOCK提示時。在這種情況下其他試圖訪問SourceTable的查詢將阻塞。

當一個事務持有對象的獨佔鎖定(例如進行中的表更新),另外一個事務正在執行並行的SELECT (…) FROM
SourceTable,並使用NOLOCK提示。在這種情況下,嘗試訪問SourceTable的SELECT查詢將被阻塞。

根據Microsoft發布團隊的成員Pedro Lopes所說,這個錯誤不會影響使用SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED的代碼。

早在推出行級版本(row level versioning),又稱快照隔離之前,NOLOCK 提示就經常需要避免阻塞和死結。然而,使用它會有一些風險。通過設計,運行NOLOCK的查詢可以讀取在事務中改變的資料。這代表著決策可以基於最終復原的事務。同樣,決策也可以基於局部更新,例如使用一個記錄的新版本和另一個相關記錄的舊版本。

由於這些原因,一般不贊成在新的資料庫中使用NOLOCK(和READ UNCOMMITTED)。然而,我們不能簡單地將現有的資料庫轉移到行級版本。雖然它可以在不發生髒讀的情況下解決阻塞問題,但是它還是需要增加tempdb使用的成本。

Brent Ozar Unlimited提供了一款通知服務,當問題解決的時候通知所有DBA。你可以在sqlserverupdates.com報名。

查看英文原文:NOLOCK is Broken in SQL Server 2014 SP1

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.