什么是锁升级

经常听到DBA在谈论各种数据库时。都会提到一个词语:锁升级。

那么。什么是锁升级呢?它的作用又是什么呢?在什么情况下会出现锁升级呢?

锁升级,就是将众多细粒度锁转换为较少的粗粒度的锁以削减系统开销的进程。假如行锁是有开销的,那对1行加锁可能没问题,但对1万行加锁。那对系统开销就非常大了,此时。数据库就会将其升级为表锁,以降低开销。

在网上摘抄的一个样例,当事务从表中请求行时,SQL
Server 自己主动获取受影响的行上的锁,并在包括这些行的页和表或者索引上放置更高级别的意向锁

事务控制的锁数量超过了它的极限时。SQL
Server 会试图将表上的意向锁更改为更强的锁(比如,将意向排它 (IX)
锁更改为排它 (X) 锁)。获取更强的锁后,表事务持有的全部页级锁和行级锁都被释放,从而削减锁的开销。

时间: 2024-10-14 11:03:11

什么是锁升级的相关文章

SQL Server 控制锁升级

背景知识: 锁升级的路线图.行--> 页 --> 区(extent)-->区(表分区)--> 表: alter table 控制锁的升级行为: 1.table SQL Server 2008中的默认行为,设为这个值时,在表级别启用了锁升级,不管表是否分区. 2.auto 如果以分区就在分区级别启用锁升级,如果没有分区就在表级别启用锁升级. 3.disable不可以把锁升级到表级别.可是对于用了tablock提示或使用可序列化隔离级别下堆的查询我们还是可以看到表锁的存在. 设置方法:

第19/24周 锁升级(Lock Escalations)

大家好,欢迎回到性能调优培训.上2个星期我们已经讨论了SQLServer里的悲观和乐观锁.今天我想谈下SQL Server里对于锁的一个特殊现象:所谓的锁升级(Lock Escalations).在我们进入那个问题的细节前,我想先谈下SQL Server内部使用的锁层级(Lock Hierarchy). 锁层级(Lock Hierarchy) 2个星期前,当我们开始讨论悲观并发模式(pessimistic concurrency)时,我告诉你SQLServer在记录层会获取共享锁(Shared

禁用sqlserver的锁升级

锁升级 与锁的数量和内存压力有关,达到阀值之后,直接升级到table lock,而不会小升级到page lock 减少锁升级的方式有以下几种: 禁用sqlserver实例的锁升级 禁用特定表的锁升级 加大阀值,减少锁升级的可能(sp_configure 'locks', 10000; RECONFIGURE;) 启用行版本控制 禁用数据库实例的锁升级 在SQL Server 2005 中,可以使用跟踪标志 1211.1224 来禁用整个实例中的锁升级. 标志1211-完全禁止锁升级,但锁使用的内

可串行化隔离级别里的锁升级

在今天的文章里我会讨论下可串行化(SERIALIZABLE)隔离级别里会有的锁升级(Lock Escalations),还有你如何避免.在上个月的7月14日,我已经介绍了SQL Server里锁升级(Lock Escalations)的基本概念还有为什么需要它们.因此请你回到这个文章来理解下这个非常重要的概念. 可串行化(SERIALIZABLE)隔离级别 可串行化(SERIALIZABLE)隔离级别用来阻止所谓的幻影记录(Phantom Records).为了阻止它们,SQL Server使用

锁升级

在今天的文章里,我想谈下SQL Server里锁升级(Lock Escalations).锁升级是SQL Server使用的优化技术,用来控制在SQL Server锁管理里把持锁的数量.我们首先用SQL Server里所谓的锁层级(Lock Hierarchy )开始,因为那是在像SQL Server的关系数据库里,为什么有锁升级概念存在的原因. 锁层级(Lock Hierarchy ) 下图展示了SQL Server使用的锁层级: 从图里可以看到,锁层级开始于数据库层级,向下至行层级.在数据库

Java并发之彻底搞懂偏向锁升级为轻量级锁

网上有许多讲偏向锁,轻量级锁的文章,但对偏向锁如何升级讲的不够明白,有些文章还相互矛盾,经过对jvm源码(biasedLocking.cpp)的仔细分析和追踪,基本升级过程有了一个清晰的过程,现将升级流程阐述如下: 因为偏向锁,锁住对象时,会写入对象头相应的标识,我们先把对象头(官方叫法为:Mark Word)的图示如下(借用了网友的图片): 通过上面的图片,我们可以知道,对象处于偏向锁时,mark word中的偏向锁标记为1,锁标志位为01;下面是分析过jvm源码(biasedLocking.

Synchronized锁性能优化偏向锁轻量级锁升级 多线程中篇(五)

不止一次的提到过,synchronized是Java内置的机制,是JVM层面的,而Lock则是接口,是JDK层面的 尽管最初synchronized的性能效率比较差,但是随着版本的升级,synchronized已经变得原来越强大了 这也是为什么官方建议使用synchronized的原因 毕竟,他是一个关键字啊,这才是亲儿子,Lock,终归差了一点 简单看下,synchronized大致都经过了哪些重要的变革 重量级锁 对于最原始的synchronized关键字,锁被称之为重量级锁 因为底层依赖监

MySQL锁(锁升级)

锁升级(Lock Escalation)是指将当前锁的粒度降低.举个例子:数据库可以把一个表的1000个行锁升级为一个页锁,或者将页锁升级为表锁. 如果在数据库的设计中认为锁是一种稀有资源,而且想避免锁的开销,那数据库中会频繁出现锁升级现象. SQL Server 数据库的设计认为锁是一种稀有的资源,在适合的时候会自动地将行.键或分页锁升级为更粗粒度地表级锁,这种升级保护了系统资源,防止系统使用太多地内存来维护锁,在一定程度上提高了效率. 即使在SQL Server 2005版本后,SQL Se

SQL Server Lock Escalation - 锁升级

Articles Locking in Microsoft SQL Server (Part 12 – Lock Escalation) http://dba.stackexchange.com/questions/12864/what-is-lock-escalation 2008 R2 Lock Escalation (Database Engine) ---Forward from Locking in Microsoft SQL Server (Part 12 – Lock Escala