1. Shared Pool组成
  Shared Pool由许多区间(Extent)组成,这些区间又由多个连续的内存块(Chunk)组成,这些内存块大小不一。从逻辑功能角度,Shared pool主要包含三个部分:Library Cache,Dictionary Cache和Control Structure。而这里,我们主要介绍其中的Library Cache。
2. Library Cache

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

3. Hash Bucket

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

4. Hash Latch

前面讲到了哈希桶及其链表,当多个用户同时访问这些哈希桶和链表时,就会出现冲突和问题,为了实现用户对这些哈希桶及其链表的有序访问和共享,Oracle通过一种叫做哈希Latch的机制来保护这些共享资源,当一个用户需要访问或修改这些哈希桶及其链表时,需要首先获取其上的哈希Latch,期间,其他需要获取相同哈希Latch的用户或会话就需要等待,直到持有该哈希Latch的用户释放为止,需要提出的是,并不是针对每个哈希桶都有一个哈希Latch,而是一个哈希Latch覆盖多个哈希桶,这样,当不同用户即使不是访问同一个哈希桶及其链表时,只要被同一个哈希Latch覆盖,也是需要等待该哈希Latch被释放才可以。哈希Latch具体如下所示。

5. Library Cache Handle

  上面我们也提到,每个哈希桶通过链表将多个可执行对象连接到一起,而这些可执行对象在其中以对象句柄形式存在在,这些句柄包含了这些对象的相关属性,例如:名称、标记、指向对象内存地址的指针等。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语句、执行计划、执行文本等信息。
   。。。

Library Cache Object具体如下所示。

7.Library Cache整体示意图如下所示。

8. 父游标/子游标(Parent Cursor/Child Cursor)

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

Oracle Shared Pool之Library Cache的更多相关文章

  1. 共享池之六:shared pool latch/ library cache latch /lock pin 简介

    latch:library cache --desc v$librarycache; latch:library cache用于保护hash bucket.library cache lock保护HA ...

  2. Oracle Shared Pool 原理

    Oracle Shared Pool 原理 由于shared pool中最重要的是library cache,所以本文主要讲解Library cache的结构,library cache latch, ...

  3. Oracle Shared Pool机制之——Latches, Locks, Pins and Mutexes

    本文中,我们将讨论共享池(Shared Pool)中的各种内存保护结构,即Latches,Locks,Pins和Mutexes. 1.  Lathes 当在库缓冲(Libraray Cache)中创建 ...

  4. oracle 基础知识(八)----Library Cache *

    一,介绍 Library cache是Shared pool的一部分,它几乎是Oracle内存结构中最复杂的一部分,主要存放shared curosr(SQL)和PLSQL对象(function,pr ...

  5. Oracle数据库大量library cache: mutex X及latch: shared pool问题排查一例

    业务系统数据库夯住,数据库内大量的library cache: mutex X及latch: shared pool等待,alert日志信息如下 Tue Sep :: WARNING: inbound ...

  6. 共享内存shared pool (5):详解一条SQL在library cache中解析

    前面介绍的 shared pool,library cache结构,都是为了说明一条SQL是如何被解析的.先看下面的图: 图中涉及的各结构简单介绍 父HANDLE,里面有父游标堆0的地址.. 父游标堆 ...

  7. Oracle内存详解之 Library cache 库缓冲

    Oracle内存详解之 Library cache 库缓冲 2017年11月09日 11:38:39 阅读数:410更多 个人分类: 体系结构 Library cache是Shared pool的一部 ...

  8. Oracle内存详解之二 Library cache 库缓冲-转载

    Library cache是Shared pool的一部分,它几乎是Oracle内存结构中最复杂的一部分,主要存放shared curosr(SQL)和PLSQL对象(function,procedu ...

  9. 产生library cache latch原因

    产生library cache latch原因The library cache latches protect the cached SQL statements and objects' defi ...

随机推荐

  1. Git 常用使用技巧

    1.创建代码仓库 Step 1:先配置下我们的身份吧,这样在提交代码的时候Git就可以知道是谁提交的,命令如下: git config --global user.name "coder-p ...

  2. python redis 操作

    1.String 操作 redis中的String在在内存中按照一个name对应一个value来存储 set() #在Redis中设置值,默认不存在则创建,存在则修改 r.set('name', 'z ...

  3. MVC后台获取数据和插入数据的三种方式【二】

    MVC模式下,从前端获取数据返回后台,总共有三种形式.下面的代码示例将演示如何将数据返回到后端. 一.首先我们看看表单代码,注意input标签中name的值. <html> <hea ...

  4. python 汉字编码问题

    问题描述:我要判断的两个字符串是否相等(‘区站号’==‘区站号’),第一个值是我从txt文件导入的数据,第二个值是我自己定义的并使用decode('utf-8')得到的,如果你用print函数打印这两 ...

  5. MYSQL常用函数(聚合函数(常用于GROUP BY从句的SELECT查询中))

    AVG(col)返回指定列的平均值 COUNT(col)返回指定列中非NULL值的个数 MIN(col)返回指定列的最小值 MAX(col)返回指定列的最大值 SUM(col)返回指定列的所有值之和 ...

  6. Mac Anaconda 简单介绍 -- 环境管理

    Anaconda Anaconda(官方网站)就是可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本.Anaconda包含了conda.Python在内的超过180个科学包及其依赖项. ...

  7. Asp.net core 学习笔记 ( DI 依赖注入 )

    比起 Angular 的依赖注入, core 的相对简单许多, 容易明白 所有 provider 都在 startup 里配置. public void ConfigureServices(IServ ...

  8. appium --log-timestamp > appium.log

     appium --log-timestamp > appium.log 

  9. 数据结构(C语言版)-第1章 绪论

  10. one-class logistic regression (OCLR)

    ONE-CLASS DETECTION OF CELL STATES IN TUMOR SUBTYPES Machine Learning Identifies Stemness Features A ...