|
ZALBB朋友性子比较急
不想等我把故事将完,今天有些事,我就先直接回答你的问题,等有时间再把故事讲完.
首先,需要说明,ORACLE的数据锁在两个级别上,表级与行级,这就是所谓的"多粒度",为什么要多粒度,就是因为单粒度都有各自的缺陷,光是表级,封锁粒度太大,并发性不好(如故事中TOM的方案);光是行级,对有些情况开销太大,所以要有多粒度.
而最经典的锁类型就是两种,S与X,但是为了效率,某个事务锁住某一记录,ORACLE也让它在行的上级(表级)做一下标识,这就是所谓的"意向锁",很自然就有了RS(表示有个别行别加S锁)与RX(表示有个别行别加X锁),而这两种意向锁(RS与RX)与两种实体锁(S与X)理论上有4种组合,实际只有1种有实际意义,即SRX.
这样在表级就有了5种锁,S,X,RS,RX,SRX,表级锁作用主要有2个:保护表结构与保护数据;
在行级,ORACLE实际上只有X锁(2个SELECT FOR UPDATE不能同时针对同一行),行级锁的作用就是保护数据.
另外,我的<ORACLE多粒度封锁机制研究>已经有第2个版本,比第一版增加了将近1倍的内容,据tigerfish说在他们准备在新出的书中选用,我想现在可能不便公开. |
|