1. 首页
  2. IT资讯

Oracle Shared Pool之Library Cache

  Library Cache主要用于存储系统中的可执行对象(例如:SQL语句,PL/SQL块及相关对象等)及其相关信息(解析信息,可执行代码,相关对象及信息,相关控制结构等),以便实现这些可执行对象及其相关信息的快速访问和共享。

   Hash Bucket主要用于特定可执行对象的快速定位和存取,每个哈希桶中对应一个将多个可执行对象连接起来的链表,而这些可执行对象在链表中的表现形式就是可执行对象的句柄(Handle),当需要定位或访问特定对象时,系统通过对特定SQL或PL/SQL对象做特定哈希计算,就可以快速得知该特定对象应该位于的哈希桶,而每个哈希桶的链表比较短,尤其是高版本的Oracle中,哈希桶的链表更短,这样,在哈希桶链表中定位和访问特定对象会非常快速。至于Library Cache中哈希桶的数目,系统会根据Shared Pool的大小自动算出,以确保哈希桶在够用的同时,也不会导致哈希桶中对象数目过多而影响定位和访问的效率。哈希桶示意图如下所示。

4. Hash Latch

  上面我们也提到,每个哈希桶通过链表将多个可执行对象连接到一起,而这些可执行对象在其中以对象句柄形式存在在,这些句柄包含了这些对象的相关属性,例如:名称、标记、指向对象内存地址的指针等。Library Cache Handle具体如下所示。

6. Library Cache Object
  哈希桶中链表上的Handle对应的是可执行对象(Library Cache Object),这些对象由一些独立的堆(Heap)所组成,具体说,哈希桶中链表上的Handle指向这些可执行对象时,其实是指向它的第一个堆(heap 0),其中记录了指向该对象其他堆(Heap)的指针信息等,这些堆具体包括:
   1)依赖表(Dependency Table):当前对象(Library Cache Object,简称LCO)依赖的其它对象信息,例如:该对象所依赖的表、视图、索引等。
   2)子表(Child Table):当前对象的子LCO及其相关信息。
   3)数据块(Data Block):当前对象的SQL语句、执行计划、执行文本等信息。
   。。。

     当Oracle用户提交SQL或PL/SQL等可执行对象后,这将在Library Cache中生成一个叫做游标(cursor)对象,这些游标对象可被多个会话共享,这样既节省了资源又提高了效率。同时,每个游标又由两部分表达和限定,即父游标(Parent Cursor)和子游标(Child Cursor),这些通过系统相关动态视图可以查询和了解。父游标和子游标具体如下所示。

<1br style="box-sizing:border-box;color:#4F4F4F;font-family:" font-size:16px;text-align:justify;white-space:normal;"="">

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8484829/viewspace-2151093/,如需转载,请注明出处,否则将追究法律责任。

主题测试文章,只做测试使用。发布者:深沉的少年,转转请注明出处:http://www.cxybcw.com/184894.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code