23:#是
错误的锁
升级的行锁升级页面锁中锁升级到表锁,
错误
事实上,在SQL Server 2005和以前的版本中,页锁将直接升级到表锁。
在SQL Server 2005或SQL Server 2008中,您可以通过跟踪以下跟踪标记来更改锁升级的行为:
标志1211 -完全
禁止锁升级,但锁使用的
内存将被限制为动态分配内存的60%。超过此值时,由于内存溢出错误,更多的锁将失败。
锁升级是禁止1224 -,但当内存超过40%,它会自动打开锁升级。
如果标记1211和1224跟踪标志同时
设置,只有标志1211将生效。
在SQL Server 2008中,还可以将表中的锁
操作设置为一个单元。它可以通过改变表废话集(lock_escalation = xxx)。在这个
命令中,XXX表示下列项目之一。
表:直接从行锁升级到表锁。
自动:如果有一个表分区,它将升级为分区锁,但不会进一步升级。
禁用:禁用锁升级,这并不意味着禁用表锁。就像BOL(书网上录入),我们需要表锁在
执行表扫描在序列化隔离级别的
条件。
在2008年1月,我写了一个包含分区锁示例的博客。请参见:SQL Server 2008:分区级锁升级细节和示例。
也许你会奇怪为什么汽车不在lock_escalation=XXX设置
默认值,因为现在在早期的测试中有些人
发现这个
选项更容易造成死锁。就像两个跟踪标签对上述锁,该选项被设置为自动也谨慎。