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 ...
随机推荐
- linux_nmon监控方法
一.介绍 Nmon 工具是 IBM 提供的免费的在AIX与各种Linux操作系统上广泛使用的监控与分析工具.该工具可将服务器的系统资源耗用情况收集起来并输出一个特定的文件,并可利用 excel 分析工 ...
- 【BZOJ】3140: [Hnoi2013]消毒
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3140 猜一发(显然)有结论:每次一定选择一个平面,即每次操作对答案的贡献都为$1$ 首先可 ...
- JAVA 面向对象中的多态
多态是继封装.继承之后,面向对象的第三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一个 ...
- pipenv安装.whl
windows下很多库安装不方便,主要是编译C之类的. 之前这样做: 1去https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载各种版本编译好的.whl 2 pi ...
- 历次PCB板修改意见汇总
历次PCB板修改意见汇总: 1 对于主控芯片,建议参考官方的PCB布局,官方的PCB布局肯定是为了最大程度的发挥主控的性能. 2 LDO要选择低功耗的,静态电流越小越好,估算一下板子的最大电流,选择L ...
- Codeforces 934C - A Twisty Movement
934C - A Twisty Movement 思路:dp 很容易想到要预处理出1的前缀和pre[i]和2的后缀和suf[i] 然后枚举区间,对于每个区间如果能求出最长递减序列的长度,那么就能更新答 ...
- boostrapt的二级下拉菜单
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta conte ...
- 滑动拼图 Sliding Puzzle
2018-09-09 22:01:02 问题描述: 问题求解: 问题很Interesting,其实本质就是解空间遍历,使用BFS就可以很快的予以解决~ public int slidingPuzzle ...
- nodejs通过request请求远程url的文件并下载到本地
需要循环去下载远程文件,然后自己写了一个demo,可以直接运行,如下: //文件下载 var fs = require("fs"); var path = require(&quo ...
- 在远程连接一个 Wndows 10的情况下,重启远程机器
如果你从菜单找的话,是找不到这个菜单的!!! 你应该直接按 alt + F4 , 就会出现这个选项了. 参考: https://tommynation.com/shut-windows-10-remo ...