没有合适的资源?快使用搜索试试~ 我知道了~
首页Oracle-IO问题及性能调优.pdf
Oracle-IO问题及性能调优.pdf
需积分: 50 231 浏览量
更新于2023-05-23
评论
收藏 229KB PDF 举报
Oracle-IO问题及性能调优.pdf 详细介绍了I/O中的各种性能问题和等待世间
资源详情
资源评论
资源推荐

厦门开发中心技术培训
牛新庄 1 5/17/2008
Oracle I/O 问题及性能调优
数据库的作用就是实现对数据的管理和查询。任何一个数据库系
统,必然存在对数据的大量读或者写或者两中操作都大量存在。IO
问题也往往是导致数据库性能问题的重要原因。在第三天的讲课中,
主要帮助大家在理解 Oracle 的读写操作机制的基础上,灵活解决遇
到的各种常见的 IO 问题。
1 Oracle 中 IO 的产生
IO 当然包括了读、写两部分,先介绍 Oracle 中写操作的产生。
1.1 写
介绍写操作之前,先简单的看下 Oracle 的物理结构:oracle 的
物理文件包括以下三种文件:控制文件(Control Files)、 重做日志
文件(Redo Log Files)、 数据文件(datafiles)。 而数据文件中,
根据功能的不同,还可以分为系统数据文件、临时空间文件、回滚段
文件和用户数据文件。另外,如果数据库的 Archive Log 模式被激活,
还存在归档日志文件。Oracle 的 IO 产生,就是对这些文件的数据读、
写操作。下面再详细看下几种主要写操作的产生及其过程。
1.1.1 控制文件

厦门开发中心技术培训
牛新庄 2 5/17/2008
控制文件中记录了整个数据库的物理结构信息,如数据库名字、
数据文件及日志文件名字和位置、事件戳信息等等。任何数据库的结
构变化(如果创建新的数据文件)都会引起 Oracle 修改控制文件。
同时控制文件还记录系统和各个数据文件的 SCN(System Change
Number,以用于数据恢复,因此数据文件上的 SCN 变化后,Oracle
也会相应修改控制文件上的 SCN 信息。
1.1.2 用户数据修改
由于内存的读写效率比磁盘的读写效率高万倍,因此,为了降低
IO wait,oracle 会将数据 cache 在内存中,对数据的读写尽量在内
存中完成。当 Buffer Cache 中的数据缓存块被修改过了,它就被标
记为“脏”数据。根据 LRU(Least Recently Used)算法,如果一
个数据块最近很少被使用,它就称为“冷”数据块。进程 DBWn(系
统中可以存在多个 DBW 进程,n 为序号)负责将“冷”的“脏”数据
写入数据文件中去。DBWn 进程会在以下两种情况下将“脏”数据写
入磁盘中去:
• 当服务进程扫描一定数量(阀值)的 Buffer Cache 后还没有
找到干净、可重用的缓存块后,它会通知 DBWn 进程将“脏”
数据写入文件中去,以释放出空闲缓存;
• 当发生检查点(Checkpoint)时。
1.1.3 Redo Log

厦门开发中心技术培训
牛新庄 3 5/17/2008
在非直接写(Direct Write)的情况下,事务中的写操作都会产
生 Redo Log,作为数据块异常关闭时的恢复记录。同样,和写用户
数据类似,Redo Log 也不会被直接写入 Redo Log 文件,而是先写入
Log Buffer 中。
Log Buffer 是一个可以循环重用的缓存区。LGWR 进程负责将 Log
Buffer 中的记录写入 Redo Log File 中去。一旦 Log Buffer 中的条
目被写入了 Redo Log 文件中,就可以被重用了。
为了保证事务尽快获得 Log Buffer,LGWR 进程一般会尽快将 Log
Buffer 中的数据写入 Redo Log 文件中去。在以下几种情况下,LGWR
回将一个连续的 Log Buffer 写入 Redo Log 文件中去:
• 当一个事务提交(COMMIT)时;
• 每 3 秒钟写一次 Log Buffer;
• 当 Log Buffer 到达 1/3 满时;
• 当有 1M 的数据修改时
• 当 DBWn 进程将“脏”数据写入磁盘时;
1.1.4 Archive Log
当据库的 Archive Log 模式被激活后,所有 Redo Log 数据都会被
写入 Archive Log 文件中以便日后进行恢复。当发生日志组切换时,
ARCn(Archive 进程,可以存在多个)进程就会 Redo Log 文件拷贝

厦门开发中心技术培训
牛新庄 4 5/17/2008
到指定存储目录中去,成为 Archive Log 文件。
1.1.5 临时表空间
当 Oracle 在执行一些 SQL 时,会需要一些临时空间来存储执行语
句时产生的中间数据。这些临时空间由 Oracle 从指定的临时表空间
中分配给进程。主要有三种情况会占用临时空间:临时表/索引操作、
排序和临时 LOB 操作。
• 临时表/索引
在会话中,当第一次对临时表进行 INSERT(包括 CTAS)时,Oracle
会从临时表空间中为临时表及其索引分配临时空间一存储数据。
• 排序
任何会使用到排序的操作,包括 JOIN、创建(重建)INDEX、ORDER
BY、聚合计算(GROUP BY)以及统计数据收集,都可能使用到临时表
空间。
排序操作首先会选择在内存中的 Sort Area 进行(Sort In
Memory),一旦Sort Area不足,则会使用临时空间进行排序操作(Sort
In Disk)。 看以下例子:
SQL> alter session set sort_area_size = 10000000;

厦门开发中心技术培训
牛新庄 5 5/17/2008
Session altered.
SQL> select owner, object_name from t_test1
order by object_id;
47582 rows selected.
Execution Plan
--------------------------------------------------
--------
Plan hash value: 1312425564
--------------------------------------------------
----------------------------
| Id | Operation | Name | Rows | Bytes
| Cost (%CPU)| Time |
--------------------------------------------------
----------------------------
| 0 | SELECT STATEMENT | | 47582
| 1486K| 155 (4)| 00:00:02 |
| 1 | SORT ORDER BY | | 47582
| 1486K| 155 (4)| 00:00:02 |
剩余136页未读,继续阅读

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0