2009-02-02 47 views
1

我公司雇用的DBA解决死锁问题刚刚告诉我,如果我们将事务级别设置为READ COMMITTED从READ UNCOMMITTED,那么我们的OLTP数据库锁定问题将得到改善。Sql 2005锁定OLTP - 已提交还是未提交?

这不仅仅是100%错误吗? READ COMMITTED会导致更多锁定,对吗?


更多详细信息:

我们的数据很 “孤立” 和特定的用户。 99.9999999%的所有用户交互与您自己的数据一起工作,如果发生这些情况,我们的肮脏阅读方案几乎不能影响用户正在尝试做什么。


感谢所有的答案,dba问题最终变得毫无用处,我们通过添加单个索引来解决锁定问题。


我很遗憾,我没有指定更新语句发生锁定问题而不是常规选择。从我的角度来看,两种不同的查询类型在处理锁定问题时有不同的解决方案。

回答

5

这听起来像是一个轻率的决定,但没有你的环境的所有细节都很难说。

您应该建议您的DBA考虑使用SQL Server的高级隔离功能,即使用行版本控制技术。这被引入到SQL Server 2005中,专门解决遇到高锁定问题的OLTP数据库问题。

以下白皮书包含相当复杂的主题,但它是所有异常DBA的必读内容。它包括例如如何使用每个附加隔离级别的,在不同类型的环境即OLTP,卸载了报告环境等的

http://msdn.microsoft.com/en-us/library/ms345124.aspx

总之这将是既愚蠢和皮疹修改事务隔离对于所有的T-SQL查询,无需先了解如何在您的环境中发生过度锁定。

我希望这可以帮助,但请让我知道,如果您需要进一步澄清。

干杯!

+0

“傻瓜和皮疹来修改交易隔离..” 你说的比我更好。 (+1) – RussellH 2009-02-02 19:08:33

1

难道这不取决于你的问题是什么:例如,如果你的问题是死锁,锁定级别的增加可能不会导致早期获取锁,从而降低致命拥抱的可能性?

1

它的数据是孤立的,你仍然得到死锁,那么你可能只需要ROWLOCK提示添加到正在导致问题,这样的锁行级拍摄,而不是查询页面级别(这是默认值)。

如果由于SELECT语句而锁定数据,则READ UNCOMMITTED将减少锁的数量。如果由于INSERT,UPDATE和DELETE语句而锁定数据,那么将隔离级别更改为READ UNCOMMITTED将不会为您执行任何操作。 READ UNCOMMITTED与向查询添加WITH(NOLOCK)具有相同的效果。

+0

+1用于根据正在执行的活动类型来限定分辨率的不同选项。 – 2009-06-14 16:06:59