|
|
1
5
这是您可能需要的: 将已提交的快照设置为打开; alterdatabaseadventureworks 设置允许\u快照\u隔离打开; `
在您的查询中。根据BOL:
如果将READ_COMMITTED_SNAPSHOT设置为OFF(默认设置),则数据库引擎将使用共享锁来防止其他事务在当前事务运行读取操作时修改行。共享锁还阻止语句读取由其他事务修改的行,直到其他事务完成。共享锁类型决定何时释放它。在处理下一行之前,将释放行锁。读取下一页时释放页锁,语句完成时释放表锁。 如果READ_COMMITTED_SNAPSHOT设置为ON,则数据库引擎将使用行版本控制为每个语句提供一个在语句开始时存在的数据事务一致性快照。锁不用于保护数据不受其他事务更新的影响。 希望这有帮助。 拉吉 |
|
|
2
2
只要没有更新数据,就没有坏处,但如果有很多好处,我会感到惊讶。我认为值得一试。最坏的情况是,如果你在一个批处理插入中间,你会得到不完整和/或不一致的数据,但是你可以决定它是否无效任何有用的东西。 |
|
|
3
2
你考虑过创建一个 DATABASE SNAPSHOT 你的数据仓库,并运行你的报告吗? |
|
|
4
1
对SQL的可读性将大大降低。您将不可避免地错过一些NOLOCK提示,因为使用NOLOCK策略的SQL SELECT命令必须将其放在所有地方。 You can get the same thing by setting the isolation level SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 最后,您的性能提高了10%(对不起,我太懒了,请查看文章,但它就在那里) 我认为10%的收益不值得降低可读性。 |
|
|
5
1
|
|
|
6
0
NOLOCK执行脏读(indecentreaduncommitted执行与NOLOCK相同的操作)。如果在读取时正在更新数据库,则有可能返回不一致的数据。唯一的选择是接受锁定并因此进行阻塞,或者从SQL 2005以后提供的两个新隔离级别中选择一个 discussed here . |