Oracle Shared Pool之Library Cache
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的更多相关文章
- 共享池之六:shared pool latch/ library cache latch /lock pin 简介
latch:library cache --desc v$librarycache; latch:library cache用于保护hash bucket.library cache lock保护HA ...
- Oracle Shared Pool 原理
Oracle Shared Pool 原理 由于shared pool中最重要的是library cache,所以本文主要讲解Library cache的结构,library cache latch, ...
- Oracle Shared Pool机制之——Latches, Locks, Pins and Mutexes
本文中,我们将讨论共享池(Shared Pool)中的各种内存保护结构,即Latches,Locks,Pins和Mutexes. 1. Lathes 当在库缓冲(Libraray Cache)中创建 ...
- oracle 基础知识(八)----Library Cache *
一,介绍 Library cache是Shared pool的一部分,它几乎是Oracle内存结构中最复杂的一部分,主要存放shared curosr(SQL)和PLSQL对象(function,pr ...
- Oracle数据库大量library cache: mutex X及latch: shared pool问题排查一例
业务系统数据库夯住,数据库内大量的library cache: mutex X及latch: shared pool等待,alert日志信息如下 Tue Sep :: WARNING: inbound ...
- 共享内存shared pool (5):详解一条SQL在library cache中解析
前面介绍的 shared pool,library cache结构,都是为了说明一条SQL是如何被解析的.先看下面的图: 图中涉及的各结构简单介绍 父HANDLE,里面有父游标堆0的地址.. 父游标堆 ...
- Oracle内存详解之 Library cache 库缓冲
Oracle内存详解之 Library cache 库缓冲 2017年11月09日 11:38:39 阅读数:410更多 个人分类: 体系结构 Library cache是Shared pool的一部 ...
- Oracle内存详解之二 Library cache 库缓冲-转载
Library cache是Shared pool的一部分,它几乎是Oracle内存结构中最复杂的一部分,主要存放shared curosr(SQL)和PLSQL对象(function,procedu ...
- 产生library cache latch原因
产生library cache latch原因The library cache latches protect the cached SQL statements and objects' defi ...
随机推荐
- 安装Windows10系统注意事项
硬盘的AHCI开启: 报错解决:将Secure Boot 设置为Disabled win10系统下载地址:ed2k://|file|cn_windows_10_multi-edition_versi ...
- C#判断数据类型的简单示例代码
; Console.WriteLine( "i is an int? {0}",i.GetType()==typeof(int)); Console.WriteLine( &quo ...
- 【Django】【Shell】
django-admin startproject guest python manage.py startapp sign python manage.py runserver 127.0.0.1: ...
- RN 使用第三方组件之react-native-image-picker(拍照/从相册获取图片)
首先给个github地址:https://github.com/react-community/react-native-image-picker 英文不行的看下面这个笔记 该插件可以同时给iOS和 ...
- 【BZOJ】1831: [AHOI2008]逆序对
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1831 考虑$-1$的位置上填写的数字一定是不降的. 令${f[i][j]}$表示$DP$到 ...
- 1. dubbo概述
dubbo简介: 官网:http://dubbo.io 最大程度进行解耦,降低系统耦合性,可以跨工程,跨项目; 生产者/消费者模式; jdk:1.6以上 maven:3.0以上 国际maven仓库:h ...
- TextView显示内容不全
今天开发遇到一个问题,发现TextView显示不全,很纳闷,看图: 正常情况应该是这个样子的: 造成这种情况的原因是: TextView被快速并且多次的设置内容值造成的. 我的场景: 我点击全选按钮, ...
- python模块(2)
1.OS模块 print(os.getcwd()) #获取当前工作目录 os.chdir('E:\python练习\python35学习') #更改目录 print(os.getcwd()) E:\p ...
- OP社区相关
●相关网站官网: http://openstack.org Wiki: http://wiki.openstack.org 代码贡献统计:http://stackalytics.com/ Bug跟踪: ...
- Windows上安装运行hadoop
0.自己编译安装步骤在这里,有英文版本连接:<英文传送门>. 自己编译尝试后不成功,换为下面使用别人编译好的版本的方法.参考博客:<初学hadoop,windows下安装> 1 ...