具体描述
本书详细讲述了如何充分利用革命性的Oracle Wait Interface(OWI)快速确定并解决数据库系统的主要问题和瓶颈,从而极大地提高工作效率。书中包含所有OWI特性的大量细节,包括等待事件视图及其应用,以及扩展的SQL追踪文件。这些宝贵资源有助于您充分利用这个最先进的诊断工具,从而将处理时间减到最少。
本书主要内容:
● 使用等待事件统计信息确定性能问题
● 监控会话级等待事件,并收集历史数据,以确定根本问题
● 解释与I/O有关的常见等待事件
● 诊断并解决与锁和串行化相关的问题
● 分析与延迟相关的等待事件
● 确定和解决Oracle Real Application Clusters环境中的瓶颈
● 学习Oracle Database 10g中性能诊断和调整的有效方法
作者简介
Richmond Shee是全球综合性通信公司Sprint(www.sprint.com)的高级数据库架构师。Richmond自1984年开始从事关系数据库工作。他是DBA(数据库管理员)的顾问,并帮助确定适合在整个公司实现Oracle RDBMS技术的方针。Richmond负责Sprint公司所有最关键数据库的调整工作。在他的众多成就中,最突出的是在Sprint公司倡导了Oracle Wait Interface的使用,他还发明了基于等待的性能数据收集器,这项技术正在申请专利中。他是国际Oracle用户组(Inernational Oracle Users Group)的知名主席,经常在KansasCityOUG中演讲。Richmond的电子邮件地址为richmondshee@yahoo.com。
Kirtikumar Deshpande(Kini)在信息技术领域方面已有25年的丰富经验,其中有十几年担任Oracle数据库管理员。他拥有理学士(物理)学位和工程学士(生物医学)学位。他与其他人合著了一本书Oracle Performance Tuning 101,由Oracle Press在2001年5月出版。他在当地Oracle用户组非正式会议,以及国内、国际Oracle用户组会议上发表多篇论文。目前他是Verizonlnformation Services(www.superpages.com)的高级Oracle数据库管理员。Kiai的电子邮件地址为Kirtikumar_Deshpande@yahoo.com。
K Gopalakrishnan(Gopal)是Oracle Solution Services(印度)的首席顾问,专攻性能调整、高可用性和灾难恢复。他是公认的Oracle RAC and Database Internals专家。Gopal根据其丰富的专业经验已为解决全世界电信巨头、银行和大学中解决许多令人头疼的性能问题作出贡献。他也是一位多产作家,经常在OracleInternals杂志上发表文章。他拥有印度Madras大学的计算机科学和工程学位,以及8年多的从业经验。Gopal的电子邮件地址为kaygopal@yahoo. com。
目录信息
1.1 Oracle性能优化的旧方式 2
1.2 高速缓存命中率极度无效率的原因 2
1.3 Oracle性能优化的新方式 4
1.4 OWI基本原理 4
1.5 数据库响应时间调整模型 6
1.6 思维的变迁 8
1.7 小结 9
第2章 Oracle Wait Interface组件 11
2.1 什么是等待事件 11
2.2 OWI组件 12
2.2.1 V$EVENT_NAME视图 13
2.2.2 V$SYSTEM_EVENT视图 14
2.2.3 V$SESSION_EVENT视图 17
2.2.4 V$SESSION_WAIT视图 19
2.2.5 追踪事件10046-- 扩充的SQL追踪 21
2.3 Oracle Database 10g Release 1中的新OWI视图 27
2.3.1 V$SESSION_WAIT_HISTORY视图 27
2.3.2 V$SYSTEM_WAIT_CLASS视图 28
2.3.3 V$SESSION_WAIT_CLASS视图 29
2.3.4 V$EVENT_HISTOGRAM视图 29
2.3.5 等待事件的类型 31
2.4 OWI的局限 33
2.4.1 没有CPU统计 33
2.4.2 没有端到端的可视性 33
2.4.3 没有历史数据 34
2.4.4 不精确 34
2.5 小结 35
第3章 常见的等待事件 37
3.1 常见等待事件简介 37
3.1.1 buffer busy waits等待事件 38
3.1.2 control file parallel write等待事件 39
3.1.3 db file parallel read等待事件 40
3.1.4 db file parallel write等待事件 40
3.1.5 db file scattered read等待事件 41
3.1.6 db file sequential read等待事件 41
3.1.7 db file single write等待事件 42
3.1.8 direct path read等待事件 42
3.1.9 direct path write等待事件 43
3.1.10 enqueue等待事件 43
3.1.11 free buffer waits等待事件 44
3.1.12 latch free等待事件 45
3.1.13 library cache pin等待事件 46
3.1.14 library cache lock等待事件 46
3.1.15 log buffer space等待事件 47
3.1.16 log file parallel write等待事件 47
3.1.17 log file sequential read等待事件 47
3.1.18 log file switch(archiving needed)等待事件 48
3.1.19 log file switch(checkpoint incomplete)等待事件 48
3.1.20 log file switch completion等待事件 48
3.1.21 log file sync等待事件 49
3.1.22 SQL*Net message from client等待事件 49
3.1.23 SQL*Net message to client等待事件 50
3.2 Oracle Real Application Clusters环境中的常见等待事件 50
3.2.1 global cache cr request 50
3.2.2 buffer busy global cache等待事件 51
3.2.3 buffer busy global cr等待事件 52
3.2.4 global cache busy等待事件 52
3.2.5 global cache null to x等待事件 53
3.2.6 global cache null to s等待事件 53
3.2.7 global cache s to x等待事件 54
3.2.8 global cache open x等待事件 54
3.2.9 global cache open s等待事件 54
3.2.10 row cache lock 55
3.3 追踪CPU和其他统计 55
3.4 小结 57
第4章 OWI监控和收集方法 59
4.1 性能历史数据重要的原因 60
4.2 对根本原因快速而精确的分析 60
4.3 追踪事件10046不适合用作数据收集器的原因 61
4.4 Statspack不适合用作数据收集器的原因 62
4.5 将Database Logoff Trigger用作数据收集器 62
4.6 利用PL/SQL过程进行性能数据采样 66
4.6.1 数据源 66
4.6.2 采样频率 67
4.6.3 存储库 69
4.6.4 监控的事件 70
4.6.5 优点与缺点 76
4.7 利用非SQL式SGA访问进行性能数据采样 77
4.8 小结 77
第5章 解释常见的与I/O有关的等待事件 79
5.1 db file sequential read等待事件 80
5.2 db file scattered read等待事件 86
5.2.1 常见的原因、诊断和动作 86
5.2.2 db file sequential read事件出现在全表扫描操作中的原因 89
5.2.3 全局扫描操作比MBRC请求更少块的原因 90
5.2.4 设置DB_FILE_MULTIBLOCK_READ_COUNT(MBRC) 91
5.2.5 为什么物理I/O需要巨大代价 92
5.3 direct path read事件 92
5.3.1 常见的原因、诊断和动作 92
5.3.2 关注的初始参数 96
5.4 direct path write等待事件 98
5.5 db file parallel write等待事件 100
5.6 log file parallel write等待事件 103
5.7 control file parallel write等待事件 106
5.8 小结 107
第6章 解释与锁有关的等待事件 109
6.1 latch free等待事件 110
6.1.1 什么是锁存器 110
6.1.2 锁存器和锁两者之间的区别 110
6.1.3 锁存器家族 111
6.1.4 锁存器获取 111
6.1.5 锁存器分类 112
6.1.6 latch free等待事件表明的内容 114
6.1.7 锁存器丢失位置 115
6.1.8 Oracle Database 10g Release 1中的锁存器 115
6.1.9 常见的原因、诊断和动作 116
6.1.10 shared pool锁存器和library cache锁存器 117
6.1.11 cache buffers chains锁存器 123
6.1.12 cache buffers lru chain锁存器 129
6.1.13 row cache objects锁存器 131
6.2 enqueue等待事件 131
6.2.1 什么是排队 132
6.2.2 什么是排队资源 132
6.2.3 什么是排队锁 134
6.2.4 排队体系结构 135
6.2.5 解码排队类型和模式 135
6.2.6 常见的原因、诊断和动作 137
6.3 buffer busy waits等待事件 143
6.4 小结 150
第7章 解释与延迟有关的常见等待事件 153
7.1 log file sync等待事件 153
7.2 log buffer space等待事件 158
7.3 free buffer waits等待事件 159
7.4 write complete waits等待事件 163
7.5 log file switch completion等待事件 163
7.6 log file switch(checkpoint incomplete)等待事件 164
7.7 小结 165
第8章 Real Application Clusters环境中的等待事件 167
8.1 Real Application Clusters中等待事件的特殊之处 167
8.2 全局高速缓存等待事件 173
8.2.1 global cache cr request等待事件 173
8.2.2 global cache busy等待事件 176
8.3 Oracle Database 10g中增加的RAC等待事件 178
8.4 enqueue等待事件 178
8.5 小结 182
第9章 Oracle Database 10g中的性能管理 183
9.1 数据库统计 184
9.1.1 时间模型统计 184
9.1.2 等待模型统计 185
9.1.3 操作系统统计 185
9.1.4 其他SQL统计 186
9.1.5 数据库度量 186
9.2 新的后台进程 186
9.3 Automatic Workload Repository 187
9.3.1 存储库快照 188
9.3.2 快照基线 188
9.3.3 使用EM管理AWR 188
9.3.4 手工管理AWR 191
9.4 Active Session History 194
9.4.1 什么是活动会话 195
9.4.2 ASH的组成部分 195
9.5 ADDM 199
9.5.1 ADDM设置 200
9.5.2 使用EM访问ADDM 201
9.5.3 手工运行ADDM报告 207
9.5.4 ADDM视图 208
9.6 小结 208
附录A Oracle Database 10g的诊断事件 209
A.1 Oracle诊断事件 209
A.1.1 诊断事件的类型 210
A.1.2 设置诊断事件 212
A.1.3 事件的内部工作 216
附录B Oracle Database 10g中的enqueue等待事件 219
附录C Oracle转储和追踪 227
C.1 oradebug:追踪和转储的重要工具 227
C.2 数据块转储 229
C.3 缓冲区转储 230
C.3.1 语法 230
C.3.2 控制转储信息 231
C.4 缓冲区转储 231
C.4.1 语法 231
C.4.2 使用级别控制转储信息 232
C.5 文件头转储 232
C.5.1 语法 232
C.5.2 使用级别控制转储信息 233
C.6 控制文件转储 234
C.6.1 语法 234
C.6.2 使用级别控制转储信息 234
C.7 堆转储 234
C.7.1 语法 235
C.7.2 使用级别控制转储信息 235
C.8 库高速缓存转储 236
C.8.1 语法 236
C.8.2 使用级别控制转储信息 236
C.9 进程状态转储 236
C.10 Shared Server状态转储 237
C.10.1 语法 237
C.10.2 使用级别控制转储信息 238
C.11 系统状态转储 238
C.11.1 语法 238
C.11.2 使用级别控制转储信息 238
C.12 重做日志转储 239
C.12.1 语法 239
C.12.2 使用级别控制转储信息 239
附录D 直接访问SGA 241
D.1 开销 241
D.2 安全性 242
D.3 速度 242
D.4 并发性 242
D.5 获取隐藏信息 242
D.6 X$视图简介 242
D.7 必要的成份 244
D.7.1 查找SGA ID 245
D.7.2 查找SGA基地址 245
D.7.3 查找X$KSUSECST的起始地址 246
D.7.4 查找X$KSUSECST结构中的记录大小 246
D.7.5 查找X$KSUSECST结构中的记录数 246
D.7.6 查找X$KSUSECST视图列的偏移量 247
D.8 使用C程序访问SGA 248
附录E 参考文献 253
· · · · · · (收起)
读后感
用户评价
这本书,我得说,真的给我打开了新世界的大门。我之前一直觉得Oracle的性能问题是个玄学,遇到问题只能抓瞎,然后祈祷 DBA 能奇迹般地解决。但这本书,它就像一位经验丰富的侦探,一步步教我如何去“看穿”Oracle内部的运行机制,尤其是那个叫“Wait Interface”的东西。以前我只知道数据库慢,但具体慢在哪里,为什么慢,我是一点概念都没有。这本书就从最基础的原理讲起,什么锁、什么IO、什么CPU争用,这些名词在我脑子里曾经是模糊的概念,现在都有了清晰的图景。它不是那种枯燥的理论堆砌,而是结合了大量的实际案例,告诉你如何在生产环境中遇到性能瓶颈时,能够冷静地分析,找到问题的根源。我尤其喜欢它关于Latch争用和Buffer Cache Miss的章节,以前这些词只出现在错误日志里,现在我能理解它们背后的具体含义,甚至知道如何去定位和解决。而且,这本书的排版很舒服,代码示例也很清晰,我时不时会自己动手去敲一下,加深理解。总的来说,如果你也曾经为Oracle性能问题而烦恼,这本书绝对是你绕不开的明灯,它让你从“知其然”上升到“知其所以然”,真正掌握性能诊断的核心技能。我推荐这本书给所有想要深入理解Oracle性能的开发者、DBA,甚至是运维人员,它绝对是值得反复阅读的宝藏。
这本书给我最直观的感受,就是它把Oracle数据库这个庞大的系统,拆解成了一个个可理解、可操作的模块,并且通过“等待事件”这个统一的接口,让我们能够窥探其内部的运行状态。作者在讲解时,非常注重逻辑的连贯性和知识的递进性,从最基础的数据库架构,到各种等待事件的产生机制,再到具体的诊断和调优工具的使用,都讲解得非常透彻。我尤其喜欢书中关于“Latch Free”和“Buffer Busy Waits”的对比分析,这让我明白了,即使都是锁相关的等待,其本质和调优方向也可能完全不同。这本书不仅仅是告诉你如何去“发现”性能问题,更重要的是,它教会你如何去“预防”性能问题的发生。通过理解Wait Interface,你可以提前预判可能出现的性能瓶颈,并在系统上线前就进行相应的优化。我之前负责维护的一个大型电商平台,在促销期间经常会出现性能急剧下降的情况,自从我开始运用这本书中的方法进行事前分析和事后诊断,已经大大减少了此类问题的发生。这本书的价值,是能够帮助你构建一个更稳定、更高效的Oracle数据库系统。
坦白说,我之前对Oracle的性能诊断一直感到力不从心,总觉得隔着一层纱,看不清楚问题的本质。直到我翻开了这本《Oracle Wait Interface性能诊断与调整实践指南》,我才真正感觉自己找到了“钥匙”。这本书的内容非常扎实,作者对Oracle内部运行机制的讲解,细致入微,每一个等待事件的背后,都有一套完整的解释和分析逻辑。它不仅仅是教你识别等待事件,更重要的是,它告诉你如何去深入挖掘这些等待事件背后的原因。比如,当遇到“db file sequential read”这样的等待时,你可能知道是IO问题,但这本书会告诉你,是哪个SQL语句引起的,是哪个表引起的,是哪种IO设备引起的,甚至是如何去优化这个IO访问模式。这种细致的分析,让我能够精准地定位问题,而不是大海捞针。我特别喜欢书中关于Trace文件和SQL Trace的讲解,这些工具虽然强大,但如果没有正确的指导,很容易让人迷失在海量的数据中。这本书就像一个向导,带我穿越这些数据迷宫,找到真正的性能瓶颈。这本书的语言风格也很平实,即使是比较晦涩的技术概念,也能被讲解得清晰易懂。我强烈推荐这本书给所有渴望提升Oracle性能诊断和调优能力的IT从业者。
作为一名在Oracle数据库领域摸爬滚打多年的老兵,我始终觉得性能优化是一个永无止境的探索过程。市面上的Oracle性能调优书籍不在少数,但真正能做到深度和广度兼具,并且实操性极强的,却寥寥无几。《Oracle Wait Interface性能诊断与调整实践指南》恰恰填补了这一空白。这本书的作者显然对Oracle的内部机制有着极其深刻的理解,他用一种非常有条理、逻辑清晰的方式,将复杂的Wait Interface概念一一呈现在读者面前。从Session层面的等待,到System层面的争用,再到IO子系统和内存管理的瓶颈,这本书几乎涵盖了所有可能影响数据库性能的关键点。我特别欣赏书中对SQL执行计划和等待事件之间的关联分析,这才是性能诊断的核心所在。很多时候,我们只关注SQL语句本身的写法,却忽略了SQL在执行过程中所消耗的资源,以及与其他进程之间的竞争。这本书就教会我如何将这两者完美地结合起来,通过分析等待事件,反过来推断SQL执行过程中可能存在的问题,从而找到最佳的优化方向。它不仅仅是一本“手册”,更像是一本“武功秘籍”,教会你如何运用内力去感知和解决问题。我强烈推荐给所有希望在Oracle性能调优领域有所突破的同行们,这本书绝对能让你在职业生涯中迈上一个全新的台阶。
我想强调的是,这本书的实用性超出了我的预期。我之前买过一些Oracle性能调优的书籍,很多都是理论性比较强,看完之后觉得受益匪浅,但在实际工作中却不知道如何应用。而这本《Oracle Wait Interface性能诊断与调整实践指南》,则完全是另一回事。它从实际工作中遇到的各种典型性能问题出发,讲解Wait Interface的概念,并且提供了非常具体的诊断步骤和调优方法。书中的案例分析非常到位,我能够看到作者是如何一步步地分析问题,找到原因,并最终解决的。例如,书中关于“log file sync”等待的分析,就帮助我解决了一个困扰团队很久的日志写入延迟问题。通过深入理解这个等待事件,我们才意识到,并不是数据库本身的问题,而是存储IO的瓶颈。这本书让我觉得,性能调优不再是碰运气,而是可以像科学实验一样,通过严谨的分析和推理来解决。如果你希望你的Oracle数据库能够跑得更快、更稳定,这本书绝对是你的首选。它不仅教会你“做什么”,更教会你“为什么这样做”,让你真正掌握性能优化的“内功心法”。
我必须说,这本书的作者是一位非常用心的技术分享者。他并没有像很多技术书籍那样,把内容写得晦涩难懂,而是用一种非常易于理解的方式,将复杂的Oracle Wait Interface概念娓娓道来。书中大量的图表和示例,让抽象的技术概念变得生动形象,易于吸收。我最欣赏的是,这本书不仅仅是讲解了Wait Interface是什么,更重要的是,它教我如何利用这些信息来指导实际的性能调优工作。例如,在讲到“enq: TM - contention”等待时,作者不仅解释了它发生的原因,还提供了具体的SQL语句来定位是哪个对象发生了锁争用,以及如何通过修改应用程序逻辑或者调整数据库参数来缓解这个问题。这种“从现象到本质,从诊断到调优”的完整闭环,让我觉得非常实用。这本书让我明白,性能调优并不是一个孤立的环节,而是需要与应用程序开发、系统架构等多个方面协同配合才能达到的目标。如果你是一名Oracle DBA,或者任何需要与Oracle数据库打交道的人,这本书都绝对是你的必读之作。它会让你对Oracle数据库的性能有更深刻、更全面的认识。
读完这本书,我最大的感受是,Oracle性能调优不再是“黑盒子”了。以前,遇到数据库慢,我可能会尝试加索引、调整SQL、重启服务,但效果往往不尽如人意,甚至有时候还会适得其反。这本书通过“Wait Interface”这个核心概念,把Oracle数据库的内部运行过程“可视化”了,让我能够清楚地看到,数据库在处理请求时,到底在“等”什么。等CPU?等IO?等锁?还是在等待某个资源被释放?理解了这些“等待”,就等于抓住了性能问题的“七寸”。书中对每一种主要的等待事件都进行了详细的分析,包括它们的产生原因、影响因素以及相应的调优策略。我尤其印象深刻的是关于“Enqueue”等待的章节,它让我明白了,很多时候,性能问题并不是因为SQL本身效率低下,而是因为多个进程之间对资源的争用,而“Enqueue”就是这种争用的直观体现。通过这本书,我学会了如何利用AWR、ASH等工具,结合Wait Event信息,来找出系统中真正的瓶颈所在,并采取有效的措施去解决。这本书的价值,不仅仅在于它提供的技术方法,更在于它改变了我对Oracle性能问题的认知方式。
这本书的价值,在于它提供了一种全新的视角来看待Oracle数据库的性能问题。过去,我们可能更多地关注SQL语句的优化,比如索引的使用、SQL重写等,这些方法固然重要,但有时候,即使SQL写得再好,也可能因为底层资源争用或者IO瓶颈而无法达到预期效果。这本书引入了“Wait Interface”的概念,让我意识到,性能问题往往是多方面因素综合作用的结果。它详细地解释了Oracle是如何管理资源的,以及在资源分配过程中可能发生的各种“等待”。这些等待,就像是数据库在向我们传递“生病”的信号。书中的每一个章节,都像是在教我们如何解读这些信号。例如,关于Latch等待的章节,让我明白了CPU核心之间的竞争是多么的激烈,以及如何通过调整参数或者优化代码来减少这种争用。又比如,关于Buffer Cache Miss的分析,让我意识到内存的管理和数据的访问模式对性能有着多么大的影响。这本书不是简单地告诉你“怎么做”,而是告诉你“为什么这样做”,这种深度的讲解,让我能够举一反三,在面对新的性能问题时,能够迅速找到切入点。它让我从一个“调参工”变成了一个“性能分析师”,这种转变,是无价的。
我抱着试试看的心态买下了这本《Oracle Wait Interface性能诊断与调整实践指南》,说实话,一开始我对“Wait Interface”这个概念并没有太多的概念,觉得可能是一些比较底层的、不太容易理解的东西。但读下来之后,我彻底被这本书的深度和实用性征服了。作者并没有像很多技术书籍那样,只是简单罗列一些命令和参数,而是深入浅出地剖析了Oracle数据库在执行SQL语句时,各个组件之间如何协作,以及在协作过程中可能出现的各种“等待”事件。这些等待事件,就是性能问题的直接表现。书里详细讲解了各种主要的等待事件,比如CPU time、IO completion、lock contention等等,并且给出了具体的诊断方法和调优思路。我最喜欢的是它对AWR(Automatic Workload Repository)报告的解读,以前我拿到AWR报告,只能看到一堆数字,完全不知道怎么下手。这本书给了我一个清晰的框架,教我如何从AWR报告中提取关键信息,识别出最耗时的等待事件,然后有针对性地进行优化。它不仅告诉你“是什么”,更告诉你“为什么”,以及“怎么做”。我之前负责的一个项目,数据库响应速度一直不理想,尝试了很多常规的优化手段效果都不大,直到我用了书里的方法,深入分析了Wait Event,才发现问题出在一个之前没注意到的IO瓶颈上。这本书真的让我从一个“性能小白”变成了能够独立分析和解决问题的“性能达人”。
这本书最大的优点在于,它不是一本“教你几招”的速成手册,而是一本真正能够提升你Oracle数据库“内功”的书籍。作者在讲解Wait Interface时,并没有停留在表面,而是深入到Oracle的内部实现细节,让我们能够理解为什么会出现某种等待,以及这种等待对系统会产生什么样的影响。我之前一直对SQL调优情有独钟,但这本书让我意识到,很多时候,SQL的效率只是影响性能的一个方面,而更深层次的资源争用和IO瓶颈,才是导致性能问题的罪魁祸首。书中对各种等待事件的分类和解读,非常清晰,并且提供了很多实用的诊断技巧。例如,关于“PX Deq: Execution Started”这样的等待,如果不知道其背后的含义,很容易误判。但这本书给了我明确的指引,让我能够准确地识别并行执行中的问题。总的来说,这本书的深度和广度都非常出色,它不仅能够帮助你解决眼前的性能问题,更重要的是,它能够从根本上提升你对Oracle数据库的理解能力,让你在未来的工作中,能够更加游刃有余地应对各种性能挑战。
简单明了,非常值得一读
简单明了,非常值得一读
简单明了,非常值得一读
简单明了,非常值得一读
简单明了,非常值得一读