Chinaunix首页 | 论坛 | 博客
  • 博客访问: 289682
  • 博文数量: 64
  • 博客积分: 1770
  • 博客等级: 上尉
  • 技术积分: 588
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-26 18:19
文章分类

全部博文(64)

文章存档

2019年(1)

2014年(1)

2012年(1)

2011年(8)

2010年(19)

2009年(1)

2008年(1)

2007年(12)

2006年(20)

分类: BSD

2010-05-20 15:31:00

    最近,晚上睡之前总要翻翻床头的<<深入解析Oracle>>一书,有时候真的感觉到Oracle的博大精深,之所以能称的上数据库系统,那么它和我们常见的OS(操作系统)一样,它也具有操作系统的五大‘特性’。比如OS的文件系统、内存、页管理、进程调度、引导等。文件系统方面常见的OS有自己的FS,比如fat32\ntfs\ext2\ext3\ufs等等。Oracle也有自己的文件系统管理,比如RAW设备(裸设备或者块设备)的管理、ASM自动存储的管理。内存管理是一个操作系统必备的模块,Oracle也有自己的内存管理--SGA,系统公共内存区域SGA的管理,也包含有进程物理内存分配、共享池内存区域等等。操作系统有自己的引导程序,系统控制权从bios交换给MBR也有自己的Loader,比如LILB\Gurb.而Oracle也有自己引导程序和初始化文件。
    对比起来,Oracle真的是考虑的很周全了。言归正传吧,最近看到了第六章---Buffer Cache与shared Pool,Oracle为什么快?我个人认为那全是这两个东西起大作用(当然也包括数据空间合理安排以及进程调度的有机整体^_^)。
    什么是Buffer Cache?在Oracle中是读取数据的一块内存区域。要取数据,就从这里拿,要是没有,就载入,载入之前检测能不能装下,如果不能装下,则触发DBWR回写Buffer Cache的脏数据。这个道理好像是图书馆样,我要找本书我发现,图书馆没有,图书馆管理人员去给买,买之前检查书柜能不能放下这套书。但Oracle如何在一大段内存区域中,如何查找有没有我想要的数据呢?用什么算法?二分法?哈希?FIFO?LRU?LFU?请求的数据不在Cache,那么Oracle又是如何去Cache中找剩余空间地址呢?具体有空去Google一番,我也不晓得^_^。明天晚上具体看看,好像是用的LRU检查数据是否存在的。后头有空翻翻<数据结构>。

     在Oracle中Buffer Cache可以放在一起理解,但是在OS管理中,这两个是不一样的概念。buffer和cache都具有改善系统IO吞吐的能力,但是有区别的,提高IO原因不同。
Cache改善系统性能的主要原因是数据访问的局部性。即,通常应用程序在一段时间内操作的数据集的某个有限的部分,通常是很小的一部分。硬件实现的cache通常会只使用一小块(与主存相比)访问速度很快,但相对比较昂贵的存储部件,并放置于距离CPU较近的位置。比如CPU的L1和L2。
buffer改善系统性能的主要原因是减少不必要的状态切换和设备I/O。由于制造工艺等个方面的原因,系统中不同部件的速度往往是不一样的,一次进行批量的操作(例如,预先读取,或者将写数据凑成一个整数之后再写),往往要比到需要时等待这些操作完成要节省时间,并且有效地降低状态切换导致的开销。
还有一个比较显著的区别是,cache通常是硬件或OS提供,用户程序不需要(多数情况下也没有办法)为其分配存储的机制,通常它在使用者,如用户程序看来是透明的,它属于提供cache的一方而不是其使用者;而buffer往往是由用户程序知道并且与OS共享(换言之,用户程序需要分配一块内存,并告诉OS这块内存将要用于某种操作),或由OS分配,并在主机和外设之间共享(例如网卡的DMA buffer),在使用者看来它通常不是透明的,这些内存往往属于控制内存的程序,如用户程序,或OS,而不是向其传递数据的OS,或硬件。

     不过,这个区别主要是传统意义上的cache。最近几年引入的一些新概念,特别是Internet cache并不能用这种方法来区分。我认为最关键的区别其实在于,buffer主要作用是在于减少实际的I/O操作次数,即,将多次操作尽量合并成一次的成批操作,通常其中的数据在操作完成之后,buffer不会被继续使用;而cache的主要作用在于更好地利用局部性原理,减少不必要的I/O,避免代价昂贵(例如,速度很慢)的I/O操作。

                                                              —— SK
阅读(1755) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~