摘要: X$KSMSP的名称含义为:[K]ernal [S]torage [M]emory Management [S]GA Hea[P]其中每一行都代表着shared pool中的一个chunk我们看一下x$ksmsp的结构:SQL> desc x$ksmsp Name Null? Type --------- -------- ---------------- ADDR RAW(4) INDX NUMBER INST_ID NUM... 阅读全文
posted @ 2013-06-08 11:24 taowang2016 阅读(481) 评论(0) 推荐(0) 编辑
摘要: 一. Shared Pool概述在之前的blog对Oracle的内存架构也做了一个概述,参考:Oracle内存架构详解http://blog.csdn.net/tianlesoftware/archive/2010/05/15/5594080.aspx在网上搜到一篇介绍shared pool非常详细的pdf资料。原文链接以找不到,但还是要感谢作者Kamus的辛勤劳动。结合Kamus的pdf和csdn网友的blog,重新整理了一下,链接如下:http://blog.csdn.net/robinson1988/archive/2010/11/26/6037925.aspxIINTRODUCT II 阅读全文
posted @ 2013-06-08 11:15 taowang2016 阅读(581) 评论(0) 推荐(0) 编辑
摘要: 说点简单的,我说说共享池里面的两个latchShared pool latch用来保护共享池内部结构,在分配和释放共享池时需要获得latch,在老化或释放空间时也需要 latch。Oracle9i之前,共享池内存结构是由单独的Shared pool latch保护,从9i开始,如果服务器有4个以上的cpu且shared_pool_size大于250M,Oracle会动态将共享池分为多个子池,最多可以达到7个sub pool,每个子池有自己的free list,lru list及latch。子池的数量可以通过_kghdsidx_count参数来手动调整。查看Shared pool latch个数 阅读全文
posted @ 2013-06-07 14:29 taowang2016 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 使用bbed修复oracle数据文件header block损坏的通用方法http://www.itpub.net/thread-1754481-1-1.html然后做dumpdatafileheaderctlheader1M吧方便吗?ALTERSESSIONSETEVENTS'immediatetracenamecontrolflevel10';ALTERSESSIONSETEVENTS'immediatetracenamefile_hdrslevel10';宁愿用rman、expdp来实施,冷库迁移。http://www.hellodba.com/reade 阅读全文
posted @ 2013-06-06 13:45 taowang2016 阅读(191) 评论(0) 推荐(0) 编辑
摘要: Library cache是Shared pool的一部分,它几乎是Oracle内存结构中最复杂的一部分,主要存放shared curosr(SQL)和PLSQL对象(function,procedure,trigger)的信息,以及这些对象所依赖的table,index,view等对象的信息。Library cache需要解决三个问题:1.快速定位的问题:Library cache中对象众多,Oracle如何管理这些对象,以便服务进程可以迅速找到他们需要的信息。比如某个服务进程需要迅速定位某个SQL是否存在于Library cache中。2.关系依赖的问题:Library cache中的对象 阅读全文
posted @ 2013-06-05 14:15 taowang2016 阅读(289) 评论(0) 推荐(0) 编辑
摘要: 我之前曾经写过一篇Library cache内部机制详解,但是遗留了一些关于11g中mutex的改进的问题,最近因为有些11g的数据库频频发生mutex相关的等待事件,所以我又多这个问题做了一些探讨。关于Mutex,可以参考ORACLE mutex实现机制这篇文章,mutex是从10g开始引入的,在library cache中有大量的使用,它的主要作用有两个:一是用来替换library cache pin,二是作为更轻量级的latch使用。在9i中,Library cache lock有null,share,exclusive三种模式,lock的作用是控制进程间的并发访问。Library ca 阅读全文
posted @ 2013-06-05 14:11 taowang2016 阅读(504) 评论(0) 推荐(0) 编辑
摘要: 我们都知道Latch是Oracle用来在内存中做串行控制的机构,从10g R2开始,Oracle引入了一个新的技术-Mutex。Mutex并不是Oracle的发明,而是系统提供的一个底层调用,Oracle只是利用它实现串行控制的功能,并替换部分Latch。Mutex中有两个变量:分别是Holider identifer和Reference count,Holider identifer记录持有mutex的SID,而Reference count是一个计数,记录了当前正在以share方式访问mutex的数量,每当session以share方式持有mutex时,计数会加1,而释放时会减1。如果Re 阅读全文
posted @ 2013-06-05 14:08 taowang2016 阅读(741) 评论(0) 推荐(0) 编辑
摘要: Shared SQL area : Shared SQL Area 包含了SQL的parse tree 和 execution plan,当有多个用户同时访问同一个应用,oracle使用shared sql area为多次执行的sql来保留内存。当一个sql完成解析,当在shared sql area中存储时,oracle在shared pool中为其分配内存,这片内存区域的大小取决于sql的复杂程度。如果shared pool空间都被用尽,oracle使用lru算法释放已经分配的shared sql area为新的解析过的sql分配shared sql area。如果释放了一块shared 阅读全文
posted @ 2013-05-31 17:32 taowang2016 阅读(804) 评论(0) 推荐(0) 编辑
摘要: SQL语句的处理过程:对照metalink给出的这个示意图,我们可以对SQL的处理过程作如下的描述:1、检查是否有打开的游标,如果有,则直接通过游标link到位于PGA的private SQL AREA( private SQL area),转步骤11(No parse)。否则,执行步骤2。2、检查初始化参数SESSION_CACHED_CURSORS是否被设置,如果被设置,则同样可以通过游标指向到位于PGA的私有SQL AREA,转步骤11(No parse)。否则执行步骤3。3、检查HOLD_CURSOR以及RELEASE_CURSOR的设置。如果RELEASE_CURSOR=no(默认 阅读全文
posted @ 2013-05-31 17:00 taowang2016 阅读(413) 评论(0) 推荐(0) 编辑
摘要: 昨天下午1点,收到公司在客户现场的电话,数据库访问不了了,因为我也不在现场,当时那个操作系统是windows 2003 server,oracle版本是oracle10g win32版本(10.2.0.1.0),觉得是操作系统不稳定的问题(先天不良),也没有多想,告诉他重启一下机器看看,然后就没事了,快到下班的时候,再次出现了这个问题。通过teamViewer等上这个系统,取下了alert_xx.log日志的,简单的see了一下,trace文件在bdump下,顺便把bdump文件夹取下来,一起分析。alert_xx.log文件报错误如下:Mon May 27 07:21:54 2013Thre 阅读全文
posted @ 2013-05-31 11:05 taowang2016 阅读(2134) 评论(0) 推荐(0) 编辑