首页>参考读物>计算机科学与技术>数据库

Oracle高性能SQL引擎剖析:SQL优化与调优机制详解
作者 : 黄玮 著
丛书名 : 数据库技术丛书
出版日期 : 2013-01-07
ISBN : 978-7-111-40704-1
定价 : 89.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 469
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书是Oracle数据库性能优化领域的里程碑之作,通过对Oracle高性能SQL引擎的深入剖析,深刻揭示了Oracle SQL的优化与调优机制、核心技术,以及性能优化的思想方法,是作者十余年工作经验与研究心得的结晶,包含大量技巧与最佳实践。
全书共分为三个部分。第一篇“执行计划”,首先详细讲解了各种执行计划的含义与操作,为后面的深入分析打下基础;然后重点讲解了执行计划在SQL语句执行的生命周期中所处的位置和作用,SQL引擎如何生成执行计划以及如何获取SQL语句的执行计划,如何从各种数据源显示和查看已经生成执行计划等。第二篇“SQL优化技术”,深入分析了Oracle的SQL优化技术,包括逻辑优化技术和物理优化技术,用大量示例详尽分析了Oracle 中现有的各种查询转换技术。第三篇“SQL调优技术”,深入剖析了Oracle提供的各项调优技术,首先对语句实际运行的性能统计数据进行了深度分析,介绍了各项统计数据是由什么操作导致的以及如何统计;然后讲解了如何对SQL语句进行优化,以及如何获得稳定、高效的性能;最后,根据对SQL优化及调优技术的分析,总结如何快速优化SQL的思路。

图书特色

黄玮是个实证派,而研究优化器算法,也唯有实证派才能够胜任。他通过大量测试进行推演,从而破解CBO计算法则,这不仅需要深入的计算机知识,也需要极大的耐心和毅力。这满纸的公式与数字对于读者来说,可能会成为过眼云烟;而对于作者来说,却是锱铢必较的艰苦之旅。
—— 盖国强  云和恩墨创始人、Oracle ACE总监、ITPUB论坛超级版主

对于数据库管理员和开发人员来说,SQL引擎的行为复杂且不透明,其查询转换过程、代价估算过程和选择过程有很多的统计数据和计算结果;而Oracle引入的一些新的调优技术也会对优化结果产生影响。当这些内部过程受到干扰,以至于无法获得理想的结果时,就会对产生性能问题的SQL语句无从下手。
本书最大限度地解析了SQL引擎的内部优化和调优过程,分析了相关的技术原理,并提供实例给读者参考,以便读者再次遇到此类问题时,有能力进行分析并解决。

主要内容:
深刻解读各种执行计划的原理与操作。
执行计划在SQL语句执行的生命周期中所处的位置和作用。
SQL引擎如何生成执行计划以及如何获取SQL语句的执行计划。
如何查看和理解执行计划。
深入分析Oracle的SQL优化技术,包括逻辑优化技术和物理优化技术。
用大量示例详尽分析Oracle 10g、11g中各种查询转换技术。
分析Oracle如何收集、获取系统和对象的统计数据。
推导出各种代价估算公式。
深入剖析Oracle提供的各项调优技术。
对语句实际运行的性能统计数据进行深度分析。
如何对SQL语句进行优化以及获得稳定、高效的性能。
依据对SQL优化及调优技术的分析,介绍如何快速优化SQL的思路。


作者简介
黄玮(Fuyuncat),资深Oracle DBA,从事Oracle数据库管理、维护与开发工作十余年,有丰富的大型数据库设计、开发与维护方面的经验,涉及航空、水利、军工、电信等多个行业。曾供职于某世界著名物流公司,负责公司的电子物流系统的数据库开发和维护工作。2005年创建了个人网站www.HelloDBA.com,致力于数据库底层技术的研究,整理和发布了大量关于数据库系统底层机制、存储结构、性能调优以及基础算法方面的文章,获得广大同行的高度评价。开发了多个与数据恢复、性能监控、内核跟踪相关的免费实用工具,深受欢迎,为Oracle社区做出了很大贡献。

图书前言

