`

oracle library cache 中的hash算法原理

阅读更多
详细文章:http://bkeep.blog.163.com/blog/static/12341429020097155747786/

library cache就是使用多个hash bucket来管理的,其hash算法当然比我们前面列举的要复杂多了。每个hash bucket后面都串连着多个句柄(该句柄叫做library cache object handle),这些句柄描述了library cache里的对象的一些属性,包括名称、标记、指向对象所处的内存地址的指针等。可以用下图一来描述library cache的整体结构。

当一条SQL语句进入library cache的时候,先将SQL文本转化为对应ASCII数值,然后对该这些ASCII数值进行hash函数的运算,传入函数的是SQL语句的名称(name,对于SQL语句来说其name就是SQL语句的文本)以及命名空间(namespace,对于SQL语句来说是“SQL AREA”,表示共享游标。可以从视图v$librarycache里找到所有的namespace)。运用hash函数后得到一个值,该值就是hash buckets的号码,从而该SQL语句被分配到该号的hash bucket里去。实际上,hash bucket就是通过串连起来的对象句柄才体现出来的,它本身是一个逻辑上的概念,是一个逻辑组,而不像对象是一个具体的实体。Oracle根据 shared_pool_size所指定的shared pool尺寸自动计算hash buckets的个数,shared pool越大,则可以挂载的对象句柄就越多。
分享到:
评论

相关推荐

    library_cache内存详解

    reload比率可以通过查询`V$LIBRARYCACHE`的pins和reloads字段计算得出。 Library cache的管理由Library Cache Manager负责,它是Oracle内存管理器——KGH Heap Manager的一个客户端。Heap Manager负责分配和回收...

    oracle执行计划

    sql语句按照hash的算法,产生hash 值,这里,我们可以把hash值当做一个PK值,然后根据这个值去寻找library cache相同的hash 值。如果有则应用这个hash所对应的执行计划。如果没有则再生成一个新的执行计划。

    Oracle原理学习笔记.docx

    Delete操作的流程包括检查语法、语义、计算HASH VALUE、匹配UGA和library cache、根据执行计划读取数据、记录delete操作的细节、创建undo条目、删除记录、提交等步骤。 Oracle在执行Delete操作时,会记录delete操作...

    Oracle 12c完整后台进程&内存结构图 DBA必备

    2. Library Cache:负责管理共享的库对象。 3. Data Dictionary Cache (Row Cache):负责管理数据字典的缓存。 4. Result Cache:负责管理查询结果的缓存。 5. Latches:负责管理共享资源的锁机制。 6. Reserved ...

    Oracle 10g的内存调整报告

    Buffer Cache使用LRU(Least Recently Used)算法管理缓存中的数据。这些缓存可以通过`db_cache_size`、`db_keep_cache_size`和`db_recycle_cache_size`参数分别控制。 - **Large Pool**:主要用于Oracle内部的一些...

    Oracle_AWR_报告分析实例讲解.docx

    在生成执行计划之前,Oracle会利用内部的hash算法计算SQL的hash值,并在 **Library Cache** 中查找是否存在相同的hash值。如果存在,并且SQL完全相同,则使用现有的解析树和执行计划,避免重新生成执行计划,这就是...

    Oracle常用dump命令介绍

    **Library Cache** 是SGA的一部分,它包含了执行计划和SQL语句等信息。可以通过以下命令来获取Library Cache的信息: - **`ALTER SESSION SET EVENTS 'immediate trace name library_cache level n'`** - **1**:...

    Oracle 10g 内存 调整报告

    包括Library Cache、Dictionary Cache等。 - **Buffer Cache**: 用于缓存数据块,分为Default Buffer Cache、Keep Buffer Cache和Recycle Buffer Cache三种类型。 - **Large Pool**: 供后台进程使用,例如RMAN备份...

    ORACLE_高效SQL分析

    - **Shared Pool**:其中又分为数据字典缓存(Data Dictionary Cache)和SQL库缓存(SQL Library Cache)。数据字典缓存用于存储Oracle对象的信息,而SQL库缓存则用来缓存已解析的SQL语句,这样当同一SQL再次执行时可以...

    Oracle运维最佳实践-下.pdf 带书签

    - 使用`v$librarycache`视图来监控Library Cache的状态。 - 使用`v$session_wait`视图来识别长时间的等待事件。 - **2.1.26 Real Application Testing** - Real Application Testing (RAT) 是一种模拟真实应用...

    ORACLE DBA面试题集

    library cache pin与library cache lock等待事件的含义: **知识点解析:** - **library cache pin**:表示等待获取一个共享SQL语句的锁。 - **library cache lock**:表示等待获取一个共享SQL语句的独占锁。 ###...

    oracle rac 性能分析与调整

    - **Global Cache相关等待事件**:如`Library cache lock`和`Buffer busy due to global cache`,这些事件可能导致性能下降。 - **Global Cache活动**:高Global Cache活动通常与低性能成反比,应寻找减少此类等待的...

    oracle面试题

    - **锁定与固定:** Library Cache Lock是对库缓存中的对象进行锁定,而Library Cache Pin则是将其固定在缓存中。 - **应用场景:** Library Cache Lock通常用于解决并发问题,确保在执行复杂的SQL或PL/SQL时不会...

    Oracle专家调优秘密

    3. **Cache机制**:利用Oracle的缓存机制,如Buffer Cache和Library Cache,减少重复操作,提高响应速度。 #### 网络调优 Oracle数据库在网络环境下的性能也需关注,通过优化网络配置,减少网络延迟,提升数据传输...

    sql语句的工作原理.doc

    4. **Library Cache查询**: 服务器进程在SHARED POOL的library cache中查找是否存在相同hash值的SQL语句。如果找到,则使用已缓存的、分析过的版本执行该语句。 5. **语法与对象解析**: - 如果未找到,服务器进程...

    sql面试题\oracle面试题目

    Library Cache Pin与Library Cache Lock等待事件 - 表示共享池中对象被锁定或挂起的状态。 - 可能指示并发问题或资源竞争。 #### 60. 修改普通索引为唯一约束的具体步骤 - 创建一个新的唯一索引。 - 禁用旧索引。 ...

    Oracle常用dump命令,记录一下备查。

    该命令可以dump出Library Cache的信息,包括library cache统计信息、hash table histogram、object handle和object结构等。其中,n的值可以是: * 1:library cache统计信息 * 2:包含hash table histogram * 3:...

    oracle开发介绍

    - 计算库缓存的命中率,通过查询`v$librarycache`来了解SQL重用的情况。 #### 四、索引的理解 **索引的作用和类型**: 1. **B-Tree 索引** - 是最常见的索引类型,适合于大多数查询场景。 - 提供高效的插入、...

Global site tag (gtag.js) - Google Analytics