6.2.7 锁升级

来源:百度文库 编辑:神马文学网 时间:2024/05/01 01:53:27

锁升级

出现锁升级(lock escalation)时,系统会降低锁的粒度。举例来说,数据库系统可以把一个表的100个行级锁变成一个表级锁。现在你用的是“能锁住全部的一个锁”,一般而言,这还会锁住以前没有锁定的大量数据。如果数据库认为锁是一种稀有资源,而且想避免锁的开销,这些数据库中就会频繁使用锁升级。

注意    Oracle不会升级锁,从来不会。

Oracle从来不会升级锁,但是它会执行锁转换(lock conversion)或锁提升(lock promotion),这些词通常会与锁升级混淆。

注意    “锁转换”和“锁提升”是同义词。Oracle一般称这个过程为“锁转换”。

Oracle会尽可能地在最低级别锁定(也就是说,限制最少的锁),如果必要,会把这个锁转换为一个更受限的级别。例如,如果用FOR UPDATE子句从表中选择一行,就会创建两个锁。一个锁放在所选的行上(这是一个排他锁;任何人都不能以独占模式锁定这一行)。另一个锁是ROW SHARE TABLE锁,放在表本身上。这个锁能防止其他会话在表上放置一个排他锁,举例来说,这样能相应地防止这些会话改变表的结构。另一个会话可以修改这个表中的任何其他行,而不会有冲突。假设表中有一个锁定的行,这样就可以成功执行尽可能多的命令。

锁升级不是一个数据库“特性”。这不是我们想要的性质。如果数据库支持锁升级,就说明这个数据库的锁定机制中存在某些内部开销,而且管理数百个锁需要做大量的工作。在Oracle中,1个锁的开销与1 000 000个锁是一样的,都没有开销。