Oracle高性能SQL引擎剖析:SQL优化与调优机制详解

Oracle高性能SQL引擎剖析:SQL优化与调优机制详解
作 者: 黄玮
出版社: 机械工业出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: Oracle 计算机/网络 数据库
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

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

内容简介

Oracle数据库的性能优化直接关系到系统的运行效率,而影响数据库性能的一个重要因素就是SQL性能问题。本书是作者十年磨一剑的成果之一,深入分析与解剖OracleSQL优化与调优技术,主要内容包括: 第一篇“执行计划”详细介绍各种执行计划的含义与操作,为后面的深入分析打下基础。重点讲解执行计划在SQL语句执行的生命周期中所处的位置和作用,SQL引擎如何生成执行计划以及如何获取SQL语句的执行计划,如何从各种数据源显示和查看已经生成的执行计划。 第二篇“SQL优化技术”深入分析Oracle的SQL优化技术,包括逻辑优化技术和物理优化技术。用大量示例详尽分析Oracle中现有的各种查询转换技术,先分析Oracle如何收集、统计系统和对象的数据,然后推导各种代价估算公式,给出各种情形下的代价计算演示。 第三篇“SQL调优技术”深入剖析Oracle提供的各项调优技术。先对语句实际运行的性能统计数据进行了深度分析,介绍各项统计数据是由什么操作导致的以及如何统计。然后介绍如何对SQL语句进行优化以获得稳定、高效的性能。最后,依据对SQL优化及调优技术的分析,介绍如何快速优化SQL的思路。 本书内容丰富且深入,破解了Oracle技术的很多秘密,适合Oracle数据库管理员、应用开发人员参考。

图书目录

前言

第一篇 执行计划

第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