内容简介 本书详细讲述了如何充分利用革命性的Oracle Wait Interface(OWI)快速确定并解决数据库系统的主要问题和瓶颈,从而极大地提高工作效率。书中包含所有OWI特性的大量细节,包括等待事件视图及其应用,以及扩展的SQL追踪文件。这些宝贵资源有助于您充分利用这个最先进的诊断工具,从而将处理时间减到最少。
前 言 商业全球化创造了新的竞争前景,最先占领市场的推动力往往会违反常规以及已证明的应用程序和数据库开发范例。为了获得竞争优势,各个公司利用了最新的计算机硬件和存储技术,从而获得并分析关于客户和支出形态的大量数据。这就给大型数据库、复杂的多层式应用程序带来了一定的风险,更不用说可能产生性能问题。数据库管理员们面临前所未有的故障检修和解决性能问题的挑战,这些问题往往都贴上了“数据库问题”的标签。 在Oracle 7.0.12以前的版本中,Oracle公司建议用基于比率的方法测量数据库性能。作为结果,人们开发出了基于各种比率的模型,以此来测量数据库性能。人们已经很长时间学习和使用该模型,而且仍然有一些DBA(数据库管理员)在不断地实践这个模型。然而,事实证明,该模型并不适合于查找系统中真正的瓶颈问题,更不用说寻找解决方案。尽管有各种各样的比率,然而基于比率的方法却不能回答如下的问题:是什么原因造成应用程序运行缓慢? 在Oracle 7.0.12版本中,Oracle公司引进了基于等待的方法(即Oracle Wait Interface,OWI)来分析系统的性能问题。第一次,DBA可以发现进程在不同的资源上花费了多少时间,以及何种资源是系统中的瓶颈。等待时间越长,进程的响应时间越慢。现在,通过将缓慢的性能与瓶颈联系起来的方法,DBA可以更容易地标识主要的瓶颈,无论它是否与应用程序、数据库或网络相关。不再需要推测工作。然而,许多DBA都很晚才了解OWI的相关知识。起先,只有少数Oracle公司的员工知道基于等待的性能诊断知识和正确用法。其他人可用的信息相当少。从那时起,Oracle公司在技术和知识传输方法方面对OWI都进行了实质性的改进。事实证明,对于正确标识系统瓶颈和找出正确解决方案,OWI都是极其可靠和安全的模型。Oracle RDBMS 8、8i、9i和10g对Oracle内核进行了相当可观的改进,以报告等待时间,基于等待的模型正在非常快速地成熟起来。 在过去的10年中,已经有一些作者编写了关于调整和改进数据库性能的方法和工具。其范围从SQL调整到数据库内部构件。遗憾的是,其中的Wait Interface模型的内容未及时得以详细说明和补充。本书将努力填补这个空白。 本书不是指导如何调整SQL语句或PL/SQL程序,而是帮助您标识可能需要调整的SQL语句和数据库结构。本书面向所有层次的Oracle DBA。我们相信,只要阅读了本书,您就会开始使用OWI诊断性能问题。如果是这样,我们编写本书的目的就达到了。 我们愿意倾听您的成功故事和建议,以及各种批评和意见。学无止境。我们决不会尝试覆盖所有可能的性能调整。我们认为这仅仅是开始。您可以通过电子邮件联系作者:richmondshee@、Kirtikumar_Deshpande@和kaygopal@。 如何使用本书 极少有人会一次性从头至尾地阅读技术书籍。技术书籍通常是用作参考书籍。然而,我们建议您读完本书的所有章节和附录。无论您在Oracle Database调整和性能故障查找中的经验水平如何,您一定会在每一章中发现一些新的内容。 本书共有9章和5个附录。下面将分别介绍。 第1章 第1章介绍了Oracle Wait Interface,为了解学习和使用OWI的原因打下基础。本章解释了在需要诊断缓慢的应用程序响应时间时,为什么基于命中率(hit-ratio)的方法不起作用。 第2章 第2章详细地讨论了OWI组件。定义了Oracle等待事件,描述了各种OWI视图及其应用,还解释了如何使用扩展的SQL追踪。我们将介绍在何处、何时以及如何查找等待事件信息。 第3章 第3章介绍了最常见的Oracle等待事件。本章详细描述了这些事件,并显示了Oracle提供的、用于分析这些事件的信息。此外,本章还讨论了如何追踪CPU使用状况统计信息。 第4章 第4章解释了为什么监控和收集会话级等待事件如此重要的原因,讨论了性能历史数据的重要性。本章描述了如何将简单的数据收集工具组合起来以捕获和存储会话级Oracle等待事件数据。 第5章 第5章讨论了如何诊断和解决最常见的与I/O相关的等待事件的问题。讨论的事件包括db file sequential read、db file scattered read、direct path read、direct path write、log file parallel write、db file parallel write和control file parallel write。 第6章 第6章深入讨论了latch free、enqueue和buffer busy waits等待事件。我们将全面介绍这些等待事件的相关内容。本章讨论了锁存器和排队的区别,解释了Oracle如何串行化内存结构的访问。本章将介绍如何诊断和解决与锁及串行化有关的问题。关于这些事件的信息,我们相信,目前还没有其他出版物中能像本章介绍得这么全面。 第7章 第7章详细介绍了与等待时间有关的等待事件。我们将介绍如何诊断和解决与log file sync、log buffer space、free buffer waits、write complete waits、log file switch completion和log file switch(checkpoint incomplete)等待事件有关的问题。 第8章 第8章解释了在Oracle Real Application Clusters环境中缓冲存储器管理的工作方式,讨论了RAC环境中常见的Oracle等待事件。我们将介绍如何诊断和解决与全局高速缓存等待事件有关的问题。 第9章 第9章介绍了Oracle Database 10g中新增的自动化性能监控和诊断功能。本章讨论了Oracle Database 10g收集的不同类型的数据库统计信息。我们将介绍Oracle如何收集并分析性能统计数据,用推荐和“顾问”方案提供补救解决方案。我们还会介绍Automatic Workload Repository、Active Session History、Automatic Database Diagnostic Monitor的工作方式。我们将用一系列Oracle Enterprise Manager屏幕截图来展示找到性能问题根本原因的工作是多么轻松。 附录A 附录A讨论了Oracle诊断事件。这些事件不同于Oracle等待事件。我们将介绍如何以及何时使用这些诊断事件。 附录B 附录B列出了Oracle Database 10g中的所有排队等待事件。 附录C 附录C介绍了用于为各种数据或内存转储创建追踪文件的工具和过程。通常Oracle 技术支持部门需要这些追踪文件和转储,以诊断错误的根本原因,如ORA-0600或ORA-7445。 附录D 附录D描述了通过非SQL接口(如C语言程序)直接访问Oracle SGA的方法。这样的方法是采样SGA中与性能有关的信息的最快方法,无需引进额外的解析、锁存等开销。 附录E 附录E列出了本书用到的参考资料。