我的编程空间,编程开发者的网络收藏夹
学习永远不晚

sga中library cache的内部原理是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

sga中library cache的内部原理是什么

本篇文章给大家分享的是有关sga中library cache的内部原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一、概述

library cache(库缓存)是shared pool中的一块内存区域,它的主要作用是缓存刚刚执行过的sql语句和pl/sql(包括存储过程、包、函数、触发器)所对应的解析计划、解析树等对象,当同样的sql或pl/sql再次被执行时,就可以直接利用在library cache中的那些相关对象,而无需再次从头开始解析,这样提高了这些语句的执行效率。
        查看library cache在内存中的位置。





sga中library cache的内部原理是什么

   

      缓存在library cache中的对象我们称之为库缓存对象(library cache object),所有的库缓存对象都是以库缓存对象句柄(library cache object handle)的结构存储在library cache中,oracle通过访问库缓存对象句柄来访问库缓存对象。

     库缓存对象句柄是oracle自定义的一种c语言复杂结构,它是以hash table的方式存储在library cache中的,这意味着oracle会通过hash运算来存储和访问对应的库缓存对象句柄。

     下图为从hash角度分析库缓存的构成:

        sga中library cache的内部原理是什么
      由上图可看出,整个library cache可以看作是一组由hash bucket所组成,每一个hash bucket所对应的不同的哈希值。对于单个bucket而言,里面存储的就是哈希值相同的所有库缓存对象句柄,同一个hash bucket中不同的库缓存对象句柄之间会用指针链接起来,即同一个hash bucket中不同的库缓存对象句柄之间实际上组成了一个库缓存对象句柄链表(library cache object handles)。一个library handle管理着一个libirary cache object(lco),handle对实际的lco起到元数据和指针作用,lco保存着实际信息。

    当运行select * from employees时,oracle会计算sql文本的哈希值,以此寻找相关的hash bucket,遍历库缓存对象句柄链表,如果能找到则可直接使用解析计划、解析树等信息,若找不到,则需要从头开始解析,生成解析树、解析计划等并存储在library cache object handle中。


    library cache object handle结构图:

             sga中library cache的内部原理是什么

      库缓存对象句柄有name、namespace等属性组成,着重分析name、namespace、heap 0这三个属性。

      属性“name”表示库缓存对象句柄所对应的库缓存对象名称。例如如果是sql语句对应的库缓存对象句柄,则属性name就是该sql语句的sql文本;如果是表对应的库缓存对象句柄,则属性name就是该表的表名。

      属性“namespace” 表示的是库缓存对象句柄对应的库缓存对象所在的分组名,不同类型的库缓存对象句柄可能属于同一个分组。

      属性 “heap 0 pointer”:这里要说明下library cache object handle类似c语言的结构体,library cache object handle中还嵌套了一些子结构,其中heap 0 pointer是指向子结构heap 0的指针


    在library cache中,bucket初始化的数量受隐藏参数 _kgl_bucket_count参数控制。

         sga中library cache的内部原理是什么

值为9,则理论上应分配2^9*256=131072个bucket.


通过library cache dump可发现,bucket为131072。在library cache dump中,size为Buckest的数量,count为Object Handles的数量。

        sga中library cache的内部原理是什么

heap 0 pointer(一说为heap 0 object)就是指向子结构heap 0的指针,heap 0 的结构如下:

sga中library cache的内部原理是什么

heap 0 也是一种复杂的结构,它有很多属性,

tables属性:记录的是与该heap 0所在的库缓存对象有关的库传讯对象句柄地址集合。Tables分为许多细类。

Data blocks属性。

 二、dump验证

      分别以sys用户和test用户创建一张一摸一样的表。

SQL> show user

USER is "SYS"

SQL> create table t as select * from v$mystat;

Table created.

另起一个连接,用数据库用户test登录

SQL> show user

USER is "TEST"

SQL> create table t as select * from v$mystat;

Table created.

以俩个用户为基础分别执行select * from t where t.STATISTIC#=671;





        查询该sql的sql_id和hash_value

    sga中library cache的内部原理是什么    
            sga中library cache的内部原理是什么

    执行library cache dump

SQL> alter session set events 'immediate trace name library_cache level 10';

Session altered.


通过sql_id或hash value查询dump, 可在dump中找到关于该sql的内容,如下图
        sga中library cache的内部原理是什么

以上图为例分析library cache结构

Bucket: #=114283 Mutex=0x9bdc28e8(0, 20, 0, 6)

  LibraryHandle:  Address=0x84e5fb00 Hash=cb15be6b LockMode=N PinMode=0 LoadLockMode=0 Status=VALD

 --bucket号,Hash=cb15be6b此处采用的是16进制,转换为十进制的值为3407199851,正好与上面v$sqltext中查出来的值一致。

