绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
10G后Latch的工作方式(一)
2020-06-26 00:23:06
Latch是10GR2后改变了许多,但现在网上针对Latch工作原理的文档,大多数还是针对9i时的Latch。你只要稍微留意一下10GR2联机文档中V$LATCH视图,其中有差不多一半的列都deprecated,包括WAITERS_WOKEN、WAITS_HOLDING_LATCH、SLEEP[1 | 2 | 3]、SLEEP4、SLEEP[5 | 6 | 7 | 8 | 9 | 10 | 11]。这说明Latch内部的工作原理已经和9i有了很大的变化。那么,10G后的Latch是什么样子呢。 让我们先来温习一下9i的Latch获得流程。 1、请求某Latch 2、如果不能获得,开始Spin 3、spin一定次数后(通常是2000次),如还不能获得,进入睡眠,这是SLEEP1。 4、睡眠醒来再次请求Latch,如还不行,再次睡眠,这是SLEEP2。 等等。 10G后Latch是什么样的流程呢?下面我们来看一下。 首先,我们先说明一下如何长时间的持有某个Latch。因为Latch的持有到释放很短,使用普通的方式,几乎不可能让一个Latch长时间的持有。这样我们很难详细观察Latch的持有、争用。如果能长时间持有指定Latch,就可以很方便的观察Latch的争用。 有什么方式可以随心所欲的持有Latch吗? Certainly ,但我们需要使用一个强大的工具:DTRACE。这个玩意只能在Solaris平台使用。Linux也有类似的,但要重新编译内核,调整DEBUG级别,这样会对后面装Oracle,特别是装RAC带来影响。相比之下,还是Solaris下的Dtrace更好用。Dtrace的使用非常简单,如果有兴趣,装个Solaris,跟着我的总结做几次,就能掌握它的使用。可以说,Dtrace是居家旅行、杀人灭口、研究Oracle必备良药,药效胜过含笑半步跌。 好,闲言少叙,开始。 首先,在武林奇书,有Oracle内功心法之称的DSI中,第405册138页,Oracle介绍了Latch的调用和释放函数: 我们主要感兴趣的是KslgetlKslgetsltkslfreOraDebug工具中有一个功能,可以在Sqlplus中直接调用Oracle的函数。猜想Oracle留此功能的目的是方便调式代码,Oracle的本来目的都无所谓,对于我们来说,这等于给我们有志于研究Oracle的人大开方便之门,如果我们能直接调用KslgetlKslgetslt获得某一个Latch,这样就可以很方便的观察Latch的获得、争用、等待。哪么,这几个函数的调用规则是怎样的呢?DSI中并无明确提示,该Dtrace出场了,我们在Solaris中,用vi类工具创建如下无格式文本:
分享好友

分享这个小栈给你的朋友们,一起进步吧。

调试数据库 ---- 源码研究方法论
创建时间:2020-06-16 17:28:11
能让你坚持下去的源码学习方法 ---- 调试数据库。Oracle的各种DUMP、Trace和Event,增加了研究这个数据库的“乐趣”,使用Oracle成为一个可研究的数据库。开源数据库当然也可以通过钻研源码的方式去研究,但这样的学习周期太长。本课程教你用调试技术不断为MySQL/PostgreSQL扩展功能,在学习源码的同时,不断开发自己的、类似Oracle DUMP、Trace、Event的小工具,这就是我所说的“正向反馈”。用正向反馈,激励自己坚持下去,终成功。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • vage
    栈主

小栈成员

查看更多
  • 叶子,你好
  • 小雨滴
  • 潘佳伟
  • 东风快递
戳我,来吐槽~