作为一个数据库管理系统来说,Oracle不仅具备为用户存储和管理海量数据的能力,还能够解析用户提交结构化查询语言(Structured Query Language,SQL)的请求,高效和快速地响应请求。为了保证语句的查询效率,Oracle开发了许多技术,从各个方面提供支持,例如,物理设计、内存管理和SQL语句本身的自动优化与调优。
各种基于数据库的系统中,绝大多数功能都需要通过数据库管理系统查询和操作数据,因而后台的性能对系统整体性能的影响是相当关键的。而要实现对数据的管理与查询,程序需要通过SQL语句对数据库发起相应的请求。也就是说,SQL语句的性能成为影响系统性能至关重要的因素。
Oracle数据库作为目前市场占有量最大的关系型数据库管理系统,拥有成千上万的专利技术保证数据库系统的性能。而对于应用系统性能影响重大的SQL引擎,Oracle更是提供了强大的技术保障,不仅采用了主流数据库系统当中优化效果最好的优化模式—基于代价的优化模式,还引入了数量庞大的、有别于其他数据库系统的专利优化技术。这些优化技术使得Oracle在SQL优化和调优方面独树一帜。
然而,尽管Oracle可能已经在内部帮助我们完成了99%的优化工作,但剩余的1%仍然可能成为导致性能下降的决定因素。因此,在Oracle数据库系统当中,发生性能问题的例子还是层出不穷。并且,以作者的个人经历来看,这些性能问题绝大多数是由SQL语句引起的。因此,深入理解和掌握Oracle的SQL语句优化和调优技术,是开发人员和数据库管理员都应掌握的,也是开发出性能高效的数据库系统的必要前提。
本书结合作者多年来对Oracle的SQL内部优化机制的研究以及SQL调优的经验,深入分析了Oracle的各项SQL语句的优化与调优技术,侧重于对这些技术的内部机制的介绍,目的是帮助读者更加深入地了解和消化这些技术,使读者在面对和解决由SQL引起的性能问题时,能透彻地看清问题的本质,迅速找到有效的解决方法。
SQL优化是指在语句运行之前,由SQL引擎对语句进行解析,采用各项技术对查询进行优化,找到其最佳的执行路径,即执行计划;SQL调优则是对已经存在执行计划的语句进行进一步调整,使其运行性能更加接近性能指标的要求,达到性能改进的目的。SQL优化与SQL调优是在改善SQL语句性能的过程中,两个不同阶段实施的技术与方法。SQL优化,基本上是由优化器根据当前环境和数据实施的内部优化措施;SQL调优,则是通过对语句、物理对象以及优化环境的干预,使得优化器能够选择到最优的SQL执行方式。因此,这两个方面的技术内容是相辅相成的。
在RBO时期(9i之前),由于优化技术的限制,使得SQL语句往往不能获得最佳的执行计划,从而导致性能低下,需要依赖于开发人员或数据库管理员的经验和技能,对语句进行人工干预,从而调整其性能。可以说,这个时期的优化技术是有限的,并且优化与调优过程比较独立。进入CBO时代后,统计数据(Statistics Data)为优化器采用更加智能和复杂的优化技术提供了有力的数据保障,越来越多的基于代价的优化技术被应用到了Oracle的SQL引擎当中。同时,这也使得自动和智能化的优化技术成为可能。在10g、11g当中,Oracle引入了多项新的优化技术。这些优化技术不仅仅能针对当前的运行结果进行调优,而且能对优化环境和物理设计等影响优化效果的因素进行深入检查,提供短期和长期的各种调优建议。并且,部分调优结果还可以在语句的下一个执行周期中影响其优化方法。这就使得优化与调优技术更加紧密地结合在一起,为SQL语句提供一个稳定、高效的运行性能。
简单地说,我们在调整SQL语句性能时,需要灵活地使用SQL调优技术,使得SQL语句在优化阶段能够获得真正最佳性能的执行计划。图0-1描述了SQL优化与SQL调优在改进性能过程中所处的位置以及相互作用的方式。希望读者可以先通过该图体会到这两方面技术之间的关系,在后续的阅读和学习过程中能清楚地知道各种技术在提高性能过程中的作用。
无论是SQL优化还是调优,它们的核心内容都是执行计划(Execution Plan)。许多相关技术,例如查询转换、SQL调用配置(SQL Profile)都是围绕执行计划这一要素展开的。本书将从执行计划开始,逐步剖析Oracle的SQL优化与调优的相关技术。
本书分为三篇、共八章。
第一篇解释什么是SQL语句的执行计划。主要内容包括:执行计划在SQL语句执行的生命周期中所处的位置和作用;SQL引擎如何生成执行计划以及如何手工生成一条语句的执行计划;如何从各种数据源显示和查看已经生成的执行计划。本篇的重点部分则是向读者解释如何读懂执行计划,包含执行计划结构解析、各种数据所代表的含义、执行计划各种操作的含义和示例,以及执行计划与内部函数之间的本质关系。
第二篇深入分析Oracle的SQL优化技术。总体上来说,SQL优化技术可以分为两类:逻辑优化技术和物理优化技术。其中,逻辑优化主要是指查询转换技术。本篇当中详尽地分析了10g、11g中现有的各种查询转换技术,并给出实际示例帮助读者理解这些技术。而物理优化则指的是优化器通过代价估算来选择最佳的执行计划。优化器要正确估算执行计划及其操作的代价,则需要准确的统计数据的支持。因此本书在分析优化器的代价估算方法之前,先分析Oracle如何收集、统计系统和对象的统计数据。然后,结合作者推导出的各种代价估算公式,演示了各种情形下的代价计算方法。

