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;