晶晶实验四 讨论闩篇.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
晶晶实验四 讨论闩篇

晶晶实验四_讨论闩 篇 上一篇 / 下一篇 2008-02-17 19:41:12 / 个人分类:晶晶oracle实验系列 查看( 1811 ) / 评论( 19 ) 因为闩的种类过多,以后分别在各自领域详细介绍.今天先总的介绍闩的概念. 闩不象锁,锁的结构非常复杂,在晶晶实验五中,我们就要讨论锁的结构.闩的实现相对与锁来说就非常简单了,大多数闩没 有等待者,持有者等等这些队列,且大部分闩没有共享,独占等模式.(当然有部分闩例外).闩是内存中的一些位,使用CPU的硬 指令(test and set 或swap)将其值设置为0或非0,表示是否被持有,他的实现代码极其简单,因此,闩的获取和释放都是非常 快的.闩的持有过程也应该非常短暂.比如:有些闩是保护lock和 pin的释放获取过程,当lock 和pin 获取完毕,闩就可以释放 了,真正的操作在lock和 pin的保护下完成.闩不会伴随整个操作. 闩分三种 1,长闩;2,短闩;3,共享闩 长闩:当请求闩而没有立即获得.请求闩的进程会被放进一个等待者队列.当闩的持有者释放时,会通知队列中第一个等待者 . 短闩:当请求闩而没有立即获得,多CPU下会先自旋,如果自旋仍然得不到闩会进入睡眠状态,N厘秒后醒来再次自旋,如果得 不到,再次睡眠...依次循环直到获得闩.睡眠的时间是1,4,4,8,8,16,16(单位厘秒)...每两次倍增.每睡眠一次都对应一次 latch free等待事件. 自旋的伪码大概如下: 定义全局变量 latch=0 读取(资源ID) { int bz=1: while(bz==1) { Swap(latch,bz); } 访问资源; latch=0; } 在X86系统中,Swap函数就是XCHG指令.他是一条CPU的硬指令,他的执行不会被打断. 因为自旋的过程是一个忙测试循环,在此期间进程会一直占有CPU的时间片,通常还会使用指令禁止进程切换,单CPU下在自 旋期间,持有闩的进程不可能得到执行,也不可能释放他所持有的闩,所以在单CPU下自旋是没有意义的. 共享闩: 具文档中介绍,共享闩只有一个,就是Cache Buffer Chain闩(简称CBC闩)。 编写了个小脚本,反复读取某个表的同一个块.看此共享闩是否有争用: create or replace procedure my_cursor is cursor aa is select id from jj_2 where rowid=AAAMvgAAHAAAAGwAAA; x number(5); begin for i in 1..300000 loop open aa; fetch aa into x; close aa; end loop; end; / 在执行前先观察CBC闩的情况: SQL select sid,event,time_waited,time_waited_micro,total_timeouts,total_waits from v$session_event where (sid=190 or sid=203) and event=latch: cache buffers chains; SID EVENT TIME_WAITED TIME_WAITED_MICRO TOTAL_TIMEOUTS TOTAL_WAITS ---------- ------------------------------ ----------- ----------------- -------------- ----------- 190 latch: cache buffers chains 0 39 0 4 203 latch: cache buffers chains 0 391 0 9 在一个会话中执行上面的脚本,查看V$session_event视图,可以发现没有新的相关CBC闩的等待,分别在两个会话中执行上 面的脚本,执行一次后,查看V$sess

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档