HelloDBA [English]
搜索Internet 搜索 HelloDBABA
  Oracle技术站。email: fuyuncat@gmail.com  MSN: fuyuncat@hotmail.com   acoug  acoug 

Oracle IO问题解析(10)

[English]

作者: fuyuncat

来源: www.HelloDBA.com

日期: 2009-04-07 14:57:01

分享到  新浪微博 腾讯微博 人人网 i贴吧 开心网 豆瓣 淘宝 推特 Facebook GMail Blogger Orkut Google Bookmarks

3.5     Buffer Cache相关的IO事件

Buffer Cache是影响Oracle IO的重要因素。这里要解决的几个等待事件都是涉及到DBWR进程和IO从属进程(Slave)的Buffer Cache操作引起的等待事件。

3.5.1      db file parallel write

该事件和并行DML无关。这个等待事件出现在当DBWR进程提交了多IO请求来并行将Buffer Cache中的脏数据写入磁盘中后,等待所有提交的IO请求完成。通常是由于操作系统的IO系统导致的该事件的阻滞。

 

事件中的P1P2P3参数分别代表:

P1:(9.2.0.5之前)写入数据的文件号/9.2.0.5之后)请求次数;

P2:(9.2.0.5之前)写入的数据块号/9.2.0.5之后)请求中断的次数;

P3:(9.2.0.5之前)请求次数/9.2.0.5之后)请求发生了Timeout的时间

 

这一等待事件一般不会显著影响用户会话。但是当用户会话中有很高的“write complete waits”或“free buffer waits”事件的等待时间时,说明该事件已经影响到了用户会话。有时候这一事件对操作系统IO的影响也会影响到进程从同一磁盘读取数据的等待时间。

解决该事件的关键在于减少相关磁盘的IO冲突。如果这事件已经影响到用户会话,我们需要结合其他等待事件信息,考虑采取均衡热地磁盘负载、提高存储设备IO效率、增加checkpoint间隔、增大Redo log文件等方法来减低该事件。

3.5.2      db file single write

DBWR进程请求修改数据文件头,在等待IO请求完成时,会出现db file single write等待事件。

 

事件中的P1P2P3参数分别代表:

P1:写入数据的文件号;

P2:写入的数据块号;

P3:写入的数据块数(一般为1)。

 

解决这一等待事件的关键还是要处理好磁盘的IO冲突问题,特别是发生该事件所在的磁盘。通过相关SQL的调优等手段来降低事件发生的磁盘的IO、采用更高效率的存储设备、均衡磁盘IO负载等方法是降低这一等待事件的主要方法。

3.5.3      write complete waits

当会话对一个正在被写写入磁盘的Buffer数据块发出请求时,需要等待其被写入磁盘完成,这时就会产生write complete waits等待事件。

 

事件中的P1P2P3参数分别代表:

P1:要写入数据的文件号;

P2:要写入的数据块号;

P3:无意义

 

提高Buffer Cache脏数据写入磁盘的效率、提高整体IO效率是降低该等待事件的主要方法:

  • 配置数据库支持AIO
  • 增加db_writer_processes(支持AIO时)或者db_io_slaves(不支持AIO时)大小以增加DBWR进程;
  • 其他提高IO效率(如采用裸设备等)、减少IO冲突的方法

3.5.4      free buffer waits

当会话在Buffer Cache中找不到空闲buffer块,或者在没有空闲buffer块来建立一致性读时,就会产生free buffer waits等待事件。

 

事件中的P1P2P3参数分别代表:

P1:要读取数据的文件号;

P2:要读取的数据块号;

P310gR1之前无意义,10gR1后表示在Buffer CacheLRULRUW列表的SET_ID#

 

这一等待事件通常表示Buffer Cache不足或者从Buffer Cache中将脏数据写入磁盘的效率太低。要降低该等待事件,我们就需要分别从这两方面入手:调整Buffer Cache的大小(如根据statspack的建议器来设置);按照我们前述的方法来提高存储设备的IO效率。

4         结束语

最后要说的是,一旦数据库服务器出现了IO问题后,首先要检查操作系统本身的IO系统是否有问题,然后再确认是否是Oracle出现了IO问题。

其次要注意的一点是,上述等待事件在系统出现一定的等待次数对于系统来说是正常的,我们要解决的是对系统IO影响最大的一个或几个等待事件,而不是全部事件。

总的来说,要调整Oracle中出现的IO性能问题,我们有两种手段:一种是针对特定等待事件的相应方法,如相关SQL语句的调优、相关参数的修改;另外一种是通过提升整体IO效率、减少IO冲突来降低IO等待,如均衡IO负载、使用效率更高的存储设备、激活AIO和重新分布对IO有不同要求的文件。

事实上,数据库的性能问题大多数是由应用引起的,而其中大部分问题都是Top SQL造成。因此,这里要说的一句题外话就是:SQL调优是每一个DBA必须具备的最基本的技能。因为很多时候无论采用什么手段、什么工具来定位问题,通过各种内部机制来分析问题,但最终解决问题的手段就是SQL调优。

5         参考文章

1、 www.HelloDBA.com

2、 Metalink.Oracle.com

3、 Oracle OTN

4、 Oracle Concept

5、 Oracle Database Performance Tuning Guide

 

Top

Copyright ©2005,HelloDBA.Com 保留一切权利

申明
by fuyuncat