SQL Server误区:有关锁升级的误区

误区 #23: 锁升级的过程是由行锁升级到页锁,再由页锁升级到表锁

错误

实际不是,在SQL Server 2005和之前的版本,锁升级会直接升到表锁。

在SQL Server 2005或SQL Server 2008,你可以通过如下跟踪标志改变锁升级的行为:

标志1211-完全禁止锁升级,但锁使用的内存会被限制在动态分配内存的60%,当超过这个值时,更多的锁将会伴随着内存溢出错误而失败。

标志1224-禁止锁升级,但内存使用超过40%时,会自动开启锁升级

如果标志1211和1224跟踪标志同时被设置了,只有标志1211会生效。更详细的内容请看Books Online。

在SQL Server 2008中,还可以以表为单位进行锁行为的设置,可以通过ALTER TABLE blah SET (LOCK_ESCALATION = XXX),在这个命令中XXX所代表的是下面几项中的一项:

TABLE: 直接从行锁升级到表锁。

AUTO:如果存在表分区,则升级为分区锁,但不会进一步升级。

DISABLE:禁用锁升级,这并不意味着禁用表锁,就像BOL(Books Online entry)中所说,在序列化隔离等级的条件下进行表扫描等操作时还需要表锁。

在2008年1月的时候,我写了一篇包含分区锁例子的博文,请看:SQL Server 2008: Partition-level lock escalation details and examples。

或许你会想为什么LOCK_ESCALATION = XXX设置中AUTO不是默认值,这时因为早期测试中某些人发现这个选项更容易引起死锁。就像对于上述两个有关锁的跟踪标记一样,对于这个选项设置为AUTO也同样需要谨慎。

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/SQLServer/

时间: 2024-08-30 06:09:59

SQL Server误区:有关锁升级的误区的相关文章

SQL Server误区30日谈 第23天 有关锁升级的误区_MsSql

误区 #23: 锁升级的过程是由行锁升级到页锁,再由页锁升级到表锁错误    实际不是,在SQL Server 2005和之前的版本,页锁会直接升级到表锁.    在SQL Server 2005或SQL Server 2008,你可以通过如下跟踪标志改变锁升级的行为: 标志1211-完全禁止锁升级,但锁使用的内存会被限制在动态分配内存的60%,当超过这个值时,更多的锁将会伴随着内存溢出错误而失败. 标志1224-禁止锁升级,但内存使用超过40%时,会自动开启锁升级     如果标志1211和1

SQL Server误区30日谈 第23天 有关锁升级的误区

误区 #23: 锁升级的过程是由行锁升级到页锁,再由页锁升级到表锁 错误     实际不是,在SQL Server 2005和之前的版本,页锁会直接升级到表锁.     在SQL Server 2005或SQL Server 2008,你可以通过如下跟踪标志改变锁升级的行为: 标志1211-完全禁止锁升级,但锁使用的内存会被限制在动态分配内存的60%,当超过这个值时,更多的锁将会伴随着内存溢出错误而失败. 标志1224-禁止锁升级,但内存使用超过40%时,会自动开启锁升级     如果标志121

SQL Server AlwaysOn中的几个误区

原文:SQL Server AlwaysOn中的几个误区     AlwaysOn自SQL Server2012之后已经发布很久了,最近我在给一些客户做咨询的时候经常被问起是不是应该使用AlwaysOn,从客户的视角来看仿佛AlwaysOn是一个包治百病的良药,但实际上没有包治百病的良药.因此在此我谈一谈AlwaysOn中的常见误区.   1.AlwaysOn可以实现负载均衡. 答案是否定的,AlwaysOn在特定条件下(需要修改前端应用程序)可以负担只读负载,但负载均衡是无法做到的.在SQL

MS SQL Server数据库事务锁机制分析

server|数据|数据库 锁是网络数据库中的一个非常重要的概念,它主要用于多用户环境下保证数据库完整性和一致性.各种大型数据库所采用的锁的基本理论是一致的,但在具体实现上各有差别.目前,大多数数据库管理系统都或多或少具有自我调节.自我管理的功能,因此很多用户实际上不清楚锁的理论和所用数据库中锁的具体实现. Microsoft SQL Server(以下简称SQL Server)作为一种中小型数据库管理系统,已经得到了广泛的应用,该系统更强调由系统来管理锁.在用户有SQL请求时,系统分析请求,自

SQL Server中的锁的简单学习

原文:SQL Server中的锁的简单学习 简介     在SQL Server中,每一个查询都会找到最短路径实现自己的目标.如果数据库只接受一个连接一次只执行一个查询.那么查询当然是要多快好省的完成工作.但对于大多数数据库来说是需要同时处理多个查询的.这些查询并不会像绅士那样排队等待执行,而是会找最短的路径执行.因此,就像十字路口需要一个红绿灯那样,SQL Server也需要一个红绿灯来告诉查询:什么时候走,什么时候不可以走.这个红绿灯就是锁.     图1.查询可不会像绅士们那样按照次序进行

Microsoft SQL Server 7.0数据库升级转换问题

数据库升级转换所需时间? 影响数据库升级转换所需时间的因素很多, 除了硬件的因素外,由于需要重新创建每个SQL Server 6.X的对象,数据库复杂与否也会有影响,一般来说大致的速度如下 数据库大小 估计所需时间 400 MB 少于20分钟 1 GB 少于1小时 5 GB 少于4小时 10 GB 少于12小时 100 GB 少于24小时 升级转换数据库的方法? 在同一台计算机上升级转换数据库:管线(pipeline):所需空间约为原有数据库的1.5 倍,升级转换完成后,如果原来的数据库已不需,

为什么我们需要在SQL Server里更新锁_MsSql

每次讲解SQL Server里的锁和阻塞(Locking & Blocking)都会碰到的问题:在SQL Server里,为什么我们需要更新锁?在我们讲解具体需要的原因前,首先我想给你介绍下当更新锁(Update(U)Lock)获得时,根据它的兼容性锁本身是如何应对的. 一般来说,当执行UPDATE语句时,SQL Server会用到更新锁(Update Lock).如果你查看对应的执行计划,你会看到它包含3个部分: 读取数据 计算新值 写入数据 在查询计划的第1部分,SQL Server初始读取

为什么我们需要在SQL Server里更新锁

每次讲解SQL Server里的锁和阻塞(Locking & Blocking)都会碰到的问题:在SQL Server里,为什么我们需要更新锁?在我们讲解具体需要的原因前,首先我想给你介绍下当更新锁(Update(U)Lock)获得时,根据它的兼容性锁本身是如何应对的. 一般来说,当执行UPDATE语句时,SQL Server会用到更新锁(Update Lock).如果你查看对应的执行计划,你会看到它包含3个部分: 读取数据 计算新值 写入数据 在查询计划的第1部分,SQL Server初始读取

擦亮自己的眼睛去看SQL Server之谈谈锁机制

在谈谈SQL Server的锁机制之前,来思考以下这个场景:当你在酷暑的时候骑着自己的小车往目的地行走时,路上连续遇到几个时间很长的红灯,是不是很郁闷?有时候 你可能实在受不了闯了个红灯,其实在大部分情况下问题不大,如果通行的汽车很多那就不好说了.因为不遵守规则的人太多,都为了达到目的去走捷径,不愿意等 待.这样才有了交警.交警的作用就是维护这些红绿灯的规则.这些红绿灯就像锁一样,锁住或延长你去目的地的时间.但是如果没有交警大家又不自由遵守红绿灯 规则会导致什么呢?大家想想都知道. 这个系列的一