具体描述
在这本书里读者将会学到作者在性能优化方面的一些思路和思考,一些故障处理的方法和原则,这些东西是作者在实践中长期积累的心得体会,当读者掌握了一些处理问题的基本思路之后,成为一名合格的DBA就是一件轻而易举的事情了。
本书适用对象:Oracle DBA、Oracle开发人员,和其他对Oracle数据库感兴趣的人员。
作者简介
谭怀远,副总工,DBA团队负责人,在国内属于较早进入专职DBA岗位的人。是国内著名数据库论坛ITPUB的资深版主,论坛id alantany。有10年的Oracle DBA工作经验,从Oracle 8开始进入数据库领域,从Oracle 8到Oracle 8i,Oracle 9i,Oracle 10g,见证了中国DBA职业的发展历程。作者对数据库的性能优化有独到的见解,颇擅长于海量数据数据库的设计管理及优化工作。
目录信息
1.1 软件设计对数据库的影响 1
1.1.1 软件架构设计对数据库性能的影响 1
1.1.2 软件代码的编写对数据库性能的影响 2
1.2 数据库的设计 8
1.2.1 OLTP数据库 9
1.2.2 OLAP数据库 10
1.3 数据库的硬件设计 14
1.3.1 存储容量 15
1.3.2 存储的物理设计 16
1.3.3 数据的安全 17
1.4 小结 19
第2章 锁和阻塞 20
2.1 关于锁 20
2.2 锁和阻塞 22
2.3 引起阻塞的其他情况 30
2.3.1 select for update 30
2.3.2 外键和索引 36
第3章 Latch和等待 44
3.1 共享池中的Latch争用 45
.3.2 数据缓冲池Latch争用 54
3.2.1 表数据块 54
3.2.2 索引数据块 59
3.2.3 索引根数据块 62
3.2.4 段头数据块 65
第4章 优化器 66
4.1 RBO基于规则的优化器 66
4.2 CBO基于成本的优化器 69
第5章 执行计划 85
5.1 Cardinality (基数) 85
5.2 SQL的执行计划 94
第6章 Hint 109
6.1 和优化器相关的Hint 115
6.1.1 all_rows和first_rows(CBO) 115
6.1.2 RULE Hint 117
6.2 访问路径相关的Hint 117
6.2.1 FULL Hint 118
6.2.2 INDEX Hint 118
6.2.3 NO_INDEX Hint 118
6.2.4 INDEX_DESC Hint 119
6.2.5 INDEX_COMBINE Hint 119
6.2.6 INDEX_FFS 119
6.2.7 INDEX_JOIN 120
6.2.8 INDEX_SS Hint 120
6.3 表关联顺序的Hint 125
6.3.1 LEADING Hint 125
6.3.2 ORDERED Hint 126
6.4 表关联操作的Hint 127
6.4.1 USE_HASH,USE_NL和USE_MERGE Hint 127
6.4.2 NO_USE_HASH Hint 132
6.4.3 NO_USE_MERGE Hint 133
6.4.4 NO_USE_NL Hint 133
6.5 并行执行相关的Hint 134
6.5.1 PARALLEL Hint 134
6.5.2 NO_PARALLEL Hint 134
6.6 其他方面的一些Hint 135
6.6.1 APPEND Hint 135
6.6.2 DYNAMIC_SAMPLING Hint 135
6.6.3 DRIVING_SITE Hint 136
6.6.4 CACHE Hint 136
6.7 小结 136
第7章 分析及动态采样 138
7.1 直方图 141
7.2 DBMS_STATS包 147
7.3 动态采样 176
7.3.1 什么是动态采样 176
7.3.2 动态采样的级别 182
7.3.3 什么时候使用动态采样? 185
7.4 小结 185
第8章 并行执行 186
8.1 并行和OLAP系统 187
8.2 并行处理的机制 189
8.3 读懂一个并行处理的执行计划 191
8.4 一个很常见的并行执行等待事件 192
8.5 并行执行的适用范围 194
8.5.1 并行查询 194
8.5.2 并行DDL操作 195
8.5.3 并行DML操作 203
8.6 并行执行的设定 210
8.6.1 并行相关的初始化参数 210
8.6.2 并行度的设定 211
8.7 直接加载 213
8.7.1 直接加载和REDO 216
8.7.2 直接加载和索引 219
8.7.3 直接加载和并行 221
8.7.4 直接加载和SQL*LOADER 226
第9章 变量绑定 232
9.1 什么是变量绑定,为什么要做变量绑定 232
9.2 为什么说OLTP必须要求变量绑定而OLAP不应该绑定变量 241
9.3 bind peaking 248
第10章 SQL_TRACE和10046事件 254
10.1 SQL_TRACE 254
10.2 TKPROF工具 256
10.3 10046事件 268
第11章 10053事件 276
第12章 性能视图和性能参数 294
12.1 性能视图 294
12.1.1 V$SQL 295
12.1.2 V$SQL_SHARED_CURSOR 300
12.1.3 v$session 305
12.1.4 V$sessstat 309
12.1.5 V$session_wait 310
12.2 性能参数 312
12.2.1 Cursor_sharing 313
12.2.2 DB_FILE_MULTIBLOCK_READ_COUNT 328
12.2.3 PGA_AGGREGATE_TARGET和SGA_TARGET 334
12.2.4 OPTIMIZER_DYNAMIC_SAMPLING 334
第13章 性能报告 335
13.1 AWR性能报告 335
13.1.1 生成AWR性能报告 337
13.1.2 AWR性能报告分析 342
13.2 Statspack性能报告 386
13.2.1 Statspack的安装 386
13.2.2 Statspack性能采集 391
13.3 ASH性能报告 394
13.3.1 生成ASH性能报告 395
13.3.2 ASH性能报告分析 405
13.4 小结 416
附录A 常见的等待事件 417
后记 关于数据库的学习方法 434
· · · · · · (收起)
读后感
用户评价
说实话,当我决定购买这本书时,我的主要目的是想快速解决手头上一个棘手的慢查询问题,期待能找到一两个“立竿见影”的秘籍。一开始阅读时,那种偏向于底层原理和架构设计的叙述,让我有些许的焦躁,心想是不是买错了,这不像是速查手册,更像是一份详尽的工程设计文档。但是,当我耐下性子,跟随作者的思路,从一次事务的生命周期开始,逐步剖析数据获取的路径时,一切都豁然开朗了。它并没有直接给出“把这个参数设成100”的简单指令,而是构建了一个完整的因果链条:为什么这个参数会影响那个组件,进而导致整体吞吐量的下降。这种循序渐进的逻辑推导,让我不再满足于表面现象的修补,而是开始追溯问题的根源。特别是关于并行处理和成本优化器模块的介绍部分,作者用生动的比喻和非常清晰的流程图,将原本晦涩难懂的CBO(成本优化器)决策过程可视化了。我现在看执行计划时,不再是机械地对比耗时,而是能“读懂”优化器为何选择了那条路径,从而更有针对性地去引导它。
这本书的排版和配图质量着实令人称赞,这在技术书籍中并不常见。很多技术深度极高的书籍,往往因为图表过于复杂或信息密度过大而显得拥挤不堪,阅读体验很差。然而,此书在处理复杂概念时,大量使用了高分辨率、逻辑清晰的示意图,比如展示SGA和PGA内存区域如何协同工作,或者数据块的读取流程如何穿梭于缓存层和磁盘之间。这些图表不仅仅是装饰,它们是理解抽象概念的桥梁。我尤其欣赏作者在代码示例上的严谨性,每一个SQL片段、每一个PL/SQL块,都经过了精心设计,不仅能完美演示他想要说明的性能原理,而且在语法上无可挑剔,可以直接复制到测试环境进行验证。这大大减少了我因手动输入错误而产生的调试时间。对于那些依赖实践来巩固知识的学习者来说,这种高质量的配套材料是极其宝贵的。它让理论的学习过程本身,变成了一种享受,而不是一场与枯燥文字的搏斗。
这本厚重的技术手册简直是数据库优化领域的“圣经”。我原本以为自己对Oracle的性能调优已经有了相当的了解,毕竟在公司摸爬滚打了好几年,各种SQL调优、参数调整也做过不少。然而,当我翻开这本书的扉页,那种扑面而来的深度和广度就让我意识到自己之前的认知多么肤浅。它不仅仅停留在那些教科书式的标准操作流程上,而是深入到了内核级别的细节,比如内存结构的精妙划分、I/O子系统的瓶颈分析,甚至是锁竞争在并发环境下的微妙影响。作者似乎将自己多年来在无数生产环境中“踩坑”的经验都浓缩在了这些章节里,那种实战派的洞察力是理论书籍无法比拟的。我记得有一章专门讨论了延迟段的创建和管理,我之前一直简单地将其视为一种“偶尔需要处理的脏活”,但这本书揭示了它在特定负载模型下可能导致的系统级性能衰退,以及如何通过预先的规划和自动化脚本来规避这些隐患。读完后,我感觉自己不再是简单地“使用”Oracle,而是开始真正“理解”它的呼吸和脉搏了。那种从宏观架构到微观执行计划的完整视图,极大地提升了我解决复杂性能问题的信心和效率。
我必须强调,这本书的视野非常开阔,它没有将Oracle仅仅视为一个孤立的数据库系统来讨论性能,而是将其置于一个更宏大的企业级IT架构中进行审视。书中探讨了诸如存储阵列配置对数据库I/O的影响,如何通过操作系统层面的调优来配合数据库的优化,甚至涉及到虚拟化环境中处理资源争用的特殊策略。这让我意识到,数据库的“快”绝不仅仅是DBA一个人的责任,它是一个系统工程。例如,作者在谈到归档日志写入性能时,不仅仅提到了Oracle自身的redo log配置,还延伸讨论了文件系统日志的同步机制和SAN网络的延迟波动。这对于那些需要跨职能部门协作进行性能调优的资深工程师来说,提供了极好的沟通语言和分析框架。它教会我如何用更全面的视角去诊断问题,避免了“只见树木不见森林”的误区,让我的优化建议更具说服力和落地性。
这本书对于理解新版本的功能和旧版本性能差异的演变,提供了无与伦比的深度解析。我注意到,很多老旧的优化技巧在新的Oracle版本中已经不再适用,甚至可能产生反作用。作者巧妙地将不同历史版本中关键算法的迭代过程穿插讲解,这使得读者能够清晰地看到技术演进的脉络。比如,从早期版本到现代版本,位图索引的适用场景是如何随着数据分布和查询模式的变化而重新定义的。这种历史性的视角,帮助我更好地判断当前企业系统应该采用何种策略,而不是盲目套用过时的最佳实践。对于维护遗留系统或进行版本升级规划的团队来说,这种对“为什么改变”的深入剖析,比单纯的“如何做”更有价值。它培养了一种批判性思维,让我们能根据当前环境的实际情况,而非过时的教条,来制定最优的性能策略。
并行计算章节启发我把informatic读取数据部分优化后系统性能十分明显
对我来说,感觉挺不错的,基本想看的内容都在里面了,缺点就是,每一章几乎都要重复强调绑定变量不适合OLAP适合OLTP。。到了第九章还嫌不过瘾,干脆直接开了一章。。
适合入了门,对数据库性能有所思考却找不到方法的人看
并行计算章节启发我把informatic读取数据部分优化后系统性能十分明显
并行计算章节启发我把informatic读取数据部分优化后系统性能十分明显