ObjectName:  Name=select * from t where t.STATISTIC#=671

--object 的名称 即上面说过的name属性,也就是lco(library cache objects)

FullHashValue=9581b1f4c50e25f2e8500930da5a0101 Namespace=SQL AREA(00) Type=CURSOR(00) Identifier=0 OwnerIdn=0

--上面说过的namespace,尚不太清楚fullhashvalue的含义

ChildTable:  size='16'

Child:  id='0' Table=0x87b03f60 Reference=0x87b039c8 Handle=0x98efe438

Child:  id='1' Table=0x87b03f60 Reference=0x87b03d10 Handle=0x83595530

--俩个child cursor

以上就是sga中library cache的内部原理是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

sga中library cache的内部原理是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python中的内存管理的原理是什么?

Python中的内存管理的原理是什么?Python是一种高级的、动态类型的编程语言,具有自动垃圾回收功能。Python内存管理的原理基于引用计数机制和垃圾回收机制。引用计数机制是Python内存管理的基础。每个对象都会有一个引用计数器,用于
2023-10-22

java中内部类出现内存泄漏的原因是什么

这篇文章给大家介绍java中内部类出现内存泄漏的原因是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序
2023-06-14

MySQL内部字符集转换的工作原理是什么

MySQL内部字符集转换的工作原理主要涉及以下几个方面:MySQL服务器首先会根据连接的客户端的字符集设置来决定如何处理传入的字符数据。客户端和服务器之间的通信是通过字符集进行编码和解码的。当从客户端传入的字符数据需要存储到数据库中时,My
MySQL内部字符集转换的工作原理是什么
2024-04-09

Linq内部执行原理是怎么样的

这篇文章主要介绍了Linq内部执行原理是怎么样的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Linq内部执行原理LINQ(Language Integrated Query
2023-06-17

Java中内存分配的原理是什么

本篇文章给大家分享的是有关Java中内存分配的原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。JAVA内存分配与管理是Java的核心技术之一,一般Java在内存分配时会
2023-06-17

tomcat热部署的原理是什么

Tomcat热部署的原理是使用了Servlet规范中的"Reload"功能。当Tomcat启动时,它会监视web应用程序的文件夹,比如"WEB-INF/classes"和"WEB-INF/lib",以及Web应用程序的元数据文件"WEB-I
2023-10-23

Go的内置RPC原理是什么

这篇文章主要介绍“Go的内置RPC原理是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go的内置RPC原理是什么”文章能帮助大家解决问题。从一个 Demo 入手为了快速进入状态,我们先搞一个 D
2023-07-05

rabbitmq集群部署的原理是什么

RabbitMQ集群部署的原理是将多个RabbitMQ节点组合在一起,共同提供服务。集群部署的主要原理包括以下几个方面:节点间通信:集群中的节点通过互相通信来交换消息和同步状态。节点之间使用AMQP协议和Erlang的分布式机制进行通信。每
2023-10-23

jenkins自动部署的原理是什么

Jenkins自动部署的原理是基于持续集成和持续交付的概念。它可以将软件开发过程中的各个环节自动化,从代码的编写、构建、测试到部署,实现快速、可靠的软件交付。具体原理如下:代码管理:Jenkins可以集成多种源代码管理系统(如Git、SV
2023-10-25

使用cache改善系统性能的依据是什么原理

这篇文章给大家分享的是有关使用cache改善系统性能的依据是什么原理的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用cache改善系统性能的依据是程序的局部性原理。当CPU需要读取数据时,首先在cache中查找
2023-06-15

Kafka集群部署的原理是什么

Kafka集群部署的原理是通过分布式架构来实现高可用和高吞吐量的消息传输。Kafka采用了分布式发布-订阅消息系统的模式,其中包含以下重要原理:分布式存储:Kafka采用分布式存储的方式将消息分散存储在多个broker节点上。每个broke
2023-10-24

C#中事件只能在内部调用的原因是什么

本篇内容主要讲解“C#中事件只能在内部调用的原因是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#中事件只能在内部调用的原因是什么”吧!在学习C#中委托和事件时,产生一个疑问,类中定义的事
2023-06-21

golang内存分配的原理是什么

Golang中的内存分配是通过运行时系统来管理的。以下是Golang内存分配的原理:堆分配:Golang使用一个堆来存储动态分配的内存对象。堆是一块大的虚拟内存区域,用于存储运行时分配的对象。堆的大小可以根据需要动态增长。栈分配:Golan
2023-10-21

编程热搜

目录