分类: Oracle

2012-06-22 17:36:54

 

一、Buffer cache作用:

Buffer cache是Oracle建立的数据文件的缓冲区。Oracle中所有Select、DML、DDL等命令,凡是需要所有对数据文件进行读、写操作的,基本上都是对Buffer cache进行读、写操作。如果需要读或写的块没有包括在Buffer cache,Oracle会先把它读进Buffer cache中,再进行读、写。

通常,如果要读的块已经在Buffer cache中了,Oracle将不必再访问磁盘数据文件,这个读操作被称为逻辑读。也就是没有真正读写磁盘的意思。

如果要读的块不在Buffer cache,那么Oracle必须到磁盘上将其调入Buffer cache中,这个操作被称为物理读。再将块物理读进Buffer cache后,Oracle再从Buffer cache中逻辑读取需要的数据。

二、Buffer cache大小的设置:

在Oracle 10g中,非常简单,我们不必设置Buffer cache的大小,只需设置一个sga_target参数,SGA目标值,10g将会根据你的数据库的情况,自动调整共享池、Buffer cache池等等所有SGA中内存组件的大小。db_cache_size参数是设置Buffer cache大小的,和共享池一样,在Oracle 10g中,它也只是个下限值。

Buffer cache是磁盘数据文件的缓存,数据文件的基本读写单位是Oracle数据块,最常的块大小是4KB、8KB、16KB等等,在我们的实例库,数据库块大小是8KB。也就是说Oracle一次读写将从数据文件中读写8KB字节。Buffer cache既然是数据文件的直接缓存,Buffer cache的内存块大小当然也是8KB了。

Oracle从9i之后开始支持多重块大小,你在创建数据库时设置的块大小被称为标准块大小,除了标准块大小外,我们还可以使用多个非标准的块大小。就像我们的实例库,标准块大小是8KB,我们还可以使用2KB、4KB、16KB和32KB的非标准块大小。

那么,数据库有必要使用多种块大小吗?绝对有必要。对于全表扫描操作,越大的块效率越高。因为全表扫描要访问表所有的行,所有块。块越大,相同大小的表所占用的块就越少。而每读一个块,Oracle都算作一次物理读,表块越少,访问全表所需的物理读就越少。因此,全表扫描操作适合大块。但对于索引扫描,索引扫描是一种随机的形式访问表中的行。随机访问下小块效率更好。因为你每访问一个块,Oracle都要将块读进Buffer cahce,这样做的目的是希望你再次访问块中其他行时,不必再从磁盘读取(从磁盘中读是物理读),而直接从内存中读取(从内存中读是逻辑读)。随机访问很可能访问完块中一行后,就不再访问此块了。因此是随机本身就是无规律的访问。因为小块占用的内存少,随机访问下,将小块读入内存比将大块读入内存,能更节省内存空间,提高内存的使用效率。因此,随机访问下,小块的效率比大块要好一些。还有,大块的争用可能性更高,而小块争用的可能性低。因为大块中行比较多,而小块中行少。这就好像一个团队有100个人,另一个团队有10个人,当然人越多越容易发生矛盾。总之,大块有大块的好低,小块有小块的好处,如果数据库只能使用一种块大小,这显然是不太合理的。

我们在Oracle体系结构部分就了解了如何配置使用非标准块大小,其要点有如下两点:

·只有配置了相应非标准块大小的Buffer cache池后,才能使用非标准块大小

·非标准块大小是在表空间层指定的。一旦在表空间层确定了表空间所使用的块大小,以后被创建在此表空间中的所有表、索引等等段对象,都将按表空间块大小为准。

有一定需要补充的是,用来配置非标准块大小Buffer cache的初始化参数db_16k_cache_size、db_2k_cache_size、db_32k_cache_size、db_4k_cache_size、db_8k_cache_size,它们并不在Oracle自动内存管理的范筹内,Oracle并不会自动的调整他们的大小。你将这些参数设置为多大,只要SGA内还有空闲内存,Oracle将会立即分配相应大小的内存空间。

