10 OCP知识点讲解 之 什么是Buffer Cache?
分类: 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?的更多相关文章
- 09 OCP知识点讲解 之 LRU链与脏LRU链
OCP知识点讲解 之 LRU链与脏LRU链 分类: Oracle 2012-06-30 10:49:26 一.LRU链: 任何缓存的大小都是有限制的,并且总不如被缓存的数据多.就像Buffer c ...
- OCP知识点讲解 之 检查点队列与增量检查点
原创 http://blog.chinaunix.net/uid-26762723-id-3271558.html 检查点的主要目的是以对数据库的日常操作影响最小的方式刷新脏块.脏块不断的产生,如何将 ...
- OCP知识点讲解 之 队列、资源与锁:RHCA|OCM|CCIE RedHat大中华地区前50位RHCA系统架构师:叶绍琛
一.队列与共享资源 共享资源可以被多个会话.进程同时访问,因此它的访问需要保护.Oracle中,除了PGA,所有的东西(包括内存.磁盘.CPU.表.索引.事务等等,种类太多,一概用东西两字来代表) ...
- javascript数组的知识点讲解
javascript数组的知识点讲解 阅读目录 数组的基本方法如下 concat() join() pop() push() reverse() shift() sort() splice() toS ...
- 小程序基础知识点讲解-WXML + WXSS + JS,生命周期
小程序基础 小程序官方地址,小程序开发者工具,点击此处下载.在微信小程序中有一个配置文件project.config.json,此文件可以让开发者在不同设备中进行开发. 微信小程序共支持5种文件,wx ...
- Android开发工程师文集-Android知识点讲解
前言 大家好,给大家带来Android开发工程师文集-Android知识点讲解的概述,希望你们喜欢 WebView讲解 一般通过Intent调用系统的浏览器: Uri uri = Uri.parse( ...
- 相克军_Oracle体系_随堂笔记005-Database buffer cache
本章主要阐述SGA中的Database buffer cache. Buffer cache { 1.pin (读写瞬间的状态) 2.clean 3.dirty 4.unused } --Databa ...
- Buffer Cache
Buffer Cache Buffer Cache是SGA区中专门用于存放从数据文件中读取的的数据块拷贝的区域.Oracle进程如果发现需要访问的数据块已经在buffer cache中,就直接读写内存 ...
- Oracle优化 -- 关于Database Buffer Cache相关参数DB_CACHE_SIZE的优化设置
select size_for_estimate, buffers_for_estimate ,ESTD_PHYSICAL_READ_factor,ESTD_PHYSICAL_READS from v ...
随机推荐
- 前端面试经典题目合集(HTML+CSS)一
1.说说你对HTML语义化的理解? (1)什么是HTML语义化? 根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开发者阅读和写出更优雅的代码的同时让浏览器的爬虫和机器很好地解析. ( ...
- Java Struts2 (三)
一.国际化概念(了解) 1.什么是国际化 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 2.什么需要国际 ...
- 形象解释C#、Net、Asp.net
下文是写给计算机小白的,尽量用形象的语言来让她们明白这些比较抽象的概念. -------------------------------------- C#: 你和美国人说话要说英语 和中国人说话说汉 ...
- atoi、itoa,strcpy,strcmp,memcpy等实现
原文:http://www.cnblogs.com/lpshou/archive/2012/06/05/2536799.html 1.memcpy.memmove.memset源码 link:http ...
- 【 Oral English】Pronunciation
一.英语音素 1.元音(元首,主要部分) 特点: a.无阻碍,拖很长认可辨别 b.声音响亮 2.辅音(重点,刻意练习) 特点: a.刻意阻碍 b.短促 二.汉语元素 1.音节:最小组成成分,而非元/辅 ...
- 第三次Scrum
1.小组成员 周 斌舒 溢许嘉荣唐 浩黄欣欣廖帅元刘洋江薛思汝 2.小组第三次冲刺完成情况 github仓库小组的第三次任务是完成体系结构环境图和系统原型图.在体系结构设计中,分为上级系统----把目 ...
- qwewq
- WebRequest的get及post提交
static string get_html(string url) { var request = WebRequest.Create(url); var response = request.Ge ...
- 配置spark集群
配置spark集群 1.配置spark-env.sh [/soft/spark/conf/spark-env.sh] ... export JAVA_HOME=/soft/jdk 2.配置slaves ...
- 《C++ Primer Plus》读书笔记之二—复合类型
二.第四章 复合类型 1.C-风格字符串:C-风格字符串具有一种特殊的性质:以空字符结尾,空字符被写成\0,其ASC||编码为0,用来标记字符串的结尾.例如: char dog[5]={'b','e ...