Shared pool物理层面上由许多内存块(chunck)组成。从逻辑功能划分,Shared pool主要由三部分组成:Library cache,Dictionary cache和Control Structure。本文主要讲述 Library cache.

Library cache

  library cache最主要的功能就是存放用户提交的SQL语句,SQL语句相关的解析树(解析树也就是对SQL语句中所涉及到的所有对象的展现)--->共享SQL区(shared SQL areas),私有SQL区(private SQLareas,如果配置了共享服务器),执行计划,用户提交的PL/SQL程序块(包括匿名程序块,存储过程,包,函数等)以及它们转换后能够被Oracle执行的代码等,为了对这些内存结构进行管理,library cache中还存放了很多控制结构,包括lock,pin,dependency table,11G中的mutex等

Library cache要解决三个问题

  1. 快速定位:Library cache中对象众多,Oracle如何管理这些对象,以便服务进程可以迅速找到他们需要的信息。比如,某个服务进程需要迅速定位某个SQL是否存在于Library cache中。
  2. 关系依赖:Library cache中的对象存在复杂的依赖关系,当某个objec失效时,可以迅速将依赖其的对象也置为失效状态。比如,某个表发生了结构变化,依赖其的SQL语句需要重新解析。
  3. 并发控制:Library cache中必须有一个并发控制的机构,比如:锁机制,来管理大量共享对象的并发访问和修改的问题

Library cache问题的解决方法

  1. 快速定位:Oracle利用Hash Bucket结构来解决library cache中快速定位的问题
  2. 关系依赖:Oracle利用LCO(library cache object)中dependency table解决对象依赖关系
  3. 并发控制:Oracle利用LATCH/LOCK/PIN解决并发控制

Hash Bucket

  • Hash Bucket是通过串连起来的对象句柄体现出来的,Hash Bucket本身是一个逻辑的概念,而不像对象是一个具体的实体。
  • Oracle根据shared_pool_size尺寸自动计算hash buckets的个数,shared pool越大,则可以挂载的对象句柄就越多。
  • 此处的Hash Bucket同 共享内存 share pool (2)中的Bucket原理相似,但不是同一个。

library cache handle

  每个hash bucket后面都串连着多个句柄,这些句柄描述了library cache里的对象的一些属性,包括名称、标记、指向对象所处的内存地址的指针等

library cache object

  Library Cache Object是由一些独立的heap所组成。前面说Library cache handle指向对象(Library cache Object),其实就是指向第一个heap 0,而Heap 0记录了指向其他heap的指针信息

  • Dependency table --当前LCO依赖的其它LCO信息,如SQL语句依赖的表、视图等. (LCO :library cache object)
  • Chile table----保存当前LCO的子LCO信息。
  • Data blocks ---保存SQL语句、执行计划、执行文本等信息

SQL语句在Library cache执行的第一次检查过程

  1. 通过语法语义权限等检查的SQL语句进入Library cache
  2. 将SQL文本转化为ASCII值(大小写ASCII不同)并进行hash函数的运算
  3. 得到一个HASH值对应到hash bucket的号码
  4. 进入该hash bucket对应的链表进行扫描并比较

parent cursor/ child cursors

  当用户提交SQL语句或PL/SQL程序块到oracle的shared pool以后,在library cache中生成的一个可执行的对象,这个对象就叫做游标(cursor)。不要把这里的游标与标准SQL(ANSI SQL)的游标混淆起来了,标准SQL的游标是指返回多条记录的SQL形式,需要定义、打开、关闭。下面所说到的游标如无特别说明,都是指library cache中的可执行的对象。游标是可以被所有进程共享的,也就是说如果100个进程都执行相同的SQL语句,那么这100个进程都可以同时使用该SQL语句所产生的游标,从而节省了内存。

  每个游标都是由library cache中的两个或多个对象所体现的,至少两个对象。一个对象叫做父游标(parent cursor),包含游标的名称以及其他独立于提交用户的信息(v$sqlarea视图里看到的都是有关父游标的信息);另外一个或多个对象叫做子游标(child cursors)。例如:SQL文本相同,但提交SQL语句的用户不同,有可能生成不同的子游标。

参考blog:

http://blog.csdn.net/haibusuanyun/article/details/17844211

http://czmmiao.iteye.com/blog/1273261

