BUFFER CACHE作为数据块缓冲区,不是一块简单的内存区域。在这一块内存区域上,Oracle设计了很多LATCH来保护BUFFER CACHE的结构不受并发性访问的破坏,当LATCH数量不够用或并发访问模式不兼容时,将会引起LATCH的争用,这就是我们经常看到的LATCH FREE等待事件。
从BUFFER CACHE中读取数据块一般需要花费100ns左右,假设每次只读取一个数据块,也就是每秒可以读取10 000 000个数据块。而从磁盘读取数据块一般需要花费10ms左右(包括寻址定位时间和传输时间),也就是说每秒只能读取100个数据块。从这个角度来讲,数据块从内存中读取的效率要比从磁盘中读取高100 000倍,但并不是说数据块从BUFFER CACHE中读取一定比从磁盘中读取好,即BUFFER CACHE的命中率并不是越高越好。BUFFER CACHE作为Oracle 数据块的缓冲区,不同的系统类型和业务模块对其命中率的敏感程度会有所不同。比如OLTP系统并发高、事务小、响应快、SQL执行时读取的数据块数量较少,因此,在此系统上比较高的BUFFER CACHE命中率不仅能加快数据块的读取时间,而且能有效缓解存储的I/O压力。而OLAP系统并发低,事务大,SQL执行时读取的数据块数量较多, 所以在这类系统中,BUFFER CACHE命中率的高低却不是特别重要,而且在此类系统中,将所有的数据块都存储在BUFFER CACHE中也不太现实。
客户端发起读取业务数据的需求,数据库在接受到这个请求之后,首先会在BUFFER CACHE中查看所需的数据块是否存在,如果存在,则从BUFFER CACHE中读取数据块内容返回给业务程序。如果不存在,则由服务器进程从数据文件中将数据块读至BUFFER CACHE中,然后再返回给业务程序。从以上简单的流程中可以引申出以下几个优化点:
1、当数据块在BUFFER CACHE中不存在时,业务程序只能从数据文件中物理地读取数据块(PHYSICAL READS),因此会消耗比较多的I/O资源。当存储I/O压力比较大时,可以增加BUFFER CACHE,加大数据块驻留在BUFFER CACHE中的概率,从而缓减系统I/O压力。
2、业务程序读取BUFFER CACHE中的数据块之前需要获得一系列LATCH,所以在某些场景下,数据块不经过BUFFER CACHE直接返回给应用程序效率可能更高一些。
3、同一时刻,Oracle只允许一个进程修改数据块。如果大量的进程并发读取或修改BUFFER CACHE中相同的数据块,那么势必会引起争用。
分享到:
相关推荐
buffer cache深度分析.zip buffer cache深度分析.zip buffer cache深度分析.zip
深入Buffer Cache 原理
oracle性能调优之buffer cache
Oracle Buffer和Cache的区别 buffer与cache操作的对象就不一样。 buffer(缓冲)是为了提高内存和硬盘(或其他I/0设备)之间的数据交换的速度而设计的。 cache(缓存)是为了提高cpu和内存之间的数据交换速度而设计...
本文首先详细介绍了oracle中buffer cache的概念以及所包含的内存结构。然后结合各个后台进程(包括DBWRn、CKPT、LGWR等)深入介绍了oracle对于buffer cache的管理机制,并详细解释了oracle为什么会采用现在的管理...
深入学习Buffer cache,oracle 10g 内存结构
Linux的产生与发展,更多的应用与服务器,那么对于Linux的各个管理机制要非常清 楚,一个完整的Linux系统主要有存储管理,内存管理,文件系统和进程管理等几...本文将为大家介绍Linux内存中Swap和Buffer Cache机制。
buffer cache深度分析
buffer cache 深度解析,buffer cache 深度解析,
我们通过free命令查看机器空闲内存时,会发现free的值很...这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。
Oracle 中 Buffer Cache 的研究.pdf
Performance Analysis of the Linux Buffer Cache While Running an Oracle OLTP Workload
Linux操作系统中内存buffer和cache的区别.docx
Linux操作系统中内存buffer和cache的区别.pdf
在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得...
对Mysql(索引结构/事务/锁/MVCC/BufferPool/优化)总结,包括重要知识点与面试点,xmind源文件
本文根据作者的一点经验,讨论了Mysql服务器优化中两个非常重要的参数,分别是table_cache,key_buffer_size。 table_cache指示表高速缓存的大小。当Mysql访问一个表时,如果在Mysql表缓冲区中还有空间,那么这个表...
C语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC...