oracle buffer-cache深入分析笔记.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
oracle buffer-cache深入分析笔记

Oracle buffer cache的概念 用最简单的语言来描述oracle数据库的本质,其实就是能够用磁盘上的一堆文件来存储数据,并提供了各种各样的手段对这些数据进行管理。 作为管理数据的最基本要求就是能够保存和读取磁盘上的文件中的数据。众所周知,读取磁盘的速度相对来说是非常慢的,而内存相对速度则要快的多。 因此为了能够加快处理数据的速度,oracle必须将读取过的数据缓存在内存里。而oracle对这些缓存在内存里的数据起了个名字:数据高速缓存区(db buffer cache),通常就叫做buffer cache。 按照oracle官方的说法,buffer cache就是一块含有许多数据块的内存区域,而这些数据块主要都是数据文件里的数据块内容的拷贝。 通过初始化参数:buffer_cache_size来指定buffer cache的大小。oracle实例一旦启动,该区域大小就被分配好了。 数据库的本质是高效检索数据 LOB对象:在这个对象中可以存储大的文件 将所有文件保存在数据库里,导入容易,导出难,与将这些文件放在系统中相比,不但提供了文件的保密而且提供了额外的检索功能,当然存储在系统中的性能是最高的 姓名 日期 大小 简要 文件 Export原理是将用户下的定义信息导出,再将表导出 Import是先生成对象,在导入数据 Sqlloader将文件变成文本,用sqlloader导入,适合异构数据的导入,比如excel,word等 buffer cache所能提供的功能主要包括: 1)?通过缓存数据块,从而减少I/O。 2)?通过构造CR块,从而提供读一致性功能。 3)?通过提供各种lock、latch机制,从而提供多个进程并发访问同一个数据块的功能。 1命中率 2在内存中有一个cr块,dml访问current 块,当current块加锁时读cr块,这两个块都带有相同的数据,但cr块永远不会写回数据文件中 buffer中lock问题,share pool这种有latch问题 buffer cache概述 oracle内部在实现其管理的过程中,有两个非常有名的名词:链表和hash算法。 链表是一种数据结构,通过将对象串连在一起,从而构成链表结构。这样,如果要修改、删除、查找某个对象的话,都可以先到链表中去查找,而不必实际的访问物理介质。 oracle中最有名的链表大概就是LRU链表了,我们后面会介绍它。 hash算法则是为了能够进行快速查找定位所使用一种技术。 所谓hash算法,就是根据要查找的值,对该值进行一定的hash算法后得出该值所在的索引号,然后进入到该值应该存在的一列数值列表(可以理解为一个二维数组)里,通过该索引号去找它应该属于哪一个列表。 然后再进入所确定的列表里,对其中所含有的值,进行一个一个的比较,从而找到该值。 这样就避免了对整个数值列表进行扫描才能找到该值,这种全扫描的方式显然要比hash查找方式低效很多。其中,每个索引号对应的数值列在oracle里都叫做一个hash bucket。 我们来列举一个最简单的hash算法。 假设我们的数值列表最多可以有10个元素,也就是有10个hash buckets,每个元素最多可以包含20个数值。 则对应的二维数组就是t[10][20]。我们可以定义hash算法为n MOD 10。 通过这种算法,可以将所有进入的数据均匀放在10个hash bucket里面,hash bucket编号从0到9。 比如,我们把1到100都通过这个hash函数均匀放到这10个hash bucket里,当查找32在哪里时,只要将32 MOD 10等于2,这样就知道可以到2号hash bucket里去找,也就是到t[2][20]里去找,2号hash bucket里有10个数值,逐个比较2号hash bucket里是否存在32就可以了。 (定义了n mod 10实际上是定义了数据存放的方式,1-100可以也是按照mod方式放进数组中) buffer cache就是使用多个hash bucket来管理的,其hash算法当然比我们前面列举的要复杂多了。 我们先来看下面这个图。这副图从逻辑上说明了整个buffer cache的结构是怎么样的。这副图的右上角列出了三个名词:hash bucket、buffer header和hash chain。 链表就是记录了一个地址,因此一个handle中记录了多个地址,实现了多链,一套结构中允许有多链,链可以是水平的,也可以是纵向的 一个bufer handle指向一个块 这里的hash bucket就是我们前面说明hash算法中提到的二维数组的第一维。它是通过对buffer header里记录的数据块地址和数据块类型运用hash算法以后,得到的组号。

文档评论(0)

yurixiang1314 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档