锁升级是SQL Server提高效率的一种内在机制,主要通过将众多细粒度锁转换为较少的粗粒度的锁。 例如,在一个给定的表里面有许多的行级锁,使用很多的锁来占据更多的内存,而不是通过一个更大的父对象,从而使SQL Server 的锁更有意义。有时,锁升级机制可能导致数据库阻塞,这时你可能需要通过一些SQL Server 跟踪标志来找出错误的问题所在。 有两种情况会导致SQL Server 锁升级。
第一种情况是在一个对象上有大量的锁。比如:单个Transact-SQL语句在单表上获得超过5000 个的锁,将触发锁升级。 第二种情况是,当锁的数量超过预先设定的内存阈值,即所谓的内存压力状……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
锁升级是SQL Server提高效率的一种内在机制,主要通过将众多细粒度锁转换为较少的粗粒度的锁。
例如,在一个给定的表里面有许多的行级锁,使用很多的锁来占据更多的内存,而不是通过一个更大的父对象,从而使SQL Server 的锁更有意义。有时,锁升级机制可能导致数据库阻塞,这时你可能需要通过一些SQL Server 跟踪标志来找出错误的问题所在。
有两种情况会导致SQL Server 锁升级。第一种情况是在一个对象上有大量的锁。比如:单个Transact-SQL语句在单表上获得超过5000 个的锁,将触发锁升级。
第二种情况是,当锁的数量超过预先设定的内存阈值,即所谓的内存压力状态。典型的内存压力阀值就是锁定对象使用的内存超过来一定的比例,通常是40%,但是这个值可以根据SQL Server 数据库引擎所分配的内存来调整。
在常规条件下,默认的锁升级就可以正常工作。针对表的细粒度锁的修改方式有:锁提示和LOCK_ESCALATION选项。但是在某些情况下您可能需要通过手动改变整个SQL Server锁升级。下面 两个SQL Server跟踪标志可用于帮助更改锁升级工作方式。
SQL Server 1224 跟踪标志 :根据已有的资源和锁的数量禁用锁升级。最常见的例子是在表上面有很多的行级锁或者页锁,升级为一个表锁。注意:如果使用1224 标志,当阀值等于 40%时可能还会碰到锁升级。
SQL Server 1221跟踪标志除了相同的锁的数量和内存压力时禁用锁升级,其他的和标志1224一样。如果同时使用标志1224 和标志1211,1211将覆盖1224。一般只有在防止内存升级的时候使用标志 1221 。即在使用内存测试的时候使用。
那么,我们应该在什么情况下使用这些标志呢?
当SQL Server锁升级引起阻塞。当不同的用户在同时查询相同的语句导致的许多锁升级,这些标记就可以帮忙解决问题。举例来说,如果在一个给定的查询里有大量行锁从而提升到一个表锁,该表锁可能对另一个查询形成了阻塞,特别是如果第一个查询运行很长一段时间。如果这种阻塞影响到整个数据库,那真正的问题可能是应用程序的底层设计问题。禁用锁升级可能允许应用程序正常运行,直到您能拿出一个永久性的修复或更优雅的临时解决方案。
以可控的方式运行的SQL Server的特定实例。比如在一个单独的实例或者在独立的计算机上运行的关于内存消耗的具体应用的控制测试。
错误检查。Adam Machanic曾经在参与一次加载 大量数据的锁升级的时候碰到一个SQL Server 2008 的bug(这个bug 已经修复)。如果您在处理大批数据集的时候遇到了锁升级,但又不确定是否锁是SQL Server 本身的bug,这时候跟踪标记 可以为您提供相关的帮助信息。
在任何情况下,我们不应该把跟踪标记当成 解决锁升级问题的根本办法,应该是当成一种临时措施。通过跟踪标记来查找和解决相关锁的问题。
SQL Server 锁升级阀值:
注意:本文中的内存压力阀值是 24%,即使我认为这个是打印错误所导致的(比如在SQL Server 2008 R2 文档中这个值是 40%)。
作者
Serdar Yegulalp从1994年到2001年为Windows杂志写作,覆盖了广泛的技术方面。他现在是《The Windows 2000 Power Users Newsletter》一书的出版者,辛勤钻研他擅长的Windows NT, Windows 2000 and Windows XP领域,并为TechTarget写专栏。
相关推荐
-
SQL Server 2016新变化:内存中OLTP功能大改进
SQL Server 2016的许多功能得到改进,内存中OLTP(in-memory OLTP)也不例外,包括扩展性、性能以及扩展T-SQL用于使用和管理内存优化表的功能方面。
-
优化T-SQL提升SQL Server数据库性能
本文中提供了八种优化T-SQL代码避免SQL Server数据库性能瓶颈的技巧,我们可以据此优化数据库应用。
-
配置SQL Server数据库恢复模式的两种方法
本文我们讨论了配置SQL Server恢复模式的两种方式,用T-SQL或者SQL Server管理工具都可以修改恢复模式的设置。
-
用T-SQL在SQL Server 2012中创建用户自定义角色
SQL Server 2012中引入了两项功能,即创建用户自定义服务器角色和分配服务器级别的权限。本文为初级DBA给出了一个用户自定义服务器角色的示范用例。