编辑推荐
适读人群 :本书适合性能分析人员、Oracle 数据库应用程序开发人员与数据库管理员阅读参考。 前端业务应用炙手可热之日,便是优化后端数据库性能之时。当此之际,身怀数据库优化绝技,可以让你平步职场,傲视群英。
本书是Oracle数据库优化专家Christian Antognini的一部继往开来的里程碑式著作。书中的佳实践和诸多建议全部来源于作者在实战一线的丰富积累不仅简单实用,而且发人深省,堪称一座“宝库”,适合各层次读者研读和发掘。
与其他同类图书不同,本书不仅涵盖了当前可用的各种Oracle版本,还指明了各个版本独有的性能优化特性。全书以崭新的视角开篇立论,围绕查明问题真相和搜寻有效方略,透彻讲解了查询优化器的配置,表访问、连接和物理表布局的优化,以及加速SQL执行计划等重要主题,被读者誉为“透彻,但又通俗的性能优化好书”。
与本书第一版相比,作者增加了关于Oracle Database 11g和Oracle Database 12c的内容,补充了层次剖析工具、ASH、AWR和Statspack等知识点,并根据可读性重新组织了部分素材。
内容简介
本书是兼具技术性与指导性的参考手册。书中首先介绍了全书所需的基础知识;接着描述如何借助相关工具识别和分析性能问题,如何利用动态性能视图;接着重点关注负责将SQL语句生成执行计划的组件——查询优化器;后则展示了Oracle数据库为高效执行SQL语句提供的特性。
作者简介
Christian Antognini,资深数据库专家,从1995年就开始致力于探究Oracle数据库引擎的工作机制。长期关注逻辑与物理数据库的设计、数据库与Java应用程序的集成、查询优化器以及与性能管理和优化相关的各个方面。目前任瑞士苏黎世Trivadis公司首席顾问和性能教练,是OakTable网站核心成员。
王作佳,吉林长春人,毕业于太原工业学院。历任Java开发工程师、Oracle数据库管理员,现就职于北京一家服务公司,任职Oracle DBA,负责某省联通数据库高可用架构部署维护、数据库性能调优等。目前对Oracle数据库高可用及性能调优较为感兴趣,另外有意进军内存数据库领域。
刘迪,辽宁锦州人,毕业于辽宁工业大学。Oracle数据库工程师、10g OCM,现服务于北京某银行,任职Oracle数据库工程师,负责客户现场维护工作。主要关注Oracle数据库及其相关技术。
精彩书评
“互联网上充斥着大量的Oracle性能相关信息,不但高度碎片化,而且有很多是错误的。本书则异常清晰地给出了Oracle性能相关的理论和实践,明确指导读者找到需要达成的目的以及如何达成目的。”
——Jonathan Lewis,世界级Oracle技术专家,英国Oracle用户组织总监,《Oracle核心技术》作者
“这是一本技术与理念并重的参考书,不仅包含了大量完备的可重用的实例,而且包含了一些富有说服力的新观点。我可以用他的观点去说服更多的人做正确的事。”
——Cary Millsap,Method R公司首席执行官,Oracle公司系统性能集团前副总裁,数据库性能技术大师
目录
第一部分 基 础
第1章 性能问题 2
1.1 需要为性能做规划吗 2
1.1.1 需求分析 2
1.1.2 分析与设计 4
1.1.3 编码和单元测试 4
1.1.4 集成和验收测试 6
1.2 为性能而设计 6
1.2.1 缺乏数据库逻辑设计 6
1.2.2 实现通用表 7
1.2.3 未使用约束加强数据完整性 7
1.2.4 缺乏数据库物理设计 7
1.2.5 未正确选择数据类型 8
1.2.6 未正确使用绑定变量 8
1.2.7 未利用数据库高级特性 8
1.2.8 未使用PL/SQL进行以数据为中心的处理 9
1.2.9 执行不必要的提交 9
1.2.10 持续打开和关闭数据库连接 9
1.3 你真的面临性能问题吗 9
1.3.1 系统监控 10
1.3.2 响应时间监控 10
1.3.3 强迫性调优障碍 10
1.4 如何处理性能问题 11
1.4.1 业务视角和系统视角 11
1.4.2 问题的编录 12
1.4.3 解决问题 12
1.5 小结 15
第2章 关键概念 16
2.1 选择率和基数 16
2.2 什么是游标 17
2.3 游标的生命周期 18
2.4 解析的工作原理 20
2.4.1 可共享游标 22
2.4.2 绑定变量 25
2.5 读写数据块 35
2.6 检测 36
2.6.1 应用程序代码 37
2.6.2 数据库调用 39
2.7 小结 42
第二部分 识 别
第3章 分析可重现的问题 45
3.1 跟踪数据库调用 45
3.1.1 SQL跟踪 45
3.1.2 跟踪文件的结构 57
3.1.3 使用TRCSESS 59
3.1.4 探查器 60
3.1.5 使用TKPROF 60
3.1.6 使用TVD$XTAT 70
3.2 探查PL/SQL代码 79
3.2.1 使用DMBS_HPROF 79
3.2.2 使用DBMS_PROFILER 85
3.2.3 触发探查器 89
3.3 小结 90
第4章 实时分析不可重现的问题 91
4.1 分析路线图 91
4.2 动态性能视图 93
4.2.1 操作系统统计信息 93
4.2.2 时间模型统计信息 94
4.2.3 等待级别和等待事件 96
4.2.4 系统和会话统计信息 100
4.2.5 度量值 101
4.2.6 当前会话状态 102
4.2.7 活动会话历史 103
4.2.8 SQL语句统计信息 111
4.2.9 实时监控 112
4.3 使用Diagnostics Pack和Tuning Pack进行分析 115
4.3.1 数据库服务器负载 115
4.3.2 系统级别分析 116
4.3.3 会话级别分析 120
4.3.4 SQL语句信息 122
4.4 不使用Diagnostics Pack进行分析 125
4.4.1 数据库服务器负载 125
4.4.2 系统级别分析 126
4.4.3 会话级别分析 129
4.4.4 SQL语句信息 130
4.5 小结 131
第5章 不可重现问题的事后分析 132
5.1 知识库 132
5.2 自动工作负载存储库 133
5.2.1 执行配置 133
5.2.2 捕获快照 134
5.2.3 管理基线 135
5.3 Statspack 136
5.3.1 执行安装 137
5.3.2 配置存储库 137
5.3.3 捕获和清除快照 138
5.3.4 管理基线 139
5.4 使用Diagnostics Pack进行分析 140
5.5 不使用Diagnostics Pack进行分析 140
5.6 小结 145
第三部分 查询优化器
第6章 查询优化器简介 148
6.1 基础知识 148
6.2 体系结构 150
6.3 查询转换 152
6.3.1 计数转换 152
6.3.2 公共子表达式消除 153
6.3.3 “或”扩张 153
6.3.4 视图合并 154
6.3.5 选择列表裁剪 155
6.3.6 谓词下推 156
6.3.7 谓词迁移 158
6.3.8 非重复放置 158
6.3.9 非重复消除 159
6.3.10 Group-by放置 159
6.3.11 Order-By消除 160
6.3.12 子查询展开 160
6.3.13 子查询合并 161
6.3.14 使用窗口函数移除子查询 162
6.3.15 联接消除 162
6.3.16 联接因式分解 163
6.3.17 外联接转内联接 163
6.3.18 完全外联接 164
6.3.19 表扩张 164
6.3.20 集合操作联接转变 165
6.3.21 星型转换 166
6.3.22 物化视图查询重写 166
6.4 小结 166
第7章 系统统计信息 167
7.1 dbms_stats包 167
7.2 有哪些系统统计信息可用 168
7.3 收集系统统计信息 170
7.3.1 无工作负载统计信息 170
7.3.2 工作负载统计信息 171
7.3.3 在无工作负载统计信息和工作负载统计信息之间进行选择 174
7.4 还原系统统计信息 174
7.5 使用备份表 175
7.6 管理操作的日志记录 176
7.7 对查询优化器的影响 177
7.8 小结 182
第8章 对象统计信息 183
8.1 dbms_stats包 183
8.2 有哪些对象统计信息可用 185
8.2.1 表统计信息 186
8.2.2 列统计信息 187
8.2.3 直方图 189
8.2.4 扩展统计信息 200
8.2.5 索引统计信息 205
8.2.6 分区对象统计信息 206
8.3 收集对象统计信息 207
8.3.1 目标对象 208
8.3.2 收集选项 212
8.3.3 备份表 217
8.4 配置dbms_stats包 218
8.4.1 传统方式 218
8.4.2 现代方式 219
8.5 处理全局临时表 221
8.6 处理挂起的对象统计信息 222
8.7 处理分区对象 223
8.7.1 挑战 223
8.7.2 增量统计信息 226
8.7.3 复制统计信息 228
8.8 调度对象统计信息的收集 229
8.8.1 10g方式 229
8.8.2 11g和12c方式 231
8.9 还原对象统计信息 232
8.10 锁定对象统计信息 234
8.11 比较对象统计信息 236
8.12 删除对象统计信息 238
8.13 导出、导入、获取和设置对象统计信息 239
8.14 管理操作的日志记录 239
8.15 保持对象统计信息为最新的策略 241
8.16 小结 242
第9章 配置查询优化器 243
9.1 配置还是不配置 243
9.2 配置路线图 244
9.3 设置正确的参数 245
9.3.1 查询优化器参数 246
9.3.2 PGA管理 260
9.4 小结 266
第10章 执行计划 267
10.1 获取执行计划 267
10.1.1 EXPLAIN PLAN语句 267
10.1.2 动态性能视图 270
10.1.3 自动工作负载存储库和Statspack 272
10.1.4 跟踪工具 274
10.2 dbms_xplan包 277
10.2.1 输出 277
10.2.2 display函数 281
10.2.3 display_cursor函数 286
10.2.4 display_awr函数 288
10.3 解释执行计划 289
10.3.1 父?子关系 290
10.3.2 操作的类型 292
10.3.3 独立操作 292
10.3.4 迭代操作 295
10.3.5 无关联组合操作 295
10.3.6 关联组合操作 297
10.3.7 分而治之 305
10.3.8 特殊情况 307
10.3.9 自适应执行计划 310
10.4 识别低效的执行计划 314
10.4.1 错误的估算 314
10.4.2 未识别限制条件 316
10.5 小结 317
第四部分 优 化
第11章 SQL优化技巧 320
11.1 修改访问结构 321
11.1.1 工作原理 321
11.1.2 何时使用 322
11.1.3 陷阱和谬误 322
11.2 修改SQL语句 322
11.2.1 工作原理 322
11.2.2 何时使用 323
11.2.3 陷阱和谬误 324
11.3 hint 324
11.3.1 工作原理 324
11.3.2 何时使用 330
11.3.3 陷阱和谬误 330
11.4 修改执行环境 332
11.4.1 工作原理 332
11.4.2 何时使用 334
11.4.3 陷阱和谬误 334
11.5 存储概要 334
11.5.1 工作原理 335
11.5.2 何时使用 343
11.5.3 陷阱和谬误 343
11.6 SQL配置文件 344
11.6.1 工作原理 345
11.6.2 何时使用 357
11.6.3 陷阱和谬误 357
11.7 SQL计划管理 358
11.7.1 工作原理 359
11.7.2 何时使用 372
11.7.3 陷阱和谬误 372
11.8 小结 373
第12章 解析 374
12.1 识别解析问题 374
12.1.1 快速解析 375
12.1.2 长解析 380
12.2 解决解析问题 381
12.2.1 快速解析 381
12.2.2 长解析 387
12.3 避开解析问题 387
12.3.1 游标共享 388
12.3.2 服务器端语句缓存 390
12.4 使用应用编程接口 392
12.4.1 PL/SQL 392
12.4.2 OCI 395
12.4.3 JDBC 396
12.4.4 ODP.NET 398
12.4.5 PHP 399
12.5 小结 400
第13章 优化数据访问 401
13.1 识别次优访问路径 401
13.1.1 识别 401
13.1.2 误区 403
13.1.3 原因 405
13.1.4 解决方案 406
13.2 弱选择性的SQL语句 409
13.2.1 全表扫描 409
13.2.2 全分区扫描 411
13.2.3 范围分区 411
13.2.4 散列和列表分区 422
前言/序言
译者序
一次偶然的机会,在浏览图灵网站新书的时候,无意间发现TOP这本书的第二版在招募译者。之前国内曾引进此书,作为Oracle性能调优领域的里程碑式著作,这本书给了国内DBA许多的启发。因此发现此书的第二版之后,当即决定了翻译意向,随后在与编辑联系并试译通过以后,即开始了翻译工作。此书原版共700余页,我在开始翻译之后马上就感觉到了压力,所以就联系了同为DBA的朋友、本人进入Oracle领域的引路人刘迪,请他帮忙分担一部分翻译工作。
此书从Oracle调优基础讲起,介绍了如何定位性能问题,同时对查询优化器的工作原理进行了详细描述,最后总结了一些常见的调优技术。作者对Oracle调优技术的细节把控方面令译者深感敬佩,其严谨的态度也是译者以及广大DBA从业者学习的榜样。在此,译者感谢原著作者的辛苦付出。
此书第1、2、6、7、8、9、10、14、15、16章以及文前部分由王作佳翻译,第3、4、5、11、12、13章由刘迪翻译。
此书在翻译过程中有很多名词术语,译者尽量全部翻译,遇到表达不准的术语时,均尽力采用网络上常见的翻译,另外多数不常见的术语译者都标注了原文以供读者参考。此书为译者第一部译作,因译者水平有限以及书中涉及技术较深,再加之译者时间有限,难免有误译漏译现象,还请读者见谅。如有发现错误,请通过译者邮箱或图灵网站联系以便修正。
在此感谢图灵公司的编辑朱巍老师,她给了我许多指导和帮助。同时感谢图灵其他编辑老师为本书付出的辛苦努力。在翻译初期,我的同事史盈盈女士给出了许多宝贵的建议,在此表示感谢。另外,感谢数据库组的同事们在翻译期间给予的理解和帮助。
王作佳
感谢我的团队在翻译期间给予的理解与支持。感谢王作佳提供的这次翻译机会,让我受益良多。感谢妻子孙婷的照顾与理解,能让我有时间专心翻译。感谢图灵的各位编辑对本书付出的努力。
刘迪
Oracle性能诊断艺术(第2版) 电子书 下载 mobi epub pdf txt