第一部分 基础 2
第1章 性能问题 2
1.1 需要为性能做规划吗 2
1.1.1 需求分析 2
1.1.2 分析和设计 4
1.1.3 编码和单元测试 4
1.1.4 集成和验收测试 5
1.2 什么是性能问题 5
1.2.1 系统监控 6
1.2.2 响应时间监控 6
1.2.3 强迫调优失调症 6
1.3 如何解决性能问题 7
1.3.1 业务角度与系统角度 7
1.3.2 把问题分类 8
1.3.3 解决问题 8
1.4 小结 9
第2章 关键概念 10
2.1 选择性和基数 10
2.2 游标的生命周期 11
2.3 解析的过程 13
2.3.1 共享游标 15
2.3.2 绑定变量 17
2.4 读写数据块 24
2.5 小结 25
第二部分 找出问题第3章 找出性能问题 28
3.1 分而治之 28
3.2 分析路线图 29
3.3 性能测量与剖析分析 32
3.4 性能测量 32
3.4.1 应用程序代码 33
3.4.2 数据库调用 35
3.5 剖析应用程序代码 38
3.5.1 简明的性能剖析 38
3.5.2 细节化性能剖析 43
3.6 跟踪数据库调用 46
3.6.1 SQL跟踪 46
3.6.2 跟踪文件的结构 58
3.6.3 使用TRCSESS 60
3.6.4 剖析工具 61
3.6.5 使用TKPROF 62
3.6.6 使用TVD$XTAT 71
3.7 剖析PL/SQL代码 79
3.7.1 安装剖析工具 80
3.7.2 安装输出表 80
3.7.3 收集剖析数据 81
3.7.4 报告剖析数据 82
3.7.5 GUI方式 83
3.8 小结 84
第三部分 查询优化器第4章 系统和对象统计信息 86
4.1 工具包dbms_stats简介 86
4.2 系统统计 87
4.2.1 数据字典 88
4.2.2 非工作量统计信息 89
4.2.3 工作量统计信息 90
4.2.4 对查询优化器的影响 92
4.3 对象统计信息 94
4.3.1 有哪些对象统计信息可用 95
4.3.2 收集对象统计信息 108
4.3.3 锁定对象统计信息 123
4.3.4 比较对象统计信息 125
4.3.5 删除对象统计信息 127
4.3.6 保持统计信息时效性的策略 129
4.4 通用服务 130
4.4.1 统计信息历史 130
4.4.2 创建和删除备份表 131
4.4.3 导出、导入、获取和设置操作 132
4.4.4 日志 132
4.5 小结 133
第5章 配置查询优化器 134
5.1 配置还是不配置 134
5.2 配置路线图 135
5.3 设置正确的参数 136
5.3.1 查询优化器参数 137
5.3.2 PGA管理 150
5.4 小结 153
第6章 执行计划 154
6.1 获取执行计划 154
6.1.1 SQL语句EXPLAIN PLAN 154
6.1.2 动态性能视图 157
6.1.3 AWR和Statspack 161
6.1.4 跟踪功能 163
6.1.5 dbms_xplan包 165
6.2 解释执行计划 175
6.2.1 父子关系 176
6.2.2 操作类型 177
6.2.3 单独型操作 177
6.2.4 非相关联合型操作 179
6.2.5 相关联合型操作 180
6.2.6 分而治之 186
6.2.7 特殊的例子 188
6.3 识别低效的执行计划 190
6.3.1 错误的评估 190
6.3.2 未识别约束 192
6.4 小结 193
第7章 SQL优化技术 194
7.1 改变访问结构 195
7.1.1 运行机制 195
7.1.2 何时使用 196
7.1.3 缺陷和谬误 196
7.2 修改SQL语句 196
7.2.1 运行机制 196
7.2.2 何时使用 198
7.2.3 缺陷和谬误 198
7.3 提示 198
7.3.1 运行机制 198
7.3.2 何时使用 204
7.3.3 缺陷和谬误 204
7.4 改变执行环境 205
7.4.1 工作机制 206
7.4.2 何时使用 208
7.4.3 缺陷和谬误 208
7.5 SQL概要 208
7.5.1 工作机制 209
7.5.2 何时使用 219
7.5.3 缺陷和谬误 219
7.6 存储提纲 220
7.6.1 工作机制 221
7.6.2 何时使用 227
7.6.3 缺陷和谬误 227
7.7 SQL计划基线 229
7.7.1 工作机制 229
7.7.2 何时使用 240
7.7.3 缺陷和谬误 240
7.8 小结 241
第四部分 优化器 244
第8章 解析 244
8.1 识别解析问题 244
8.1.1 快速解析 245
8.1.2 长解析 248
8.2 解决解析问题 250
8.2.1 快速解析 251
8.2.2 长解析 256
8.3 应对解析问题 256
8.3.1 游标共享 257
8.3.2 服务器端语句缓存 258
8.4 使用应用编程接口 260
8.4.1 PL/SQL 261
8.4.2 OCI 264
8.4.3 JDBC 265
8.4.4 ODP.NET 266
8.5 小结 268
第9章 优化数据访问 269
9.1 找出不理想的访问路径 269
9.1.1 识别 269
9.1.2 陷阱 271
9.1.3 原因 273
9.1.4 解决办法 274
9.2 具有弱选择性的SQL语句 277
9.2.1 全表扫描 277
9.2.2 全分区扫描 279
9.2.3 范围分区 279
9.2.4 哈希与列表分区 289
9.2.5 组合分区 289
9.2.6 设计考虑 291
9.2.7 全索引扫描 293
9.3 具有强选择性的SQL语句 295
9.3.1 rowid访问 296
9.3.2 索引访问 297
9.3.3 单表哈希聚簇访问 324
9.4 小结 325
第10章 表连接优化 326
10.1 定义 326
10.1.1 连接树 326
10.1.2 连接的类型 329
10.1.3 限制条件与连接条件 332
10.2 嵌套循环连接 333
10.2.1 概念 333
10.2.2 两表连接 334
10.2.3 四表连接 335
10.2.4 块预取 336
10.2.5 其他可选的执行计划 337
10.3 合并连接 338
10.3.1 概念 338
10.3.2 两表连接 339
10.3.3 四表连接 341
10.3.4 工作区 342
10.4 哈希连接 346
10.4.1 概念 346
10.4.2 两表连接 347
10.4.3 四表连接 348
10.4.4 工作区 350
10.4.5 索引连接 350
10.5 外连接 350
10.6 选择连接方法 351
10.6.1 FIRST_ROWS优化目标 352
10.6.2 ALL_ROWS优化目标 352
10.6.3 支持的连接方法 352
10.6.4 并行连接 352
10.7 分区智能连接 353
10.7.1 完全分区智能连接 353
10.7.2 部分智能分区连接 355
10.8 转换 357
10.8.1 连接去除 357
10.8.2 外连接转换为内连接 358
10.8.3 子查询非嵌套化 359
10.8.4 星形转换 360
10.9 小结 365
第11章 高级优化技术 366
11.1 物化视图 366
11.1.1 运行机制 366
11.1.2 何时使用 384
11.1.3 缺陷与谬误 385
11.2 结果缓存 385
11.2.1 运行机制 386
11.2.2 何时使用 391
11.2.3 缺陷与谬误 391
11.3 并行处理 392
11.3.1 运行机制 392
11.3.2 何时使用 408
11.3.3 缺陷与谬误 408
11.4 直接路径插入 412
11.4.1 运行机制 412
11.4.2 何时使用 414
11.4.3 缺陷与谬误 414
11.5 行预取 415
11.5.1 运行机制 415
11.5.2 何时使用 419
11.5.3 缺陷与谬误 419
11.6 数组接口 419
11.6.1 运行机制 419
11.6.2 何时使用 422
11.6.3 缺陷与谬误 422
11.7 小结 422
第12章 优化物理设计 424
12.1 最佳字段顺序 424
12.2 最优数据类型 426
12.2.1 数据类型选择方面的陷阱 426
12.2.2 选择数据类型的最佳实践 429
12.3 行迁移与行链接 430
12.3.1 迁移与链接 431
12.3.2 问题描述 433
12.3.3 找出问题 433
12.3.4 解决方案 433
12.4 数据块争用 434
12.4.1 问题描述 434
12.4.2 找出问题 435
12.4.3 解决方案 437
12.5 数据压缩 440
第五部分 附录 444
附录A 可下载文件 444