Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1211404
  • 博文数量: 398
  • 博客积分: 10110
  • 博客等级: 上将
  • 技术积分: 4055
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-23 20:01
个人简介

新博客http://www.cnblogs.com/zhjh256 欢迎访问

文章分类

全部博文(398)

文章存档

2012年(1)

2011年(41)

2010年(16)

2009年(98)

2008年(142)

2007年(100)

我的朋友

分类: 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的类型。

阅读(608) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~