OCP知识点讲解 之 什么是Buffer Cache?
来源:互联网 发布:sql server 图标 编辑:程序博客网 时间:2024/04/29 06:23
一、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将会立即分配相应大小的内存空间。
-(未完待续)
本文出自 “叶绍琛” 博客,请务必保留此出处http://yeshaochen.blog.51cto.com/3155801/905992
- OCP知识点讲解 之 什么是Buffer Cache?
- OCP知识点讲解 之 什么是Buffer Cache?
- OCP知识点讲解 之 队列、资源与锁
- OCP知识点讲解 之 检查点队列与增量检查点
- BUFFER CACHE之二:管理buffer cache
- I/O之内核buffer-“buffer cache”
- IO之内核buffer----"buffer cache"
- IO之内核buffer----"buffer cache"
- IO之内核buffer----"buffer cache"
- I/O之内核buffer-“buffer cache”
- OCP考题解析_043:buffer cache和命中率
- buffer cache深度分析之buffer cache的优化
- OCP知识点讲解 之 检查点队列与增量检查点(次)
- OCP知识点讲解 之 LRU链与脏LRU链(主)
- 什么是buffer和cache,他们有什么区别?
- 唯快不破:I/O之内核buffer-“buffer cache”
- buffer cache深度分析之内部管理机制
- Oracle 学习之--Buffer Cache深入解析
- 设置NSZombieEnabled和MallocStackLogging
- 删除"-"开头的文件
- ubuntu14.04 安装gitlab
- 浏览器内核引擎开发工作的主要关注点
- HashMap原理
- OCP知识点讲解 之 什么是Buffer Cache?
- POJ 1276 Cash Machine(多重背包)
- java 遍历树结点 同时保留所有从根到叶子结点的路径
- 数据结构 第四章 字符串和多维数组
- SWFUpload提示非法上传
- 迅雷人人影视被点名 你们在全球盗版市场火了
- 啊额过生日过地摊货的后台
- 不错的博客
- seo常用命令整理