Chinaunix首页 | 论坛 | 博客
  • 博客访问: 688057
  • 博文数量: 191
  • 博客积分: 10987
  • 博客等级: 上将
  • 技术积分: 1925
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-22 09:52
文章分类

全部博文(191)

文章存档

2014年(10)

2011年(11)

2010年(38)

2009年(132)

分类: Oracle

2011-03-05 17:37:20

Latchlock有许多不同之处。下表列出了latchlock之间的比较结果。

Latch

Lock

目的

只有一个目的:保证对内存结构的排他性访问(从oracle9i开始,cache buffers chain latch可以允许只读共享访问)

两个目的:如果锁模式是兼容的,允许多个进程共享相同的资源;如果锁模型是不兼容的,保证对共享资源的排它性访问。

适用场景

只能应用于sga中的数据结构,保护内存对象。Latch只影响单次操作,而和事务无关。

保护数据库对象,诸如表,数据块和状态对象等。由应用程序驱动,控制对数据库中数据和元数据的访问。

Lock是事务性的。

获取方式

两种模式:willing-to-waitno-wait

六种模式:null, row share, row exclusive, share, share row exclusiveexclusive

范围

信息都保存在内存中,并且只在本实例可见――latch是实例级别的

信息保存在数据库中,并且该数据库的所有实例都可见――lock是数据库级的

复杂度

使用简单机器指令比如:test-and-set, compare-and-swap或其他简单的cpu指令实现。由于cpu指令平台相关,所以latch在不同的平台的具体实现不一样。

轻量级的。

需要上下文切换(context siwtch),使用一系列指令实现。

重量级的。

持续事件

非常短暂(通常是微妙级的)

通常在整个事务中都持有。

排队机制

当一个进程获取latch失败,转入睡眠状态时,他的请求不需要按顺序排队(一个例外情况:latch wait list latch需要排队)。

当一个进程获取lock失败,它的请求会进入一个队列,除非指定nowait

死锁

Latch的实现方式不会产生死锁(不排队)

Lock的排队机制可能导致死锁。死锁发生时会产生相应的跟踪文件。

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