Oracle数据库高性能秘密之数据高速缓存

来源:未知 责任编辑:责任编辑 发表时间:2015-10-08 14:16 点击:

使用过Oracle数据库的人都知道,Oracle数据库的运行速度与效率,在同类数据库中是名列前茅的,特别是对大量数据进行访问时,更加有出色的表现。那么,Oracle数据库是靠什么实现的呢?笔者下面将通过一系列的文章,向大家展示Oracle数据库提供高性能运算的秘密。

Oracle数据库作为复杂运算的首选数据库,其首先是通过所谓的数据高速缓存来实现对数据的高速运算与操作的。


数据高速缓存跟操作系统的缓存类似,其存储最近从数据文件中读取的数据块,其中的数据可以被所有的用户所访问。如当我们利用Select语句从数据库中查询员工信息的时候,其首先不是从数据文件中去查询这个数据,而是从数据高速缓存中去查找,而没有这个必要再去查询磁盘中的数据文件了。只有在数据缓存中没有这个数据的时候,数据库才会从数据文件中去查询。Oracle数据库为什么要如此设计呢?这是由于数据库在读取数据的时候,读取内存的速度比读取磁盘的速度要快很多倍,所以这种机制可以提高数据的整体访问效率。


虽然其他数据库也有这方面的设计,但是,相对来说,Oracle数据库比其他数据库,在这方面有更加出色的表现。难怪Oracle数据库在内存的要求上,比其他数据库要高。若以稍微的代价牺牲一些内存,而换取更高的数据访问性能。笔者认为还是值得的。下面我们就来看看,Oracle数据库在数据高速缓存上有哪些特殊的表现。


一、 空闲缓存块


当我们重新启动数据库后,系统就会为数据库分配一些空闲的缓存块。空闲缓存块中是没有任何数据的,他在那边默默的等着别写入记录。当Oracle 数据库从数据文件中读取数据后,数据库就会寻找是否有空闲的缓存块,以便将数据写入其中。


一般来说,数据库在启动的时候,就会在内存中预先分配这些缓存块。所以,Oracle数据库在启动的时候,会占用比较多的内存。但是,这可以免去在实际需要时向内存申请的时间。所以,有时候Oracle数据库虽然已启动,内存的占用率就很高,但是,其后续仍然可以正常运行的原因。而其他数据库虽然刚启动的时候内存占用率不是很高,但是,但系统内存到达80%以上时,在进行数据处理就会受到明显的影响。


所以,当我们利用SELECT语句从数据库文件中读取文件的时候,数据库首先会寻找是否有空闲的缓存。


二、命中缓存块


当SELECT语句先从数据库文件中读取数据后,会把取得的数据放入到这个命中缓存块中。也就是说,当我们利用查询语句从数据库查询处员工信息后,这个信息就会被保存在高速缓存中。直道高速缓存消耗完毕等原因,这个空间才会被释放。如此的话,下次用户在查询员工信息的时候,就不需要从数据库文件中再次查询相关信息,而直接从数据高速缓存中提取数据,从而提高数据库的访问效率。


另外要注意的一个问题是,命中缓存块中的数据不会被写入数据文件。确实,这个命中缓存块中的数据没有被更改,其当然也不会被写入数据库文件中。


三、脏缓存块


当我们利用SELECT查询语句把员工信息的数据查询出来后,数据库会把这个数据所存储的空缓存块做标记,表示该缓存块已经存有数据,使命中缓存块。此时,我们若在利用数据更新语句UPDATE对其中某条记录进行更新时,如要把张三的名字改为张四。运行UPDATE语句后,数据库也首先从高速缓存中查找是否有这条记录,若存在这条记录的话,就直接更改这条记录,并且把该缓存块标记为赃缓存块。如此的话,就可以保持数据的一致性。


也就是说,脏缓存块存储的是已经被修改过的,但是还没有写入到数据库文件的信息。当SQL的UPDATE等数据更新语句对某个缓存块中的数据进行更改之后,这个命中缓存块就会被数据库标记为脏缓存块。当满足一定的条件时,这些脏缓存块中的数据内容会被写入到数据库文件中去,以便永久性的保留数据库修改记录。

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • 在oracle数据库下使用iSQL*Plus DBA访问数据库
  • Oracle数据库Constraint约束的常用操作及异常处理
  • oracle 让sys用户可以使用isqlplus
  • ORACLE10gr2数据导入MySQL方案
  • export/import的使用
  • OCP043第十五讲 Database Security
  • Oracle行列转换小结
  • Table函数使用简介
  • Bulk Collect性能分析(zz)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1