lock与latch的认识
latch和lock一样都是用来在并发环境下保护共享资源被破坏的一种机制。在作用上两者都是一样的,但是在实现方式上,两者又有区别
1,范围:latch是在一个instance级别,而lock是在database级别,比如RAC;
2, 时间:latch一个对像时,通常较短,lock则时间相对长;
3,模式:latch只有一种execlusive模式,9i以后有read only latch,不能性能似乎并不怎么好,,lock则为了提高并发性,有多种模式,如s(4),x(6),ssx(5),sx(3),ss(2),(注:括号中代表是v$lock的锁编号)等;
4,对像:latch主要是内存中的对像,比如buffer cache lru,library cache.shared pool之类的,lock主要是磁盘上的对像,如table,row;
5,获取方式:当多个session请求一个对像的latch时,一个session得到这个对像的latch以后,其他的会话还是会试图去请求latch这个过程称之为spin,当会话请求的次数达到_spin_count定义的次数以后,会话就进入sleep状态。lock则使用排队机制来请求锁。当一个session请求一个对像上的lock时,检查该对像上的锁,根据锁兼容矩阵获得相应模式的锁,进入对像的锁队列。
6,持有时间:当一个会话对一个对像的的操作完成时,会立即释放latch;lock会在请求该lock的事务在commit或rollback时才会释放;
7,实现层次,latch是由oracle的gernic layer实现,而lock则是由transcation management layer实现。
阅读(3038) | 评论(1) | 转发(0) |