共享内存shared pool (3):Library cache相关推荐

  1. ORA-04031: 无法分配 3840 字节的共享内存 (“shared pool“,“unknown object“,“sga heap(1,0)“,“kglsim object batch“)

    sql>alter system set shared_pool_reserved_size='比原先值适当增加' scope=spfile; sql>shutdown immediate ...

  2. 共享池 shared pool

    定义: 共享池( shared pool )是位于SGA中的一块内存区域,主要用于缓存SQL的执行计划.之所以叫共享,是由于该块内存区域可以被多个会话共享同一个执行计划.即,如果有一个会话执行了SQL ...

  3. linux shared,从 0 开始学习 Linux 系列之「22.共享内存 Shared Memory」

    共享内存 版权声明:本文为 cdeveloper 原创文章,可以随意转载,但必须在明确位置注明出处! 共享内存 Shared Memory 这次我们来学习在 Linux 中最快的一种 IPC 方式:共 ...

  4. 进程间通信之-共享内存Shared Memory--linux内核剖析(十一)

    共享内存 共享内存是进程间通信中最简单的方式之中的一个. 共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区. 共享内存同意两个或很多其他进程訪问同一块内存,就如同 malloc() 函数 ...

  5. Linux——详解共享内存shared memory

    目录 一.共享内存介绍 (一).什么是共享内存 (二).共享内存优点 (三).共享内存缺点 二.共享内存使用 (一).创建-shmget ①key ②size ③shmflg ④返回值 (二).连接- ...

  6. 隐含参数与 Library Cache 与 Shared Pool Latch 原理

    现在每一个 Oracle DBA,很少有不知道隐含参数的.但至少在表面上,Oracle 是不支持将隐含参数用于数据库的.隐含参数通常用于救急,或者是作为 Oracle BUG 的临时解决方案(Work ...

  7. oracle11 share pool,Oracle Shared pool 详解

    . Shared Pool概述 在之前的blog对的内存也做了一个概述,参考: Oracle内存架构详解 在网上搜到一篇介绍shared pool非常详细的pdf资料. 原文链接以找不到,但还是要感谢 ...

  8. GPU 共享内存bank冲突(shared memory bank conflicts)

    GPU 共享内存bank冲突(shared memory bank conflicts) 时间 2016-11-05 21:47:58 FindSpace 原文 http://www.findspac ...

  9. SHARED POOL 原理

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

  10. atch: shared pool 优化探索

    首先来看赤裸裸的问题直击: Top 10 Foreground Events by Total Wait Time Event Waits Total Wait Time (sec) Wait Avg ...

最新文章

  1. 第二篇:智能电网(Smart Grid)中的数据工程与大数据案例分析
  2. 3.2 封装成帧和透明传输
  3. libpcap-mmap分析(五)
  4. 用webpack构建一个常规项目,好处和坏处分析
  5. python ip代理池_python实现ip代理池功能示例
  6. 值得推荐的C/C++框架和库(转载)
  7. switch omega - VNP
  8. 拿 C# 搞函数式编程
  9. java lambda 实现_Java 8 Lambda实现原理分析
  10. 大院大所合作对接会7天倒计时!亮点抢先看
  11. c语言饿结构_C语言的四种程序结构
  12. c如何接收java指令_java指令和javac指令总结
  13. Java线程池 - 问题驱动学习
  14. Java 使用 Redis | 菜鸟教程
  15. ElementUI 面试题整理
  16. Win10下运行红色警戒2
  17. 2021年中国研究生数学建模竞赛A题(华为公司命题)——相关矩阵组的低复杂度计算和存储建模
  18. 【高德地图API】从零开始学高德JS API(一)地图展现——仙剑地图,麻点图,街景,室内图
  19. 44学习自动化运维工具 Chef 的基本用法,包括厨师编写、节点管理
  20. 最后1天,包邮送50豆瓣高分Python 好书

热门文章

  1. pix2pixhd_图像翻译三部曲:pix2pix, pix2pixHD, vid2vid
  2. 【机器学习系列】隐马尔科夫模型第二讲:前向算法、后向算法
  3. 【Gym 102134-E】Kth subtree【权值树状数组、二分统计第k大+dfs离线操作】
  4. gamma 函数的 LaTeX 代码
  5. Linux进程优先级取值范围,Linux中使用nice和renice命令:改变进程优先级
  6. think php5关联模型,thinkphp5 关联模型
  7. 卡爆mysql_荐 MySQL死锁和卡死分析
  8. php对字符串简单加密解密,PHP字符串加密解密
  9. 软件测试黑盒测试实验心得_视频资源25套高级软件测试,性能测试,功能测试下载自动化测试...
  10. linux模拟http请求命令