博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

CLEANER

如果你的工作,机器也可以做。那总有一天,你也要变成机器。
   yuechaotian.cublog.cn
关于作者  
name:yuechaotian
employment:coder
age:25
from:NEU
about me:a retardate
email:yuechaotian(at)gmail.com
msn:yuechaotian(at)hotmail.com

我的分类  




Wait Events(1) — 什么是等待事件?

等待事件从 Oracle7 开始出现,许多年来一直没有相关的文档,除了 Oracle 公司的核心成员以外,很少有人知道。从 Oracle7.3 开始出现“等待事件”的概念,从 Oracle8.0 开始出现相应的文档,后来又对等待事件进行了详细的介绍。在 Oracle9i 中,由于核心包 DBMS_SUPPORT 的出现,以及 TKPROF 新提供的等待事件报告功能,等待事件的跟踪变得更加容易。

等待事件背后所包含的意义,从最初开始就没有改变过。不过 Oracle 一直在增加新的等待事件,这些增强功能使得等待事件更加容易使用。 

在本章中,我们将介绍什么是等待事件,以及为什么说它们所提供的信息非常有用。

“等待事件”定义

任何时刻,Oracle 进程或者正忙于处理请求,或者正等待某一件事情。我们说的“忙”是指该进程正使用 CPU。例如,一个专用服务进程可能正查找数据缓冲区,看某数据块是否已在内存中,这个进程就称为“忙”;再比如归档进程 ARC0,可能正等待 LGWR 进程发出归档在线重做日志的请求,此时,ARC0 进程就处于“等待”中。

Oracle 的核心开发人员定义了一系列 Oracle 进程可能处于的等待事件。在 Oracle8.0 中有 158 个等待事件,Oracle9i Release 2 中是363个。任何时刻,每个“不忙”的 Oracle 进程都在等待这些事件中的某一个。例如应用程序发出 COMMIT 请求,服务进程正等待 LGWR 进程发出写回重做日志缓冲区的命令,这就是“log file sync” 等待事件;再比如应用程序发出 SELECT FOR UPDATE 请求,专用服务进程可能需要等待表 INVOICES 上的行级锁,这就是“enqueue” 等待。

Oracle 给 DBA 所提供的等待事件接口非常有用。通过查询 v$ 视图,我们可以非常详细地查看某进程正在等待什么。例如,我们会发现一个专用服务进程正在等待操作系统读出数据块,还会发现它是从第42号数据文件的18042个数据块开始读取8个数据块,已经等待了 30 毫秒;我们还得获得一些汇总信息,比如每个 Oracle 进程每个等待事件的等待时间;另外,我们还可以使用 TKPROF 来将这些等待事件的数据详细地写到跟踪文件中。

为什么说等待事件的信息很有用?

通过等待时间,你可以更加深入的了解 Oracle 把时间都花在了什么地方。例如,生成一个报表花费了4个小时,那么,等待事件将告诉你这4个小时中,有多少时间消耗在全表扫描的磁盘读,多少时间消耗在使用索引的磁盘读,多少时间消耗在 latch 争用上,等等。

比起缓冲区命中率来,等待事件能提供更广、更深的信息。它提供了数据库的方方面面的信息,例如磁盘 I/O,闩锁(latches),并行进程,网络传输,检查点,以及行级锁等。同时,你能从中获得更详细的信息,例如正在从磁盘读取哪个数据文件的第几个数据块,或者正在等待的闩锁的名称。

等待事件不会提供你诊断和解决问题的所有信息,但它可以给你提供一个正确的方向。你可能发现缓冲区命中率仅有70%,是缓冲区太小吗?事实上,通过等待事件你可能发现共享池中的闩锁争用是导致应用程序响应缓慢的原因,瓶颈是日志缓冲区的写等待,或其他的什么事件。

(翻译自:http://www.quest-pipelines.com/newsletter-v4/0503_A.htm

 发表于: 2008-05-12,修改于: 2008-05-12 23:10 已浏览398次,有评论0条 推荐 投诉

  网友评论

  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:4.18292

京ICP证041476号