<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
A:link { so-language: zxx }
-->
buffer
cache 概述
buffer
cache 是oracle
建立的数据文件缓存。oracle中的所以select
,DML,DDL等命令,凡是对数据文件的读写,基本上都要操作buffer
cache。buffer
cache的大小主要是通过db_cache_size设置。
buffer
cache所能提供的功能主要包括:
1)
通过缓存数据块,从而减少I/O。
2)
通过构造CR块,从而提供读一致性功能。
3)
通过提供各种lock、latch机制,从而提供多个进程并发访问同一个数据块的功能。
buffer
cache 工作原理
1、buffer
cache 的内存组织形式
oracle文件组织是以块为单位,因此buffer
cache对应的buffer和内存中的块大小相同,只是内存中叫块,在buffer
cache中叫buffer。
2、HASH
假设buffer
cache的大小为800M,块的大小为8k,这样buffer
cache就能存储
800*1024/8=102400个文件。buffer
cahe的目的是提供逻辑读,当用户执行查询的时候,首先会在buffer
cache中进行查找,当找不到时,先会进行物理读,把读取的结果放入buffer
cache,接着从buffer
cache返回结果给用户。为了实现高效的查询,oracle采用了hash算法来查找对象。oracle以每个块的文件号,块号和类型来做hash,根据hash可以得到对象的内存地址。
3、LRU
如上所述,假设buffer
cache的大小为800M,块的大小为8k,这样buffer
cache就能存储
800*1024/8=102400个文件,当系统比较繁忙时,buffer
cache中存储了十万多个文件,当用户查找时,在buffer
cache中没查找到数据,通过物理查找,查询到数据A,这时,需要在buffer
cache中创建一个块,这样的块叫free
块,但buffer
cache中没有free
块时,oracle是怎样剔除buffer
cache 中的块呢?Oracle选择了LRU算法,最近最少使用算法,就是优先试用最近最少试用的块。oracle中另外建立了一套LRU链表,依照buffer被访问的频率排序,如果oracle需要free
buffer,就从LRU中找。LRU链的算法是oracle改进的LRU算法。链表分为两端,分别为热端和冷端。每个块根据访问频率在链上排序
4、LRUW
在oracle中,buffer
cache不但缓存了进程读过的块,当用户对块修改时,先在buffer
cache中修改,等待时机写入硬盘。Buffer
cache中被修改的块叫脏块。当脏块谢入硬盘时,这是块就不脏了。假如LRU链上有3000个块,脏块数目为2000个。这样每次查找自由块时,会浪费大量的查找时间。为了解决这个问题,oracle创建了LRUW,在脏块数达到一定数目时,把LRU链上的脏块移到LRUW。块什么时候被移进LRUW链?当块变脏时,块并不立即移到LRUW中,块还会继续呆在LRU中,当下次服务器进程搜索自由块是,会将发现的所以脏块一起移到LRUW。为什么不在块一变脏时,立即将块移到LRUW?如果要这样做,适必增加修改块时,需要完成的工作,而且在链表间转移块,也必需要先获得保护链表额锁。这样以来,适必造成锁竞争。不如修改块后,暂时不对所处的链修改,等到以后搜索自由块是,把发现的脏块一起进行移动。
分享到:
相关推荐
* 查看 Buffer Cache 的命中率,使用公式 1 - (physical reads cache / consistent gets from cache + db block gets from cache)计算。 * 在多 Buffer Pool 情况下,分别统计不同 Buffer Pool 的命中率。 * 查看...
Oracle数据库中的Buffer Cache和一般的Cache概念虽然相似,但它们在具体应用中有着不同的侧重点。首先,我们需要理解Buffer Cache的基本概念。在Oracle数据库系统中,Buffer Cache是内存结构的一部分,它存储了最近...
### Oracle Buffer Cache 深入分析 #### 一、Buffer Cache 概念及重要性 Oracle 数据库的核心功能之一就是高效地管理和访问数据。而为了提高数据访问速度,Oracle 引入了一个重要的内存组件——Buffer Cache(数据...
1. 空闲缓存块(Free Buffer):在Buffer Cache初始化或刷新后,未被使用的缓存块称为空闲缓存块。 2. 已使用缓存块(Used Buffer):已经存储了从磁盘读取的数据或等待写入磁盘的数据的缓存块。 3. 一致性读缓存块...
Buffer Cache作为System Global Area (SGA) 的一部分,在Oracle数据库中扮演着极其重要的角色。它的主要任务是缓存数据块以减少磁盘I/O操作,提高数据访问速度。通过优化Buffer Cache的管理机制,可以显著提升数据库...
Oracle Buffer Cache 深度解析 Oracle Buffer Cache 是 Oracle 数据库中的一种内存缓存机制,用于提高数据库的性能。Buffer Cache 通过将频繁访问的数据块缓存在内存中,减少了磁盘 I/O 操作,从而提高了数据库的...
本文档提供了一项针对 Linux 缓冲区缓存(Buffer Cache)在运行 Oracle OLTP(在线事务处理)工作负载时的性能分析研究。通过一系列测试收集了缓冲区缓存命中率及测试运行时间数据,为理解该系统复杂操作提供了宝贵...
1. **缓冲区缓存(Buffer Cache)**:这是Oracle数据库中最主要的缓存机制,用于存储最近访问过的数据块。当数据被请求时,如果在缓存中找到,就直接从内存中读取,避免了慢速的磁盘I/O。缓冲区缓存的大小可以通过...
在Oracle数据库系统中,数据缓冲区(Buffer Cache)是用来存储数据文件中的数据块的内存区域,通过缓存数据,避免频繁地进行磁盘I/O操作,从而提高数据库的性能。本课件“Oracle 数据缓冲区调优精选”由CUUG网络公开...
Oracle数据库管理员(DBA)学习笔记详细记录了Oracle数据库中SQL语句执行的过程,包括用户连接、服务器进程分配、PGA空间、SQL解析、执行计划缓存、shared pool、buffer cache、逻辑IO和物理IO、重做日志等关键知识...
Oracle 学习(内存参数设置) oracle学习(内存参数设置)是指在Oracle数据库中设置内存参数来优化数据库性能的过程。Oracle数据库的内存结构主要由SGA(System Global Area)和PGA(Private Global Area)组成。...
本文主要关注Oracle的Shared Pool和Buffer Cache的调优。 首先,我们来看Shared Pool的调优。Shared Pool是Oracle SGA(System Global Area)的一部分,主要用于存储SQL语句、PL/SQL代码、数据字典信息等。其优化对...
### Oracle原理学习笔记知识点概述 #### 一、Oracle的工作机制及体系结构 ##### 实例概念 - **定义**: Oracle在运行时会在内存中开辟一个区域,即系统全局区(SGA),用于缓存从磁盘读取的数据。同时,还需要一些...
Oracle I/O的基础在于操作系统级别的I/O操作,但Oracle通过其自身的内存结构和管理机制,如Buffer Cache和Redo Log Buffer,提供了更为高效的数据访问路径。Buffer Cache是Oracle用于缓存数据块的主要机制,它减少了...
Oracle Recovery Manager(RMAN)是Oracle数据库管理系统中的一个重要组件,专为数据库的备份、恢复和维护设计。RMAN 自从Oracle 8版本开始引入,并在后续版本中不断加强和完善,尤其在Oracle 9i中展现出更为强大的...
2. 数据库缓冲区缓存(Database Buffer Cache):它负责从磁盘读入数据文件的数据到内存,以便所有用户共享。数据缓冲区中包含的数据块如果被修改,将由DBWR后台进程写回磁盘。数据缓冲区的大小直接影响数据库的读取...
Oracle数据库通常将数据读入内存中的DB Buffer Cache,以便于快速访问。具体流程如下: - **数据已存在于DB Buffer Cache**:如果请求的数据已经在DB Buffer Cache中,并且是有效的,那么服务器进程可以直接获取...
此外,还可以利用Oracle的自动工作区内存管理(Automatic Workarea Management,AWR)报告来获取关于Buffer Cache和PGA(Program Global Area)的建议,以便更科学地分配内存资源。 通过这些调整,期望能够显著降低...