第1章LOB段性能的诊断与调优 1
1.1 LOB数据类型的介绍 1
1.1.1解决LOB问题:一个真实的案例 2
1.1.2另一个真实案例:HW分析 4
1.1.3 BASICFILE LOB:更完美的解决方案 7
1.2 BASICFILE与SECUREFILE LOB 7
1.2.1 LOB新旧类型的差异 8
1.2.2迁移BASICFILE LOB到SECUREFILE LOB 10
1.3 PCTFREE对LOB的影响 12
1.4解决糟糕的INSERT性能 15
1.5总结 15
第2章 处理undo表空间损坏 16
2.1 undo管理概述 16
2.1.1 UNDO RETENTION的重要性 16
2.1.2优化UNDO RETENTION 17
2.2 DTP、XA和回滚段 18
2.3 undo表空间损坏的恢复 20
2.3.1预防、检测和修复损坏 20
2.3.2处理内存损坏 21
2.3.3处理逻辑损坏 24
2.3.4解决介质损坏 24
2.4总结 27
第3章 处理全局缓存缓冲区忙等待事件 28
3.1缓冲区忙等待事件概述 28
3.2使用ORAchk工具 29
3.2.1安装ORAchk 29
3.2.2 ORAchk执行结果:示例输出 30
3.3查找GC缓冲区忙等待事件 32
3.3.1用ADDM查找事件的信息 33
3.3.2用AWR查找等待事件的信息 33
3.3.3用ASH查找等待事件的信息 35
3.4查找GC缓冲区忙等待事件的原因 36
3.4.1使用ASH视图查找等待会话 36
3.4.2快速查找性能瓶颈 38
3.5解决GC缓冲区忙等待 40
3.6总结 41
第4章 自适应游标共享 42
4.1 ACS工作算法 42
4.1.1绑定敏感与范围谓词 43
4.1.2绑定敏感与等式谓词和直方图 45
4.1.3绑定敏感与分区键 46
4.2 ACS的使用 48
4.2.1监控ACS的绑定感知 51
4.2.2 BUCKET ID和COUNT的关系 52
4.2.3标记游标为绑定感知 55
4.3游标绑定感知 61
4.4一个真实案例 64
4.5总结 69
第5章 使用SPM稳定查询响应时间 70
5.1入门指南 70
5.2创建SQL计划基线 73
5.2.1自动捕获计划 73
5.2.2从游标缓存加载计划 76
5.3伪造基线 77
5.4 Oracle优化器和SPM的交互 81
5.4.1当CBO计划与SQL计划基线匹配时 82
5.4.2当CBO计划与SQL计划基线不匹配时 84
5.4.3当SQL计划基线不可复制时 89
5.5 SQL计划基线的复制性 93
5.5.1重命名索引 93
5.5.2修改索引类型 95
5.5.3向索引中添加尾列 96
5.5.4反向索引 97
5.6 NLS_ SORT与SQL计划基线的复制性 98
5.7 ALL ROWS与FIRST ROWS 100
5.8自适应游标共享与SPM 104
5.8.1 Oracle 11.2.0.3.0中的ACS和SPM 105
5.8.2 Oracle 12.1.0.1.0中的ACS和SPM 109
5.9总结 112
第6章DDL优化技巧和技术 114
6.1 DDL优化的概念 114
6.2 DDL优化的机制 117
6.2.1表基数估算 117
6.2.2虚拟列中的C DDL列 119
6.2.3列组扩展中的C DDL列 120
6.2.4 C DDL的默认值发生变化时 122
6.2.5 C DDL列和索引 124
6.2.6空列的DDL优化 126
6.3总结 130
第7章 管理、优化、调整大型数据库 131
7.1大型数据库概述 131
7.2优化基本配置 132
7.2.1数据库仓库模板 132
7.2.2优化数据块大小 133
7.2.3大文件表空间 134
7.2.4调整SGA和PGA 135
7.2.5临时表空间组 135
7.2.6数据分区 136
7.2.7本地分区索引和全局分区索引 136
7.2.8数据压缩 137
7.2.9表压缩 137
7.2.10热图和自动数据优化 137
7.2.11高级索引分区压缩 138
7.3大型数据库性能调整的原则 139
7.3.1真实的案例 139
7.3.2控制索引对数据加载的影响 140
7.3.3资源利用率的最大化 141
7.4收集统计信息 142
7.4.1增量统计信息摘要 142
7.4.2并发收集统计信息 144
7.4.3设置ESTIMATE PERCENT的值 145
7.5备份与恢复的最佳实践 145
7.5.1 Exadata解决方案 146
7.5.2利用Data Guard环境 147
7.6总结 147
第8章RMAN备份恢复最佳实践 148
8.1完美的备份恢复计划 148
8.2概述 149
8.3数据库备份策略的技巧 149
8.3.1完全备份和增量备份 150
8.3.2压缩备份 150
8.3.3增量备份 151
8.3.4快速增量备份 151
8.3.5 Oracle闪回技术之回退 152
8.3.6基于磁盘的备份解决方案 153
8.3.7增量更新的镜像副本 153
8.4验证RMAN备份 159
8.5备份的优化与调整 160
8.6 RAC集群下的RMAN 162
8.7恢复目录 163
8.8恢复策略 164
8.9数据恢复顾问 165
8.10总结 166
第9章 使用AWR分析优化数据库(一) 167
9.1什么是AWR 167
9.2知道要查找什么 168
9.3报告头部信息 169
9.3.1负载状况 171
9.3.2实例效率 171
9.3.3共享池内存 172
9.3.4等待事件 172
9.3.5平均负载 175
9.3.6实例CPU 175
9.3.7内存统计数据 176
9.4 RAC特有的页面 176
9.4.1 RAC统计数据 177
9.4.2全局缓存负载统计数据 177
9.4.3全局缓存和队列服务 177
9.4.4集群互连 178
9.5时间模型统计 179
9.6操作系统统计数据 180
9.6.1前台等待事件 181
9.6.2后台等待事件 182
9.6.3等待事件直方图 183
9.6.4服务相关统计数据 184
9.7 SQL章节 185
9.7.1总运行时间 185
9.7.2总CPU时间 185
9.7.3总缓冲区获取 186
9.7.4总磁盘读 186
9.7.5总执行次数 186
9.7.6解析调用 186
9.7.7可共享内存 187
9.7.8版本数 187
9.7.9集群等待时间 187
9.8实例活动统计 188
9.8.1一致性读统计数据 191
9.8.2数据块读统计数据 191
9.8.3脏块统计 191
9.8.4队列统计 191
9.8.5执行计数 191
9.8.6空闲缓冲区统计 192
9.8.7全局缓存统计 192
9.8.8索引扫描统计数据 192
9.8.9叶子节点统计数据 193
9.8.10打开的游标 193
9.8.11解析统计数据 193
9.8.12物理读写统计数据 193
9.8.13递归统计数据 195
9.8.14重做相关的统计数据 195
9.8.15会话游标统计数据 196
9.8.16排序统计数据 196
9.8.17脏队列长度汇总 196
9.8.18表获取统计数据 197
9.8.19事务回滚 197
9.8.20撤销更改矢量统计 197
9.8.21用户统计数据 198
9.8.22工作区统计数据 198
9.8.23实例活动统计——绝对值 198
9.8.24实例活动统计——线程活动 199
9.9总结 199
第10章 使用AWR分析优化数据库(二) 200
10.1表空间I/O统计数据 200
10.2缓冲池 202
10.2.1缓冲池统计数据 203
10.2.2实例恢复统计数据 203
10.2.3缓冲池建议部分 204
10.3 PGA统计数据 204
10.3.1 PGA汇总 206
10.3.2 PGA总目标统计数据 206
10.3.3 PGA总目标直方图 206
10.3.4 PGA内存建议 208
10.4共享池统计数据 208
10.5其他建议 209
10.5.1 SGA目标建议 210
10.5.2流池建议 210
10.5.3 Java池建议 211
10.6缓冲区等待统计数据 211
10.7队列统计数据 212
10.8撤销段统计数据 214
10.9闩锁统计数据 215
10.9.1闩锁活动 216
10.9.2闩锁休眠分类 217
10.9.3闩锁和自旋数 217
10.9.4闩锁丢失源 218
10.9.5互斥锁休眠汇总 218
10.9.6父类和子类闩锁 218
10.10段访问区 218
10.11库缓存活动部分 220
10.12动态内存组件部分 223
10.13进程内存部分 224
10.13.1进程内存汇总 226
10.13.2 SGA内存汇总 226
10.13.3 SGA分类和差异 226
10.14流组件部分 226
10.15资源限制统计数据 228
10.16初始化参数的改变 228
10.17全局队列和其他RAC部分 229
10.17.1全局队列统计数据 233
10.17.2全局CR服务统计数据 233
10.17.3全局当前服务统计数据 233
10.17.4全局缓存传输统计数据 233
10.17.5全局缓存传输时间 233
10.17.6全局缓存传输 233
10.17.7全局缓存时间 234
10.17.8互连ping延迟统计数据 234
10.17.9客户端的互连吞吐量 234
10.17.10互联设备统计数据 234
10.18总结 234
第11章RAC的故障诊断 236
11.1 RAC的故障诊断和调优 236
11.1.1 ORAchk工具 237
11.1.2 TFA收集器 237
11.1.3自动诊断库 237
11.1.4告警和跟踪日志文件 237
11.2运转良好的RAC生态系统 239
11.2.1最高可用性架构 239
11.2.2优化和高效的RAC数据库 240
11.2.3基于OEM 12C的RAC故障诊断 241
11.2.4故障诊断的程序和命令 242
11.3总结 247
第12章 利用SQL顾问来分析和修复SQL问题 248
12.1 OEM 12c : SQL顾问首页 248
12.2 SQL调优顾问 249
12.2.1在OEM 12c中运行SQL调优顾问 250
12.2.2在SQLPlus中手动运行SQL调优顾问 253
12.3 SQL访问顾问 253
12.3.1在OEM 12c中运行SQL访问顾问 254
12.3.2在SQLPlus中手动运行SQL访问顾问 257
12.4 SQL修复顾问 258
12.5 SQL性能分析器 259
12.6总结 260
第13章 使用数据泵迁移数据和对象 261
13.1使用数据泵 261
13.1.1复制对象 262
13.1.2数据泵模式 263
13.2处理私有和公共对象 263
13.2.1保存和恢复数据库链接 264
13.2.2导出公共数据库链接和同义词 264
13.2.3验证导出的转储文件内容 265
13.3查找有效的INCLUDE和EXCLUDE值 265
13.4导出数据子集 267
13.5修改对象属性 269
13.5.1将分区表导入为非分区表 269
13.5.2将表分区导入为单独的表 269
13.5.3屏蔽数据 270
13.5.4重命名表或使用不同的表空间 270
13.5.5使用默认存储参数 270
13.5.6导入期间调整表空间大小 271
13.5.7合并多个表空间 271
13.6通过PL/SQL API使用Data Pump 273
13.7监控和修改资源 274
13.8提升性能 275
13.9升级数据库 276
13.10总结 277
第14章 数据库快速迁移数据的策略 278
14.1为什么要迁移 278
14.2确定最好的策略 279
14.2.1实时与准实时迁移 279
14.2.2接受只读 279
14.2.3可逆性 280
14.3考虑迁移什么数据 280
14.4数据迁移的方法 281
14.4.1事务性捕获迁移方法 281
14.4.2非事务性迁移方法 283
14.4.3其他迁移方法 295
14.5总结 301
第15章 临时文件I/O问题的诊断和恢复 302
15.1临时表空间概述 302
15.1.1只读数据库 303
15.1.2本地管理的临时表空间 303
15.1.3临时表空间组 303
15.1.4全局临时表 304
15.2解决TEMPFILE I/O等待 307
15.2.1过小的PGA 307
15.2.2不恰当的TEMPFILE扩展区大小 311
15.2.3不恰当地使用 GTT 312
15.3总结 312
第16章 处理闩锁和互斥锁争用 313
16.1闩锁和互斥锁架构概述 313
16.1.1什么是闩锁 314
16.1.2什么是互斥锁 315
16.1.3闩锁和互斥锁的内部结构 315
16.2检测闩锁和互斥锁争用 316
16.2.1识别独特的闩锁 317
16.2.2查找段和SQL语句 318
16.3闩锁和互斥锁场景 320
16.3.1库缓存互斥锁等待 320
16.3.2 library cache pin 322
16.3.3共享池闩锁 322
16.3.4缓存缓冲区链闩锁 323
16.3.5其他的闩锁场景 325
16.4棘手的闩锁争用 326
16.5总结 328
第17章 使用SSD解决I/O瓶颈 329
17.1磁盘技术:SSD与HDD 329
17.1.1固态闪存盘的崛起 330
17.1.2 SSD闪存的延迟 331
17.1.3 SSD的经济性 332
17.1.4 SLC、 MLC和TLC 333
17.1.5写性能与寿命 334
17.1.6垃圾回收和磨损均衡 334
17.1.7 SATA与PCIe SSD 336
17.1.8在Oracle数据库中使用SSD 336
17.2 Oracle数据库的闪存缓存 337
17.2.1空闲缓冲区等待 337
17.2.2配置和监控DBFC 339
17.2.3使用FLASH CACHE子句 340
17.2.4闪存缓存的性能统计数据 341
17.3比较SSD的部署选择 342
17.3.1索引读 343
17.3.2 OLTP上的读/写负载 344
17.3.3全表扫描性能 344
17.3.4 SSD本地缓存和全表扫描 345
17.3.5磁盘排序和散列操作 346
17.3.6重做日志的优化 349
17.4存储分层 349
17.5闪存和Exadata 353
17.6总结 357
第18章 为最佳性能设计和监控索引 359
18.1索引的类型 359
18.1.1 B树索引 359
18.1.2位图索引 362
18.1.3分区索引 364
18.1.4其他索引类型 366
18.2同一列上的多个索引 368
18.3索引的性能问题 369
18.3.1索引统计信息 369
18.3.2高集群因子的影响 372
18.3.3索引操作的注意事项 373
18.3.4隐藏非选择的索引 374
18.3.5 RAC数据库中的索引性能问题 375
18.4总结 377
第19章 使用SQLT提升查询性能 379
19.1安装SQLT 379
19.2使用XTRACT方法 380
19.3使用XECUTE方法 381
19.4其他SQLT方法 384
19.5一个真实的案例 385
19.6总结 386
第20章 处理XA分布式事务的问题 387
20.1修复常见的分布式事务问题 387
20.2修复幽灵分布式事务 388
20.2.1信息存在,但事务不在 389
20.2.2 ORA-1591没有对应的信息 389
20.2.3提交或回滚之后事务挂起 391
20.3监控分布式事务 393
20.4总结 395