I/O相关的等待事件

1. 查看Oracle数据库是否存在IO相关的竞争等待有下面三种方法:

  • statpack报告的top 5 wait events或者AWR报告中的top 5 timed events。
  • 数据库等待事件的sql语句跟踪中主要都是IO相关的等待事件的限制。
  • 操作系统工具显示存储数据库文件的存储磁盘有非常高的利用率。

2. 对于出现IO问题的一些处理方法:

  • 优化sql语句来减少数据库的IO的需求
  • 调整实例的初始化参数来减少数据库的IO需求:一种是通过内存缓存(高速缓存区,日志缓存区以及各种排序区)来减少IO,另一种是调整一次读取多个block的大小,这个设置是由db_file_multiblock_read_count来控制的。
  • 在操作级别上优化IO:如果操作系统支持异步IO,尽量使用异步IO;还可以使用高级文件系统的一些特性,如直接IO读取,忽略掉操作系统的文件缓存,也就是平时所说的使用裸设备;还有一种就是增大每次传输的最大IO大小的限制。
  • 通过使用RAID,SAN,NAS来平衡数据库的IO
  • 手工分配数据文件到不同的文件系统,控制器和物理设备来重新调整数据库的IO

 3. Oracle中最常见的一些IO相关的等待事件:

数据文件IO相关的等待事件包括:

  • db file sequential read
  • db file scattered read
  • db file parallel read
  • direct path read
  • direct path write
  • direct path read(lob)
  • direct path write(lob)

控制文件IO相关的等待事件包括:

  • control file parallel write
  • control file sequential read
  • control file single write

重做日志文件相关IO等待事件包括:

  • log file parallel write
  • log file sync
  • log file sequential read
  • log file single write
  • switch logfile command
  • log file switch completion
  • log file switch (clearing log file)
  • log file switch (checkpoint incomplete)
  • log switch/archive
  • log file switch (archiving needed)

高速缓存区IO相关等待事件包括:

  • db file parallel write
  • db file single write
  • write complete waits
  • free buffer waits

4. 查找全表扫描的sql语句:select sql_text from v$sqltext t, v$sql_plan p where t.hash_value=p.hash_value and p.operation='TABLE_ACCESS' and p.options='FULL' order by p.hash_value, t.piece;

查找Fast Full Index扫描的sql语句可以使用:select sql_text from v$sqltext t, v$sql_plan p where t.hash_value=p.hash_value and p.operation='INDEX' and p.options='FULL SCAN' order by p.hash_value, t.piece;

原文地址:https://www.cnblogs.com/PerOpt/p/3737327.html