我有两个进程同时工作:一个是生成一个大表,另一个是从顺序生成的表中读取数据。我注意到第二个进程必须等待第一个进程完成才开始,即读操作块。
我的问题是,是否有任何方法允许第二个进程从表中读取数据,即使它处于工作状态。谢谢!
答案 0 :(得分: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)有三个副作用,脏读,不可重复读和幻像读。
如何使用Read Committed Snapshot Isolation(* RCSI )? *
它是Read Committed的一个版本,其中读取器未被阻止,因为版本存储(tempdb)保留了记录的副本。它没有SNAPSHOT ISOLATION那么大的影响力。对版本存储增长实施某种类型的监控。
与事务级别的任何建议一样,首先在较低的环境中测试此更改。充分了解六种隔离级别以及它们如何影响您的数据库和应用