10 OCP知识点讲解 之 什么是Buffer Cache?的更多相关文章

  1. 09 OCP知识点讲解 之 LRU链与脏LRU链

    OCP知识点讲解 之 LRU链与脏LRU链 分类: Oracle 2012-06-30 10:49:26   一.LRU链: 任何缓存的大小都是有限制的,并且总不如被缓存的数据多.就像Buffer c ...

  2. OCP知识点讲解 之 检查点队列与增量检查点

    原创 http://blog.chinaunix.net/uid-26762723-id-3271558.html 检查点的主要目的是以对数据库的日常操作影响最小的方式刷新脏块.脏块不断的产生,如何将 ...

  3. OCP知识点讲解 之 队列、资源与锁:RHCA|OCM|CCIE RedHat大中华地区前50位RHCA系统架构师:叶绍琛

      一.队列与共享资源 共享资源可以被多个会话.进程同时访问,因此它的访问需要保护.Oracle中,除了PGA,所有的东西(包括内存.磁盘.CPU.表.索引.事务等等,种类太多,一概用东西两字来代表) ...

  4. javascript数组的知识点讲解

    javascript数组的知识点讲解 阅读目录 数组的基本方法如下 concat() join() pop() push() reverse() shift() sort() splice() toS ...

  5. 小程序基础知识点讲解-WXML + WXSS + JS,生命周期

    小程序基础 小程序官方地址,小程序开发者工具,点击此处下载.在微信小程序中有一个配置文件project.config.json,此文件可以让开发者在不同设备中进行开发. 微信小程序共支持5种文件,wx ...

  6. Android开发工程师文集-Android知识点讲解

    前言 大家好,给大家带来Android开发工程师文集-Android知识点讲解的概述,希望你们喜欢 WebView讲解 一般通过Intent调用系统的浏览器: Uri uri = Uri.parse( ...

  7. 相克军_Oracle体系_随堂笔记005-Database buffer cache

    本章主要阐述SGA中的Database buffer cache. Buffer cache { 1.pin (读写瞬间的状态) 2.clean 3.dirty 4.unused } --Databa ...

  8. Buffer Cache

    Buffer Cache Buffer Cache是SGA区中专门用于存放从数据文件中读取的的数据块拷贝的区域.Oracle进程如果发现需要访问的数据块已经在buffer cache中,就直接读写内存 ...

  9. Oracle优化 -- 关于Database Buffer Cache相关参数DB_CACHE_SIZE的优化设置

    select size_for_estimate, buffers_for_estimate ,ESTD_PHYSICAL_READ_factor,ESTD_PHYSICAL_READS from v ...

随机推荐

  1. git自动更新网站代码

    1.实现过程在linux上安装git服务.创建源版本库.从源版本库克隆得到网站目录,然后利用git中的hooks机制,在git push推送代码到源版本库的时候,触发编写的shell脚本,更新网站目录 ...

  2. ECMAScript5提供了9个新数组方法:遍历、映射、过滤、检测、简化、和搜索数组

    大多数方法的第一个参数接收一个函数,并且对数组的每个元素调用一次该函数.如果是稀疏数组,对不存在的元素不调用传递的函数.在大多数情况下,调用提供的函数使用三个参数:数组元素,元素的索引,数组本身,通常 ...

  3. centos jdk8 install

    0. 装了好多遍jdk 以前一直是 vi /etc/profile文件 追加 环境变量 ,仔细一看 profile文件提示 尽量不要修改!!! so... 1. 下载jdk8.tar.gz 2. 卸载 ...

  4. web前端开发需要具备的技能

    web前端开发需要具备以下7种技能: 1.页面标记(HTML) HTML页面固定,标签不多,相对来说学起来比较容易.编写HTML代码需遵循HTML代码规范(http://www.cnblogs.com ...

  5. KLEE错误汇报一:One phenomenon after the execution using klee

    https://github.com/klee/klee/issues/649#issuecomment-300424204 Hi, all,      If you write test.c wit ...

  6. deb文件怎么安装

    deb 是 ubuntu .debian 的格式.rpm 是 redhat .fedora .suse 的格式.deb是debian发行版的软件包ubuntu是基于debian 发行的 所有可以用.d ...

  7. spring文章

    单元测试 spring +Junit 完美组合:https://blog.csdn.net/shan9liang/article/details/40452469#

  8. linux中进入mysql时报错Access denied for user 'root'@'localhost' (using password: YES)解决方案

    之前在linux中装完mysql后直接在命令行窗口输入mysql就会进入数据库了,但是今天输入mysql命令后直接报错,如下图: 之后输入:mysql -uroot -p 提示输入密码:***** 还 ...

  9. 大数因式分解 Pollard_rho 算法详解

    给你一个大数n,将它分解它的质因子的乘积的形式. 首先需要了解Miller_rabin判断一个数是否是素数 大数分解最简单的思想也是试除法,这里就不再展示代码了,就是从2到sqrt(n),一个一个的试 ...

  10. WC2018 滚粗记

    虽然又考炸了但还是总结一下.. $day0$:没有什么很重要的事.. $day1$:除了听(dong)课(mian)以外没有什么很重要的事.. $day2$:除了听(dong)课(mian)以外没有什 ...