`
itspace
  • 浏览: 959214 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

buffer cache 的内部结构

 
阅读更多
BUFFER CACHE作为数据块的缓冲区,不是一块简单的内存区域。在这一块内存区域上,Oracle设计了很多LATCH来保护BUFFER CACHE的结构不受并发性访问的破坏,当LATCH数量不够用或并发访问模式不兼容时,将会引起LATCH的争用,这就是我们经常看到的LATCH FREE等待事件。
从BUFFER CACHE中读取数据块一般需要花费100ns左右,假设每次只读取一个数据块,也就是每秒可以读取10 000 000个数据块。而从磁盘读取数据块一般需要花费10ms左右(包括寻址定位时间和传输时间),也就是说每秒只能读取100个数据块。从这个角度来讲,数据块从内存中读取的效率要比从磁盘中读取高100 000倍,但并不是说数据块从BUFFER CACHE中读取一定比从磁盘中读取好,即BUFFER CACHE的命中率并不是越高越好。BUFFER CACHE作为Oracle 数据块的缓冲区,不同的系统类型和业务模块对其命中率的敏感程度会有所不同。比如OLTP系统并发高、事务小、响应快、SQL执行时读取的数据块数量较少,因此,在此系统上比较高的BUFFER CACHE命中率不仅能加快数据块的读取时间,而且能有效缓解存储的I/O压力。而OLAP系统并发低,事务大,SQL执行时读取的数据块数量较多, 所以在这类系统中,BUFFER CACHE命中率的高低却不是特别重要,而且在此类系统中,将所有的数据块都存储在BUFFER CACHE中也不太现实。
客户端发起读取业务数据的需求,数据库在接受到这个请求之后,首先会在BUFFER CACHE中查看所需的数据块是否存在,如果存在,则从BUFFER CACHE中读取数据块内容返回给业务程序。如果不存在,则由服务器进程从数据文件中将数据块读至BUFFER CACHE中,然后再返回给业务程序。从以上简单的流程中可以引申出以下几个优化点:
当数据块在BUFFER CACHE中不存在时,业务程序只能从数据文件中物理地读取数据块(PHYSICAL READS),因此会消耗比较多的I/O资源。当存储I/O压力比较大时,可以增加BUFFER CACHE,加大数据块驻留在BUFFER CACHE中的概率,从而缓减系统I/O压力。
业务程序读取BUFFER CACHE中的数据块之前需要获得一系列LATCH,所以在某些场景下,数据块不经过BUFFER CACHE直接返回给应用程序效率可能更高一些。
同一时刻,Oracle只允许一个进程修改数据块。如果大量的进程并发读取或修改BUFFER CACHE中相同的数据块,那么势必会引起争用。
在进一步探讨这几个优化点之前,首先需要大致了解一下BUFFER CACHE的内存结构。
BUFFER CACHE的内存结构相当复杂,图8-1为BUFFER CACHE的内存结构图(摘自Richmond Shee, Kirtikumar Deshpande , K Gopalakrishnan的大作《Oracle Wait Interface: A Practical Guide to Performance Diagnostics & Tuning》)。

了解BUFFER CACHE上一些比较重要的知识点:
BUFFER HEADER
HASH CHAIN
HASH BUCKET
HASH LATCH
WORKING SET
BUFFER HEADER指的数据块缓冲块头,BUFFER HEADER的地址位指向真正的数据块缓冲区,如图8-1中的虚线所示。当服务器进程将数据块读取至BUFFER CACHE时,Oracle会根据该数据块的DBA值进行HASH运算,然后根据计算出的HASH值挂载到某一个HASH BUCKET中。同样,Oracle需要在BUFFER CACHE中定位某个数据块是否存在时,也会根据该数据块的HASH值在指定的HASH BUCKET中寻找。不同的数据块经过HASH运算之后可能挂载到同一个HASH BUCKET中(也就是说这些数据块的HASH值相同)。Oracle将同一个HASH BUCKET的不同数据块用一条HASH CHAIN串联起来。由于同一个HASH BUCKET上可能有多个数据块,为了防止HASH CHAIN受到进程并发性访问的破坏,所以Oracle设计了专门的LATCH用于保护HASH CHAIN,该LATCH的名字称之为CACHE BUFFERS CHAINS LATCH。另外,由于BUFFER CACHE是一块公共内存区域,为了防止BUFFER CACHE内存不足,需要按照算法(如TOUCH COUNT算法)定期将数据块通过DBWR进程写至数据文件中,释放内存空间来给其他数据块使用。在BUFFER CACHE中,数据块的替换工作主要由WORKING SET来管理。为了便于快速定位数据库性能原因,Oracle在WORKING SET上设计了很多等待事件,这些等待事件将在接下来的小节中一一展开。
分享到:
评论

相关推荐

    深入解析Oracle.DBA入门进阶与诊断案例

    针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据字典、内存管理、Buffer Cache与Shared Pool原理、重做、回滚与撤销、等待事件、性能诊断与SQL优化等几大Oracle热点主题,本书从基础知识入手...

    oracle9i oracle11g oracle10g 性能调优 基础学习 视频地址

    1z0-033-04 BUFfer cache 12 1z0-033-05 12 1z0-033-02 诊断与调优工具 12 1z0-033-03-changed all 检查点工作机制 12 1z0-033-11(A)(好) SQL优化 SQL优化器的使用 查询计划 计划稳定性的概要 TRACE TKTOP使用 ...

    MySQL优化之缓存优化(续)

    表缓存Cache 与表结构定义缓存Cache 表扫描缓存buffer MyISAM索引缓存buffer 日志缓存 预读机制 延迟表与临时表 1、查询缓存优化 查询缓存不仅将查询语句结构缓存起来,还将查询结果缓存起来。一段时间内,...

    ARM_Linux启动分析.pdf

    创建和设置内部及通用cache("slab_cache",kmem_cache_sizes_init()) 创建uid taskcount SLAB cache("uid_cache",uidcache_init()) 创建文件cache("files_cache",filescache_init()) 创建目录cache(...

    数据库优化设计方案.doc

    SGA包括以下几个部分 : 1、数据块缓冲区(data block buffer cache)是SGA中的一块高速缓存,占整个数据库大小的1%- 2%,用来存储从数据库重读取的数据块(表、索引、簇等),因此采用least recently used (LRU,...

    嵌入式汽车检测装置的设计与实现.pdf

    该处理器有如下特性:内核运行速率可达70MHz ,8kB 的综合指令P数据Cache ,具有内存管理单元MMU ,2kB SRAM 可用于内部Buffer 。芯片内外围设备有:多通道DMA ,智能中断控制器, 存储器控制器包括ROM, Flash ,...

    CISCO 技术大集合

    通过配置静态路由,用户可以人为地指定对某一网络访问时所要经过的路径,在网络结构比较简单,且一般到达某一网络所经过的路径唯一的情况下采用静态路由。 任务 命令 建立静态路由 ip route prefix mask {address | ...

    ORACLE9i_优化设计与系统调整

    §10.7 哪种类型的表设为cache 方式 116 §10.8 数据表和索引分开原则 116 §10.9 是否采用簇和分区 116 §10.10 表和索引的空间预分配 116 §10.11 确定数据库对象存储大小 117 §10.11.1 非簇表的大小计算 117 §...

    Oracle数据库实验操作

    实验138:db_cache命中率和db_cache的细化管理 224 实验139: v$latch的使用 225 实验140:log_buffer的优化 227 实验141:pga的优化 227 不同的存储格式 229 实验142:OMF管理的文件 229 实验143:处理行迁移 230 ...

    java 面试题 总结

    引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...

    超级有影响力霸气的Java面试题大全文档

    引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...

    JAVA上百实例源码以及开源项目

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...

    JAVA上百实例源码以及开源项目源代码

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...

    Oracle9i的init.ora参数中文说明

    默认值 : 派生: SESSIONS 参数的值 (如果正在使用共享服务器体系结构); 否则为 0。 Mts_multiple_listeners: 说明: 指定多个监听程序的地址是分别指定的, 还是用一个 ADDRESS_LIST 字符串指定。如果该值为 TRUE, ...

    入门学习Linux常用必会60个命令实例详解doc/txt

    halt执行时,杀死应用进程,执行sync(将存于buffer中的资料强制写入硬盘中)系统调用,文件系统写操作完成后就会停止内核。若系统的运行级别为0或6,则关闭系统;否则以shutdown指令(加上-h参数)来取代。  ...

Global site tag (gtag.js) - Google Analytics