我有兩個進程同時工作:一個是生成一個大表,另一個是從表中順序讀取數據。我注意到第二個進程必須等待第一個進程開始,即讀操作塊。SQL服務器:如何從仍在進行的表中讀取數據
我的問題是,是否有任何方法允許第二個進程從表中讀取數據,即使它正在工作。謝謝!
我有兩個進程同時工作:一個是生成一個大表,另一個是從表中順序讀取數據。我注意到第二個進程必須等待第一個進程開始,即讀操作塊。SQL服務器:如何從仍在進行的表中讀取數據
我的問題是,是否有任何方法允許第二個進程從表中讀取數據,即使它正在工作。謝謝!
請不要建議使用(nolock)非靜態數據。您可以跳過記錄或兩次讀取記錄。如果是財務數據,這不太好。
http://www.jasonstrate.com/2012/06/the-side-effect-of-nolock/
你真的應該看看我的演講「如何隔離是您的會議」 - http://craftydba.com/?page_id=880。
您在上面描述的是其中一個隔離級別,讀取承諾 - 作家塊讀取器。處理交易(會話)時,這只是一個事實。
還有更多的隔離級別。
http://technet.microsoft.com/en-us/library/ms189122(v=sql.105).aspx
的(NOLOCK)或(READUNCOMMITTED)具有三個副作用,髒讀,不可重複讀取和幻像讀取。
如何使用讀取提交的快照隔離(* RCSI)? *
這是Read Committed的一個版本,讀者在版本存儲(tempdb)保留記錄副本時不會被阻止。它與SNAPSHOT ISOLATION沒有太大的影響。對版本存儲增長進行某種類型的監控。
像在事務級別,第一個測試這種變化在較低的環境中的任何意見。全面瞭解六個隔離級別以及它們如何影響您的數據庫應用程序&。