Oracle log buffer及日志管理深入分析及性能调整

Oracle log buffer及日志管理深入分析及性能调整

ID:38582244

大小:502.50 KB

页数:28页

时间:2019-06-15

Oracle log buffer及日志管理深入分析及性能调整_第1页
Oracle log buffer及日志管理深入分析及性能调整_第2页
Oracle log buffer及日志管理深入分析及性能调整_第3页
Oracle log buffer及日志管理深入分析及性能调整_第4页
Oracle log buffer及日志管理深入分析及性能调整_第5页
资源描述:

《Oracle log buffer及日志管理深入分析及性能调整》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、logbuffer及日志管理深入分析及性能调整1.logbuffer的概念1.1logbuffer概述数据库在运行过程中,不可避免的要遇到各种能够导致数据块库损坏的情况。比如突然断电、oracle或者操作系统的程序bug导致数据库内部逻辑结构损坏、磁盘介质损坏等,都有可能造成数据库崩溃,从而导致数据丢失的现象发生。为了避免,或者说为了修复这些状况所导致的数据丢失现象,oracle引入了日志缓冲区和日志文件的概念。所谓日志,就是将所有数据库中所有改变数据块的操作,都原原本本的记录下来。这些改变数据块的操作不仅包括对数据表的DML或者对数据字典的DDL,还包括对

2、索引的改变、对回滚段数据块的改变、对临时表空间的临时段的改变等。只有将数据库中所有的变化都记录下来,当发生数据库损坏时,才能够从损坏时的那一点开始,将之后数据库中的变化重新运用一遍,从而达到恢复数据库的目的。既然是要记录,那就必然引出一个问题,就是如何记录这些变化?比较容易想到的有两种方式。第一种是使用逻辑的记录方式,也就是用描述性的语句来记录整个变化过程。比如对于某个update更新操作来说来说,可以记录为两条语句:delete旧值以及insert新值。这种方式的优点是非常节省空间,因为对每个操作,只需要记录几条逻辑上的语句即可。但是缺点也很明显,就是一旦

3、需要进行恢复,就会非常消耗资源。设想一下,某个update操作更新了非常多的数据块,由于buffercache内存有限,很多脏数据块都已经写入了数据文件。但就在更新快结束时,突然发生断电,所做的更新丢失。那么重新启动实例时,oracle需要应用日志文件里的记录,于是重新发出delete旧值以及insert新值的语句。这个过程需要重新查找数据文件中符合条件的数据块,然后再挑出来进行更新。这个过程将非常消耗时间,而且会占用大量的buffercache。第二种方式是使用物理的记录方式,也就是将每个数据块改变前的镜像和改变后的镜像都记录下来。这种方式优点就是恢复起来

4、速度非常快,直接根据日志文件里所记录的数据块地址和内容更新数据文件中对应的数据块。但是缺点也很明显,就是非常占用磁盘空间。而oracle在记录日志的方式上,采用了逻辑和物理相结合的方式。也就是说,oracle针对每个数据块,记录了插入某个值或者删除某个值的描述语句。假如某个update更新了100个数据块,则oracle会针对每个数据块记录一对delete旧值和insert新值的语句,共有100对这样的描述语句。通过这种方式,oracle获得了物理记录方式的快速恢复的优点,同时又获得了逻辑记录方式的节省空间的优点。为了临时存放所产生的日志信息,oracle在

5、SGA中开辟了一块内存区域。这块区域就叫做日志缓冲区(logbuffer),当满足一定条件以后,oracle会使用名为LGWR的后台进程将logbuffer中的日志信息写入联机日志文件里。可以使用初始化参数log_buffer来设置日志缓冲区的大小,单位是字节。日志缓冲区会进一步细分为多个块,每个块的尺寸与操作系统的一个块的尺寸相同,基本都是512字节。我们可以用如下方式来获得日志缓冲区的块尺寸。SQL>selectdistinctlebszasredo_block_sizefromx$kccle;REDO_BLOCK_SIZE---------------

6、512也可以用下面的方式来计算出日志缓冲区的块尺寸。SQL>selectround((a.redosize+b.redowast)/c.redoblks)+16asredo_block_sizefrom2(selectvalueredosizefromv$sysstatwherename='redosize')a,3(selectvalueredowastfromv$sysstatwherename='redowastage')b,4(selectvalueredoblksfromv$sysstatwherename='redoblockswritten')

7、c5;REDO_BLOCK_SIZE---------------512日志缓冲区只是日志信息临时存放的区域,这块区域是有限的,而且其中的每个块都是能够循环使用的。这也就说明,日志缓冲区中的内容必须要写入磁盘上的文件里,才能永久保留下来,才能在数据库崩溃时能够用来进行恢复。这个文件就叫做联机日志文件。在每个日志缓冲区中的日志块被重用之前,其内容必然已经被写入了磁盘上的联机日志文件中。联机日志文件就是日志缓冲区的完全拷贝,组成日志文件的每个日志块的内容都来自于日志缓冲区的日志块。每个日志缓冲区中的日志块都对应到日志文件中的一个日志块。日志缓冲区中的日志块按照发

8、生的先后顺序,放入联机日志文件。由于日志文件在故障恢

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。