目录 1
第1章 性能优化的挑战 1
1.1 为什么要进行性能优化 2
1.2 编写本书的原因 3
1.3 本书读者对象 3
1.4 读者的好消息 4
1.5 医师到魔术师的方法 4
1.5.1 可适应性的需要 5
1.5.2 理解而非技巧 6
1.5.3 避免猜测 8
1.5.4 银弹 8
1.5.5 解决错误问题 8
1.5.6 揭露一个大秘密 8
1.5.7 与Oracle保持同步更新 10
1.6 艺术还是科学 11
1.7 预优化 13
1.8 小结 14
2.1 失败的策略 15
第2章 许多优化策略失败的原因 15
2.2 不完善的性能优化方法 16
2.2.1 银弹方法 16
2.2.2 偷工减料 17
2.2.3 快速培训班 22
2.2.4 偏爱的思想 26
2.2.5 解决错误的问题 27
2.2.6 猜测法 30
2.2.7 避免责备 32
2.2.8 其他障碍 33
2.3 小结 34
第3章 Oracle医师 35
3.1 定义问题 36
3.1.1 确定需求 36
3.1.2 定义需求的艺术 36
3.1.3 切忌孤军奋战 37
3.1.4 Oracle医生的“就职誓言” 38
3.1.5 无需太多的技术 38
3.2 找到主诉症状 39
3.2.1 “数据库是坏的” 40
3.2.2 仔细倾听 41
3.2.3 适时地问一些问题 45
3.2.4 查看所展示的问题 46
3.2.5 必要时寻求帮助 46
3.3 小结 47
第4章 处理人际关系 49
4.1 性能优化问题中的人为因素 50
4.2.2 采取一个积极的方法 51
4.2 DBA的角色 51
4.2.1 集中解决客户的问题 51
4.2.3 建立相互信任的人际关系 53
4.2.4 准确地报告问题 56
4.2.5 避免傲慢的态度 57
4.2.6 承担责任 58
4.2.7 避免责备 60
4.2.8 询问问题 62
4.3 小结 63
4.2.9 接受批评 63
第5章 Oracle侦探 64
5.1 验证问题的存在 65
5.1.1 问题确实存在吗 65
5.1.2 检查基本信息 66
5.1.3 错误消息 66
5.1.4 在控制环境下重新运行应用程序 67
5.1.5 检查运行日志 68
5.1.6 查询V$SQL视图以找到SQL语句 69
5.1.7 未使用绑定变量所带来的问题 72
5.1.8 采用工具监控应用程序 75
5.1.9 监视活动和非活动会话 76
5.2 量化问题 76
5.2.1 需要关注的问题 77
5.2.2 方法 77
5.2.3 生成跟踪文件 77
5.2.4 计时信息 80
5.2.5 许可及文件大小 80
5.2.6 TKPROF 81
5.4 小结 90
5.3 注意所有异常因素 90
第6章 收集更多的线索 92
6.1 等什么 93
6.2 等待事件的类型 93
6.3 视图概述 97
6.3.1 V$EVENT NAME 97
6.3.2 V$SYSTEM_EVENT 98
6.3.3 V$SESSION EVENT 99
6.3.4 V$SESSION_WAIT 100
6.4 使用系统事件10046进行跟踪 102
6.5 等待事件的使用例子 105
6.6 重要的警告 113
6.6.1 不是数据库引起的延迟 113
6.6.2 无法监测CPU时间 113
6.6.4 时间精确度 114
6.7 小结 114
6.6.3 没有监测到的逻辑读 114
第7章 Oracle病理学家 115
7.1 隔离根本原因 116
7.2 找出性能降低的根源 117
7.2.1 找出真正的原因 117
7.2.2 性能预算 118
7.3 简化 120
7.4.1 分化SQL代码 124
7.4 分治法 124
7.4.2 简化表连接 126
7.5 活动时间表方法 128
7.6 性能问题的常见原因 129
7.6.1 应用程序设计 129
7.6.2 数据库设计 132
7.6.3 init.ora参数 133
7.6.4 批处理任务的干扰 133
7.6.5 硬件 134
7.7.1 简单的计时测试 136
7.7.2 大的结果集 136
7.7 寻找根本原因的其他建议 136
7.8 小结 137
第8章 分析SQL瓶颈 138
8.1 SQL优化的作用 139
8.1.1 SQL分析人员的好消息 139
8.1.2 SQL分析的其他好处 140
8.2 使用新的数据库功能 141
8.2.1 需要重新学习一些内容 142
8.2.2 更改过程中的稳定性 142
8.3 从哪儿开始 143
8.2.3 工具集中的新工具 143
8.3.1 查看统计数字 144
8.3.2 产生新的统计数字 144
8.3.3 确保运行的SQL可实现预期的功能 146
8.3.4 查看结果集的大小 146
8.3.5 各种优化过程入口的汇总 147
8.4 Oracle执行计划 147
8.4.1 获得执行计划 148
8.4.3 运行EXPLAN PLAN语句 150
8.4.2 准备使用EXPLAIN PLAN功能 150
8.4.4 执行计划的内容 151
8.4.5 Oracle提供的其他脚本 152
8.4.6 使用SQL*Plus AUTOTRACE获得执行计划 153
8.4.7 解释执行计划 155
8.5 视图和过滤 159
8.6 子查询 160
8.7 SQL优化的其他技巧 160
8.7.1 对象浏览工具 160
8.7.3 注意全表扫描 161
8.7.2 索引浏览工具 161
8.7.4 不要忽略逻辑读 162
8.7.5 指导开发人员 163
8.7.6 考虑缓存效果 164
8.8 计划表更为高级的功能 164
8.9 小结 167
第9章 分析SQL连接 168
9.1 什么是连接 169
9.1.1 等值连接和θ连接 169
9.1.3 外连接 170
9.1.2 内连接 170
9.2 连接技巧 171
9.2.1 嵌套循环 172
9.2.2 排序合并 174
9.2.3 哈希连接 176
9.2.4 群集连接 178
9.3 连接优化 179
9.3.1 选择合适的连接 179
9.3.2 SQL提示 180
9.4 分析连接的图形化方法 182
9.4.1 显示表和连接条件 182
9.4.2 列出过滤统计数字 183
9.4.3 开始连接 184
9.4.4 继续连接 186
9.4.5 多个条件 188
9.4.6 处理到大表的连接 188
9.5 影响连接的init.ora参数 189
9.6.1 连接远程表 193
9.6 其他连接主题 193
9.6.2 笛卡尔积 194
9.6.3 数据仓库的特殊连接 195
9.7 小结 201
第10章 病理学家的工具箱:其他策略 202
10.1 分析缓慢的数据库 202
10.1.1 是否每个人都觉得性能很慢 203
10.1.2 是否能够将问题归结于一部分原因 203
10.2 找出最差的症状 203
10.2.1 监视活动会话 204
10.2.2 确保没有阻塞会话 205
10.2.3 彻底检查网络 207
10.2.4 查看资源消耗大户 208
10.2.5 磁盘等待时间 210
10.2.6 查看参数极值的设置 210
10.2.7 留心分布式查询 211
10.3 操作系统工具 212
10.3.1 top 212
10.3.3 sar 213
10.3.2 uptime 213
10.3.4 sar选项 214
10.3.5 使用sar查找历史记录 215
10.3.6 iostat 215
10.3.7 vmstat 217
10.3.8 Windows操作系统中的工具 218
10.4 Oracle Statspack 222
10.4.1 安装Statspack 222
10.4.2 使用PERFSTAT快照 224
10.4.3 运行Statspack报告 225
10.4.4 报告示例 226
10.4.5 基础信息 227
10.4.6 缓存大小 227
10.4.7 加载简档 227
10.4.8 实例效率 228
10.4.9 前五个等待事件 229
10.4.10 与前台进程相关的所有等待事件 229
10.4.11 与后台进程相关的所有等待事件 229
10.4.13 表空间统计数字 230
10.4.12 实例统计 230
10.4.14 文件I/O统计数字 231
10.4.15 缓冲池统计数字 232
10.4.16 实例恢复统计数字 232
10.4.17 PGA聚集内存统计数字 233
10.4.18 PGA内存统计数字 233
10.4.19 回滚段统计数字 233
10.4.20 回滚段存储 234
10.4.22 闩锁活动 235
10.4.21 撤销段摘要 235
10.4.23 SGA内存摘要 236
10.4.24 init.ora参数 236
10.4.25 删除过时的快照数据 237
10.4.26 使用Statspack的建议 239
10.5 其他技巧 240
10.5.1 Oracle 9i对Statspack的改进 241
10.5.2 后台揭密:快照的实际工作 242
10.6 小结 242
第11章 Oracle艺术家 243
11.1 绘制解决方案 244
11.1.1 常规解决方案 245
11.1.2 更为复杂问题的解决方案:特殊的性能策略 248
11.2 Oracle Bug 256
11.2.1 难道处处都有Bug 257
11.2.2 找出大Bug:报警 257
11.2.3 TAR的麻烦世界 258
11.2.4 其他排除Bug的方法 259
11.3.1 DatabaseResourceManager 260
11.3 新的优化选项 260
11.3.2 物化视图 269
11.3.3 查询改写 270
11.4 “不可能”的问题 271
11.4.1 与其他Oracle专业人员联系 271
11.4.2 咨询系统管理员 272
11.4.3 Metalink 272
11.4.5 白皮书 273
11.4.6 有用的Web网站 273
11.4.4 Oracle论坛 273
11.5 小结 274
第12章 艺术家的调色板 275
12.1 SQL提示 276
12.1.1 何时使用SQL提示 276
12.1.2 如何使用提示 277
12.1.3 优化器模式提示 277
12.1.4 表和索引提示 279
12.1.5 连接提示 280
12.1.6 特殊的SQL提示 281
12.1.7 SQL提示疑难解分析 283
12.1.8 语法注意事项 283
12.2 PGA自动内存管理 283
12.2.1 设置PGA目标 284
12.2.2 PGA目标的优势 284
12.2.3 使用新的PGA参数 285
12.2.4 估算PGA需求 285
12.2.5 特殊的PGA视图 286
12.2.6 特殊的PGA术语 286
12.2.7 监视PGA内存优化 287
12.2.8 计算新的PGA内存目标 288
12.3 柱状图 290
12.3.1 柱状图需求 291
12.3.2 柱状图的样式 292
12.3.3 Oracle风格的柱状图 292
12.3.4 生成柱状图的传统方法 293
12.3.5 生成柱状图的新方法 294
12.3.6 查看柱状图 295
12.3.7 柱状图的局限性 297
12.4 小结 298
第13章 Oracle魔术师 299
13.1 设置舞台 300
13.1.1 测试解决方案 300
13.1.2 考虑对产品系统的影响 301
13.1.3 保存现有系统 303
13.2 挥动魔棒 304
13.2.1 念动咒语!让所有不满意的用户消失 304
13.2.2 确定性能变化 305
13.2.4 观察意外出现的结果 306
13.2.3 检查统计数据 306
13.3 如果犯了错 307
13.3.1 是否是正确的修正 307
13.3.2 系统如何不同 307
13.3.3 捕获相关的SQL 310
13.4 做好收尾工作 310
13.4.1 将解决方案记录入档 310
13.4.2 性能改进日志 311
13.5 下一步操作 312
13.4.3 结束与客户的交流 312
13.5.1 公布所学的内容 313
13.5.2 创建性能公文夹 313
13.6 小结 314
第14章 案例分析 316
14.1 为什么要花时间进行案例分析 316
14.2 使用案例分析 317
14.3 小结 329
附录A 有用的V$视图定义 330