2013-11-22 18 views
1

我有兩個進程同時工作:一個是生成一個大表,另一個是從表中順序讀取數據。我注意到第二個進程必須等待第一個進程開始,即讀操作塊。SQL服務器:如何從仍在進行的表中讀取數據

我的問題是,是否有任何方法允許第二個進程從表中讀取數據,即使它正在工作。謝謝!

回答

2

請不要建議使用(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沒有太大的影響。對版本存儲增長進行某種類型的監控。

http://www.brentozar.com/archive/2013/01/implementing-snapshot-or-read-committed-snapshot-isolation-in-sql-server-a-guide/

像在事務級別,第一個測試這種變化在較低的環境中的任何意見。全面瞭解六個隔離級別以及它們如何影響您的數據庫應用程序&。

相關問題