图0-1 SQL性能改进过程
第三篇详细介绍和分析Oracle提供的各项调优技术。在进行SQL调优时,尤其是对已经产生了实际的性能问题的SQL语句进行调优时,我们需要参考SQL语句的实际运行的性能统计数据。因此,本篇先对语句实际运行的性能统计数据进行了深度分析,向读者介绍了各项统计数据是由什么操作导致的以及如何统计。其次,介绍Oracle的各项调优技术,深入分析这些技术如何对SQL语句进行优化,以及如何使用这些技术帮助SQL语句获得稳定、高效的性能。最后,依据对SQL优化及调优技术的分析,向读者介绍了如何快速优化SQL的思路。
在本书中有不少演示代码用于解释相关知识点。读者请执行脚本00_01_Prepare.sql(进入Oracle 11g中再执行00_01_Prepare_11g.sql)准备演示环境。本书所介绍的内容将基于10g和11g的版本特性,其中有部分脚本只能用于相应版本,请注意提示。
www.HelloDBA.com是作者专属的个人网站,是作者分享个人经验和心得的重要平台。本书中使用的所有代码脚本都会放在本网站上供读者免费下载。此外,因篇幅问题而删减的附录“SQL提示的含义和示例”也将以电子文档的形式提供读者免费阅读。读者在阅读本书过程中,如有任何疑问,可以给作者发送电子邮件:fuyuncat@gmail.com,也可以关注作者的微博(http://www.weibo.com/u/1407854870)。

上架指导

计算机\数据库

封底文字

黄玮是个实证派,而研究优化器算法,也唯有实证派才能够胜任,他通过大量测试进行推演,从而破解CBO计算法则,这不仅需要深入的计算机知识,也需要极大的耐心和毅力,这满纸的数字对于读者来说,可能会成为过眼云烟,而对于作者来说,却是锱铢必较的艰苦之旅。
——盖国强
云和恩墨创始人、Oracle ACE总监、ITPUB论坛超级版主

对于数据库管理员和开发人员来说,SQL引擎的行为复杂且不透明,其查询转换过程、代价估算过程和选择过程有很多的统计数据和计算结果,而Oracle引入的一些新的调优技术也会结合优化过程实现调优目的,并对优化结果产生影响。当这些内部过程受到干扰,以至于无法获得理想的结果时,就对产生性能问题的SQL语句无从下手。
本书最大限度的解析了SQL引擎的内部优化和调优过程,分析了相关的技术原理,并提供实例给读者参考。目的就是让读者再次遇到此类问题时,有足够的技术做参考,自我分析和解决相关问题。

主要内容:
? 深刻解读各种执行计划的原理与操作。
? 执行计划在SQL语句执行的生命周期中所处的位置和作用。
? SQL引擎如何生成执行计划以及如何获取SQL语句的执行计划。
? 如何查看和理解执行计划。
? 深入分析Oracle的SQL优化技术,包括逻辑优化技术和物理优化技术。
? 用大量示例详尽分析Oracle 10g、11g中现有的各种查询转换技术。
? 分析Oracle如何收集和获取系统和对象的统计数据。
? 推导出的各种代价估算公式,给出各种情形下的代价计算演示。
? 深入剖析Oracle提供的各项调优技术。
? 对语句实际运行的性能统计数据进行深度分析,以及在各种SQL操作过程中,各项数据是如何统计得出的。
? 如何对SQL语句进行优化以及获得稳定、高效的性能
? 依据对SQL优化及调优技术的分析,介绍如何快速优化SQL的思路

作者简介

黄玮 著:暂无简介

图书目录


前言
第一篇 执行计划
第1章 生成和显示执行计划 / 3
1.1 生成执行计划 / 3
1.2 显示执行计划 / 4
1.2.1 通过查询语句显示计划 / 4
1.2.2 通过包DBMS_XPLAN显示计划 / 4
1.2.3 AUTOTRACE / 12
1.2.4 其他方法 / 13
第2章 解读执行计划 / 15
2.1 执行计划的基本数据 / 15
2.2 内部函数与操作 / 17
2.3 执行计划各个列的含义 / 19
2.4 执行计划各个操作的含义 / 21
2.4.1 语句类型 / 21
2.4.2 访问路径方法 / 23
2.4.3 位图操作 / 31
2.4.4 排序操作 / 33
2.4.5 关联操作 / 36
2.4.6 层次查询操作 / 42
2.4.7 视图操作 / 45
2.4.8 数据集合操作 / 45
2.4.9 分区操作 / 48
2.4.10 并行查询操作 / 51
2.4.11 聚合操作 / 57
2.4.12 分析函数操作 / 58
2.4.13 模型化操作 / 60
2.4.14 数据和对象管理操作 / 63
2.4.15 其他操作 / 65
2.5 执行计划中其他信息的含义 / 69
2.5.1 查询块和对象别名 / 69
2.5.2 计划概要数据 / 70
2.5.3 绑定变量信息 / 70
2.5.4 分布式查询语句信息 / 72
2.5.5 注释 / 72
第二篇 SQL优化技术
第3章 查询转换 / 75
3.1 启发式查询转换 / 75
3.1.1 简单视图合并 / 76
3.1.2 子查询反嵌套 / 81
3.1.3 子查询推进 / 86
3.1.4 旧关联谓词推入 / 87
3.1.5 简单过滤谓词推入 / 90
3.1.6 谓词迁移 / 91
3.1.7 “或”操作扩张 / 91
3.1.8 物化视图查询重写 / 92
3.1.9 集合操作关联转变 / 94
3.1.10 由约束生成过滤谓词 / 95
3.1.11 星形转换 / 96
3.1.12 排序消除 / 98
3.1.13 DISTINCT消除 / 99
3.1.14 表消除 / 99
3.1.15 子查询合并 / 102
3.1.16 公共子表达式消除 / 104
3.1.17 计数函数转变 / 105
3.1.18 表达式和条件评估 / 105
3.1.19 聚集子查询消除 / 111
3.1.20 DISTINCT聚集函数转换 / 111
3.1.21 选择字段裁剪 / 113
3.1.22 DISTINCT消除 / 114
3.1.23 DISTINCT推入 / 114
3.1.24 集合分组查询转换 / 115
3.1.25 集合分组查询重写 / 115
3.1.26 集合分组裁剪 / 117
3.1.27 外关联消除 / 118
3.1.28 真正完全外关联 / 119
3.1.29 左(右)外关联转换为侧视图 / 120
3.2 基于代价的查询转换 / 123
3.2.1 复杂视图合并 / 123
3.2.2 关联谓词推入 / 124
3.2.3 谓词提取 / 126
3.2.4 GROUP BY配置 / 127
3.2.5 表扩张 / 128
3.2.6 关联因式分解 / 130
3.2.7 DISTINCT配置 / 131
3.2.8 WITH子查询转换 / 132
第4章 统计数据 / 134
4.1 系统统计数据 / 134
4.1.1 系统统计数据收集 / 136
4.1.2 系统统计数据管理 / 137
4.1.3 根据系统负载状况灵活管理 / 140
4.1.4 全局参数管理 / 142
4.1.5 项管理 / 143
4.2 对象统计数据 / 146
4.2.1 表统计数据 / 150
4.2.2 索引统计数据 / 150
4.2.3 字段统计数据 / 151
4.2.4 扩展统计数据 / 152
4.2.5 对象统计数据的管理 / 153
4.2.6 “待定”统计数据的管理 / 160
4.3 对象统计数据收集过程分析 / 161
4.3.1 表统计数据收集与计算 / 161
4.3.2 字段统计数据收集与计算 / 164
4.3.3 柱状图数据收集与计算 / 170
4.3.4 索引统计数据收集与计算 / 182
第5章 执行计划的代价估算 / 186
5.1 代价模型 / 187
5.2 基本代价计算公式 / 187
5.3 选择率计算 / 190
5.3.1 单过滤条件 / 190
5.3.2 绑定变量无具体数值 / 190
5.3.3 绑定变量有数值无柱状图 / 191
5.3.4 使用柱状图 / 192
5.3.5 过滤条件的组合 / 196
5.4 多数据块读操作代价计算 / 197
5.4.1 代价模型 / 197
5.4.2 IO代价计算 / 199
5.4.3 CPU代价计算 / 202
5.4.4 执行计划中其他数据的计算 / 209
5.4.5 全表扫描代价计算演示 / 209
5.5 并行扫描操作代价计算 / 218
5.5.1 IO代价计算 / 219
5.5.2 CPU代价计算 / 221
5.6 单数据块读操作代价计算 / 222
5.6.1 IO代价计算 / 222
5.6.2 CPU代价计算 / 226
5.6.3 单数据块读操作代价计算演示 / 228
5.7 排序操作代价计算 / 233
5.7.1 是否需要写入磁盘 / 233
5.7.2 IO代价计算 / 234
5.7.3 CPU代价计算 / 236
5.7.4 临时磁盘空间计算 / 236
5.7.5 排序代价计算演示 / 237
5.8 关联操作代价计算 / 241
5.8.1 关联选择率 / 242
5.8.2 嵌套循环关联代价计算 / 242
5.8.3 排序合并关联代价计算 / 249
5.8.4 哈希关联代价计算 / 252
5.9 并行模式下的关联代价计算 / 260
5.9.1 IO代价计算 / 262
5.9.2 CPU代价计算 / 263
5.9.3 代价计算演示 / 263
第三篇 SQL调优技术
第6章 SQL语句运行性能分析 / 270
6.1 性能统计数据 / 270
6.1.1 逻辑读 / 272
6.1.2 一致性获取 / 273
6.1.3 一致性直接获取 / 273
6.1.4 由缓存一致性获取 / 273
6.1.5 一致性修改 / 274
6.1.6 数据块修改 / 275
6.1.7 物理读入缓存 / 276
6.1.8 物理预提取读入缓存 / 276
6.1.9 排序数据行 / 277
6.1.10 递归调用 / 278
6.2 逻辑读分析 / 280
6.2.1 一致性读分析 / 280
6.2.2 当前模式读分析 / 309
6.3 物理读分析 / 319
6.3.1 物理直接读 / 319
6.3.2 物理读入缓存与LRU算法 / 378
第7章 Oracle调优技术 / 387
7.1 存储概要 / 387
7.1.1 什么是存储概要 / 388
7.1.2 创建存储概要 / 389
7.1.3 管理存储概要 / 391
7.1.4 使用存储概要 / 392
7.2 SQL执行计划管理 / 394
7.2.1 创建和增加执行计划基线 / 395
7.2.2 进化历史执行计划 / 405
7.2.3 优化器从基线中选择执行计划 / 407
7.3 Oracle自动调优 / 409
7.3.1 创建调优任务 / 410
7.3.2 SQL调优建议器的参数 / 410
7.3.3 自动调优分析 / 412
7.4 SQL性能分析器 / 423
7.4.1 性能分析过程 / 424
7.4.2 SQL性能分析示例 / 426
7.5 SQL访问建议器 / 428
7.5.1 建议器选择新索引分析过程 / 428
7.5.2 使用SQL访问建议器 / 433
第8章 快速调优思路 / 441
8.1 统计数据检查 / 441
8.2 从执行计划中找到潜在问题 / 444
8.2.1 是否存在多个游标 / 444
8.2.2 输出结果中特别注释 / 447
8.2.3 存在潜在性能问题的操作 / 448
8.2.4 谓词信息 / 452
8.2.5 概要数据以及优化器环境检查 / 455
8.3 物理设计优化 / 456
8.3.1 索引 / 456
8.3.2 分区 / 457
8.3.3 物化视图 / 458
8.3.4 约束 / 458

教学资源推荐
作者: 寿建霞 毛国红 张繁
作者: (葡)Luis Torgo 著
作者: Abraham Silberschatz;Henry F. Korth;S. Sudarshan
参考读物推荐
作者: (美)Donald K.Burleson
作者: (美)Jason S.Couchman
作者: Scott Urman