Oracle连载3----共享池的内部结构及优化处理

这篇具有很好参考价值的文章主要介绍了Oracle连载3----共享池的内部结构及优化处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

是SGA的一个组件,共享池是为了让我们大家共享数据而设置的缓冲池。共享池的内存是通过Oracle 通用内存管理来进行管理。KGH heap Manager 所有共享池的free内存都被挂在成为freelists的空闲链表上,链表是按照bucket机制建立,更具空闲内存片段大小,挂在了不同的bucket上。

分配的内存是可释放的:freeable 或者 recreateable

其中 freeable 是可以直接释放的,而recreateable 的内存是在unpin之后释放。都是可以重用的内存

内部结构

采用堆管理的模式(HEAP)

堆管理的基础就是KGH。负责管理和维护共享池中的内存结构包括SQL语句、PL/SQL代码、执行计划等共享的数据库对象。

内存被划分为一系列大小不等的Memory Chunk。每个Memory Chuck 都有一个对应的Free List ,用于管理 Chunk 内的可用内存块。

子池设置的目的是为了提高共享池分配回收和管理的性能,加大共享池的并发访问能力,因此他的存在坑定能够提升共享池的性能,其次了解子池技术可能带来的负面影响,由于一个大的共享池会被分割为若干个较小的子池,每个子池独立管理Free List,因此采用子池后,每个子池的容量也就变小了,也就增加了共享池碎片化的可能性。

行缓冲(Row Cache )也叫做 字典缓冲,缓冲是以行为单位组织的。

字典缓存绝对不是纯粹的数据字典表的缓冲。数据字典表和普通的表没有不同,其数据块的缓冲也是相同的。而字典缓存是经过组织的,用于数据库运行中SQL解析,权限控制等用途的内部数据结构,是一种字典表的内存试图。如果Oracle在执行某个SQL的时候,为了SQL解析,需要访问一些字典表,从中获取一些数据,那么它会通过一些递归调用SQL来完成这些事。为了减少递归SQL的执行开销,这些行数据呗缓存在共享池中,这个缓存就是字典缓存。

库缓存和游标

库缓存是共享池的一个子堆

完整的游标包括一个父游标,并且至少包含一个子游标。

对于SQL 的文本做散列计算,会得到一个散列值,通过该散列值就可以找到相应的游标,由于散列值是根据游标名称的每个字符进行散列计算得到的。文章来源地址https://www.toymoban.com/news/detail-822675.html

到了这里,关于Oracle连载3----共享池的内部结构及优化处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Oracle 查询优化改写(第一章)

    不采用 nvl()函数 ,而使用 COALESCE 函数语法为COALESCE(表达式1,表达式2,...,表达式n),n=2,此表达式的功能为返回第一个不为空的表达式,如果都为空则返回空值。 注意:所有表达式必须为同一类型或者能转换成同一类型。 总结: NVL:如果第一个值为NULL取默认值,默认值是自

    2024年02月09日
    浏览(28)
  • Oracle 查询优化改写(第五章)

        若员工姓名有元音字母AEIOU,现在要求把这写元音字母去掉。  将字符和数字数据分离也可以通过regexp_replace分离: regexp_replace(data,\\\'[0-9],\\\'\\\')  字符 regexp_replace(data,\\\'[^0-9],\\\'\\\')  数字   4.1^和$的含义    4.2+和*的含义   4.3 ^和$与+和*联合使用                      

    2024年02月09日
    浏览(31)
  • Oracle 查询优化改写(第七章)

    2024年02月11日
    浏览(34)
  • Oracle 数据库表性能优化

    最近在一次工作过程中,遇到了oralce 表性能慢的问题。一个历史表,一个月将近1000多万的数据量,想查询这个表的数据,只使用了一个简单的语句,却一个多小时都查不出来。于是决定对Oracle 的这张表的性能进行一下优化。本人不是一个专门搞数据库这块的dba,所以只能粗

    2024年02月03日
    浏览(42)
  • oracle 大数据常见优化 &分页查询

    参考某微信社区博主,此文为温故知新;原参考博主账号与链接已丢失 1.limit 语句样式:select * from table limit m,n 适用场景:适用于数据量较少的情况(元组、百/千) 缺点:全表扫描,速度劣势,有的数据库结果集返回不稳定。limit限制是从结果集的M位置处取出N条输出,其余

    2024年02月05日
    浏览(31)
  • 记一次 Oracle 下的 SQL 优化过程

    事情是这样的,UAT 环境的测试小伙伴向我扔来一个小 bug,说是一个放大镜的查询很慢,转几分钟才出数据,我立马上开发环境试了一下,很快啊我说😏,放大镜的数据立马就出来了,然后我登录 UAT 环境一看,诶是有些慢😕 ,于是开始了我的排查之旅... 首先我立马拿到了

    2024年02月05日
    浏览(32)
  • (Oracle)SQL优化技巧(一):分页查询

    目录 分页查询框架 分页查询注意事项  有序/无序分页 事务带来的影响 分页查询与索引 排序字段索引实验 组合索引实验 利用ROWNUM进行分页查询的方法在各版本都是适用的,11g,12c,19c都可以使用该方法哦。在分享分页查询方法之前,需要先聊下ROWNUM,这玩意儿要是聊不清楚,

    2024年04月11日
    浏览(37)
  • 006.Oracle事务处理

    我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合

    2024年01月21日
    浏览(24)
  • oracle异常处理

    最近在工作中遇到这么一个场景: 在同一网段内存在着A库和B库,需要将A库下某些表的数据同步到B库 B库跑着定时任务,定时调用存储过程将A库下的数据同步到B库。 B库和A库是通过建立dblink建立连接的。【关于dblink相关可能会后面单独写博客,先给自己挖个坑,慢慢填 哈哈

    2024年02月03日
    浏览(24)
  • oracle的异常处理

    oracle 提供了预定义例外、非预定义例外和自定义例外三种类型。其中: l 预定义例外用于处理常见的oracle错误; l 非预定义例外用于处理预定义所不能处理的oracle错误; l 自定义例外处理与oracle错误无关的其他情况。 Oracle代码编写过程中,如果捕捉例外则会在plsql块内解决运

    2024年02月13日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包