`
ordinary
  • 浏览: 80130 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle 学习1(buffer cache )

阅读更多

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } A:link { so-language: zxx } -->

buffer cache 概述

       buffer cache oracle 建立的数据文件缓存。oracle中的所以select DMLDDL等命令,凡是对数据文件的读写,基本上都要操作buffer cachebuffer cache的大小主要是通过db_cache_size设置。

buffer cache所能提供的功能主要包括:

   1) 通过缓存数据块,从而减少I/O

   2) 通过构造CR块,从而提供读一致性功能。

   3) 通过提供各种locklatch机制,从而提供多个进程并发访问同一个数据块的功能。

buffer cache 工作原理

1buffer cache 的内存组织形式

     oracle文件组织是以块为单位,因此buffer cache对应的buffer和内存中的块大小相同,只是内存中叫块,在buffer cache中叫buffer

2HASH

假设buffer cache的大小为800M,块的大小为8k,这样buffer cache就能存储 800*1024/8=102400个文件。buffer cahe的目的是提供逻辑读,当用户执行查询的时候,首先会在buffer cache中进行查找,当找不到时,先会进行物理读,把读取的结果放入buffer cache,接着从buffer cache返回结果给用户。为了实现高效的查询,oracle采用了hash算法来查找对象。oracle以每个块的文件号,块号和类型来做hash,根据hash可以得到对象的内存地址。

 

3LRU

        如上所述,假设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算法。链表分为两端,分别为热端和冷端。每个块根据访问频率在链上排序

4LRUW

       在oracle中,buffer cache不但缓存了进程读过的块,当用户对块修改时,先在buffer cache中修改,等待时机写入硬盘。Buffer cache中被修改的块叫脏块。当脏块谢入硬盘时,这是块就不脏了。假如LRU链上有3000个块,脏块数目为2000个。这样每次查找自由块时,会浪费大量的查找时间。为了解决这个问题,oracle创建了LRUW,在脏块数达到一定数目时,把LRU链上的脏块移到LRUW块什么时候被移进LRUW链?当块变脏时,块并不立即移到LRUW中,块还会继续呆在LRU中,当下次服务器进程搜索自由块是,会将发现的所以脏块一起移到LRUW为什么不在块一变脏时,立即将块移到LRUW?如果要这样做,适必增加修改块时,需要完成的工作,而且在链表间转移块,也必需要先获得保护链表额锁。这样以来,适必造成锁竞争。不如修改块后,暂时不对所处的链修改,等到以后搜索自由块是,把发现的脏块一起进行移动。

 


分享到:
评论

相关推荐

    oracle性能调优之buffer cache

    * 查看 Buffer Cache 的命中率,使用公式 1 - (physical reads cache / consistent gets from cache + db block gets from cache)计算。 * 在多 Buffer Pool 情况下,分别统计不同 Buffer Pool 的命中率。 * 查看...

    Oracle Buffer和Cache的区别

    Oracle数据库中的Buffer Cache和一般的Cache概念虽然相似,但它们在具体应用中有着不同的侧重点。首先,我们需要理解Buffer Cache的基本概念。在Oracle数据库系统中,Buffer Cache是内存结构的一部分,它存储了最近...

    oracle_buffer_cache深入分析

    ### Oracle Buffer Cache 深入分析 #### 一、Buffer Cache 概念及重要性 Oracle 数据库的核心功能之一就是高效地管理和访问数据。而为了提高数据访问速度,Oracle 引入了一个重要的内存组件——Buffer Cache(数据...

    Oracle 中 Buffer Cache 的研究.pdf

    1. 空闲缓存块(Free Buffer):在Buffer Cache初始化或刷新后,未被使用的缓存块称为空闲缓存块。 2. 已使用缓存块(Used Buffer):已经存储了从磁盘读取的数据或等待写入磁盘的数据的缓存块。 3. 一致性读缓存块...

    深入Buffer Cache 原理

    Buffer Cache作为System Global Area (SGA) 的一部分,在Oracle数据库中扮演着极其重要的角色。它的主要任务是缓存数据块以减少磁盘I/O操作,提高数据访问速度。通过优化Buffer Cache的管理机制,可以显著提升数据库...

    Oracle buffer cache

    Oracle Buffer Cache 深度解析 Oracle Buffer Cache 是 Oracle 数据库中的一种内存缓存机制,用于提高数据库的性能。Buffer Cache 通过将频繁访问的数据块缓存在内存中,减少了磁盘 I/O 操作,从而提高了数据库的...

    Performance Analysis of the Linux Buffer Cache While Running an Oracle OLTP Workload

    本文档提供了一项针对 Linux 缓冲区缓存(Buffer Cache)在运行 Oracle OLTP(在线事务处理)工作负载时的性能分析研究。通过一系列测试收集了缓冲区缓存命中率及测试运行时间数据,为理解该系统复杂操作提供了宝贵...

    Oracle数据库中的Cache对象

    1. **缓冲区缓存(Buffer Cache)**:这是Oracle数据库中最主要的缓存机制,用于存储最近访问过的数据块。当数据被请求时,如果在缓存中找到,就直接从内存中读取,避免了慢速的磁盘I/O。缓冲区缓存的大小可以通过...

    Oracle 数据缓冲区调优精选

    在Oracle数据库系统中,数据缓冲区(Buffer Cache)是用来存储数据文件中的数据块的内存区域,通过缓存数据,避免频繁地进行磁盘I/O操作,从而提高数据库的性能。本课件“Oracle 数据缓冲区调优精选”由CUUG网络公开...

    老相Oracle DBA学习笔记

    Oracle数据库管理员(DBA)学习笔记详细记录了Oracle数据库中SQL语句执行的过程,包括用户连接、服务器进程分配、PGA空间、SQL解析、执行计划缓存、shared pool、buffer cache、逻辑IO和物理IO、重做日志等关键知识...

    oracle学习(内存参数设置)

    Oracle 学习(内存参数设置) oracle学习(内存参数设置)是指在Oracle数据库中设置内存参数来优化数据库性能的过程。Oracle数据库的内存结构主要由SGA(System Global Area)和PGA(Private Global Area)组成。...

    oracle性能调优

    本文主要关注Oracle的Shared Pool和Buffer Cache的调优。 首先,我们来看Shared Pool的调优。Shared Pool是Oracle SGA(System Global Area)的一部分,主要用于存储SQL语句、PL/SQL代码、数据字典信息等。其优化对...

    Oracle原理学习笔记.docx

    ### Oracle原理学习笔记知识点概述 #### 一、Oracle的工作机制及体系结构 ##### 实例概念 - **定义**: Oracle在运行时会在内存中开辟一个区域,即系统全局区(SGA),用于缓存从磁盘读取的数据。同时,还需要一些...

    Oracle_IO.rar_oracle

    Oracle I/O的基础在于操作系统级别的I/O操作,但Oracle通过其自身的内存结构和管理机制,如Buffer Cache和Redo Log Buffer,提供了更为高效的数据访问路径。Buffer Cache是Oracle用于缓存数据块的主要机制,它减少了...

    oracle RMAN 备份恢复总结

    Oracle Recovery Manager(RMAN)是Oracle数据库管理系统中的一个重要组件,专为数据库的备份、恢复和维护设计。RMAN 自从Oracle 8版本开始引入,并在后续版本中不断加强和完善,尤其在Oracle 9i中展现出更为强大的...

    oracle11g体系架构学习文档

    2. 数据库缓冲区缓存(Database Buffer Cache):它负责从磁盘读入数据文件的数据到内存,以便所有用户共享。数据缓冲区中包含的数据块如果被修改,将由DBWR后台进程写回磁盘。数据缓冲区的大小直接影响数据库的读取...

    Oracle服务进程如何处理用户进程的请求.doc

    Oracle数据库通常将数据读入内存中的DB Buffer Cache,以便于快速访问。具体流程如下: - **数据已存在于DB Buffer Cache**:如果请求的数据已经在DB Buffer Cache中,并且是有效的,那么服务器进程可以直接获取...

    ORACLE 9i 慢查询分析

    此外,还可以利用Oracle的自动工作区内存管理(Automatic Workarea Management,AWR)报告来获取关于Buffer Cache和PGA(Program Global Area)的建议,以便更科学地分配内存资源。 通过这些调整,期望能够显著降低...

Global site tag (gtag.js) - Google Analytics