新博客http://www.cnblogs.com/zhjh256 欢迎访问
分类: Oracle
2008-01-06 21:38:29
Latch和锁都是穿行化机制,它们防止用户同时作相互冲突的事情。在一个行锁的例子中,当a在将Bob的薪水设置为900过程中时,锁将防止b同时设置Bob的薪水为1000。
在latch的实例中,latch被用来防止冲突访问相同的内存区域。在一个给定的时间,只有一个会话可以拥有latch,其他会话必须等待。防止两个用户试图争夺缓冲缓存中的相同缓冲,或者库缓存/日志缓冲中的相同内存区域。
Latch和锁的主要区别除了一个是行的物理属性,另一个是内存机制外,锁主要在事务延迟期间使用,latch则倾向于公平的争夺/释放,保持相当短的时间。
如果试图争夺一个latch但是失败了,因为其正在被其他用户使用,此时这个会话可以沉睡或者稍后重试,或者放弃—依赖于争夺的latch的类型。
大多数用户调用得到的latch是沉睡—唤醒—重试类型,而后台进程尝试得到的大部分则是尝试—放弃类型。
沉睡—唤醒—重试将起自己作为一种latch的等待,并且在Oracle中记录为事件。存在大量的等待事件意味着数据库经历了冲突,latch冲突的核心原因依赖于latch的类型。