Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2796797
  • 博文数量: 389
  • 博客积分: 4177
  • 博客等级: 上校
  • 技术积分: 4773
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-16 23:29
文章分类

全部博文(389)

分类: Oracle

2011-03-27 19:39:01

                                                Enqueue简述

 

Enqueue也被称为LOCK,用来保护对共享资源访问的一种数据结构.

 

ORACLE,每种对像都称为resource.TABLE,ROWS,.每个resource都由一个称为resource identifier来唯一的标识. resource identifier的格式为<(resource type),id1,id2>, resource type由两到三个字符组成的资源代码,TX,详见(oracle reference),ID1,ID2由每种资源自定义.这样就每种资源都有一个resource identifier.

 

ORACLE,根据HASH值不同,每个resource都链接到一个LINK LIST.多条LIST组成RESOURCR ARRAY,每个LINK LIST的长度由ENQUEUE_RESOURCE参数来决定,总的LIST数量由_ENQUEUE_HASE参数来决定.ENQUEUE CHAIN LATCH用来保护对一个LINK LIST的访问,_ENQUEUE_HASH_CHAIN_LATCHES来决定ENQUEUE CHAIN LATCH的多少.

 

当一个SESSION试图以LOCK MODE访问一个RESOURCE,先进行HASHENQUEUE HASH TABLE比较,看是命中在哪个HASE BUCKET,然后申请ENQUEUE HASH CHAIN LATCH,再进行查找,如果RESOURCE不在LIST,则把RESOURCE放到这个LINK LIST,同时在更新RESOURCEOWNER队列,

如果RESOURCE已在LIST,则检查OWNERLOCK MODE是否与请求的LOCK MODE兼容,如果不兼则放到WAITER队列中,调用SYSNC_OP,使自己睡眠,OWNER准备RELEASE LOCK,检查WAITER是否有SESSION,如果用则调用SYNC_OP来唤醒WAITSESSION.在有些平台上使用_USE_VECTOR_POST可以在一个SYCN_OP的操作中唤醒多个WAITER.

 

可以使用 alter session set events ‘immediate tracename forerver leven N’ ENQUEUE进行DUMP.1,ENQUEUE HASH TABLE,2,HASH TABLE+RESORUCE,3,HASH TABLE+RESORUCE+LOCK

阅读(3921) | 评论(0) | 转发(0) |
0

上一篇:ORACLE之深入

下一篇:Data Guard的几种模式

给主人留下些什么吧!~~