Oracle中的锁

参考:Data Concurrency and Consistency

1 Row Share Table Locks (RS)

select .. for update会在行上加RS锁,表示当前事务占有表中的一些记录,级别略高于一致读。

2 Row Exclusive Table Locks (RX)

update,insert,delete等DML语句会在行上加RX锁,标志有write事件发生。

3 Share Table Locks (S)

锁定整个表,持有这种锁的事务会阻塞RX。比如说创建索引的时候会不允许写。但是允许其他事务同时持有S锁。

4 Share Row Exclusive Table Locks (SRX)

锁定整个表,同时可能会对表做更新。首先是一种S锁,阻止其他事务的写。同时又是一种RX锁,阻止其他事务同时持有S锁。

如果外键列没有加索引,那么在对主表update或者delete,检查外键完整性时会对整个从表加SRX锁(因为没有索引,那么只有加锁慢慢找咯),标志不允许写表,同时不允许其他需要加S锁的操作,例如创建索引。另外SRX锁的生命周期不同于外层的事务周期,执行完立即释放。如果有索引,只对从表加RS锁。

参考:Oracle Data Integrity 

5 Exclusive Table Locks (X)

锁定整张表的所有资源。不允许同时存在其他锁。drop table,alter table这种需要对表的结构做出改变的DDL语句持有这种锁。


另外oracle的事务隔离界别默认是read commited。也就是在当前事务开始后,会读到其他事务提交的记录。这跟SCN和回滚段实现的一致读是不同的,一致读是statement级别,事务级别的一致性有oracle的serializable隔离级别保证。


另外在执行计划中,db block gets指对CURRENT模式块的请求次数,也就是update,delete操作的块。consistent get是以一致性读模式读取的请求数(有可能块在undo空间中),也就是select对块的请求次数。physical reads指得是从disk而不是buffer中读取的块数。所以buffer hint = ( db block gets + consistent gets - physical)/( db block gets + consistent gets)。recursive calls指oracle为了完成这次查询,对内部表的操作次数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值