第1章 存储结构 1
1.1 区:表空间中的基本单位 1
1.1.1 统一区大小表空间和区的使用规则 2
1.1.2 系统管理区大小 4
1.1.3 碎片:少到可以忽略的问题 7
1.2 段中块的使用 7
1.2.1 块中空间的使用 8
1.2.2 典型问题:堆表是有序的吗 9
1.2.3 ASSM与L3、L2、L1块的意义 10
1.2.4 值得注意的案例:ASSM真的能提高插入并发量吗 12
1.2.5 段头与Extent Map 21
1.2.6 索引范围扫描的操作流程 24
第2章 调优排故方法论 27
2.1 调优排故的一般步骤 28
2.1.1 常见DUMP和Trace文件介绍 28
2.1.2 等待事件 29
2.1.3 各种资料视图介绍 37
2.1.4 等待事件的注意事项 42
2.2 AWR概览 44
2.2.1 AWR报告的注意事项 44
2.2.2 AWR类视图 46
第3章 Buffer Cache内部原理与I/O 51
3.1 HASH链表 51
3.1.1 HASH链表与逻辑读 52
3.1.2 Cache Buffers Chain Latch与Buffer Pin锁 54
3.1.3 Cache Buffers Chain Latch的竞争 61
3.2 检查点队列链表 77
3.2.1 检查点队列 77
3.2.2 检查点队列与实例恢复 82
3.2.3 DBWR如何写脏块 89
3.2.4 如何提高DBWR的写效率 97
3.3 LRU队列 100
3.3.1 主LRU、辅助LRU链表 100
3.3.2 脏链表LRUW 115
3.3.3 Free Buffer Waits 132
3.3.4 谁“扣动”了DBWR的“扳机” 134
3.3.5 日志切换与写脏块 141
3.4 I/O总结 146
3.4.1 逻辑读资料分析 146
3.4.2 减少逻辑读——行的读取 148
3.4.3 物理I/O 161
3.4.4 存储物理I/O能力评估 162
第4章 共享池揭密 166
4.1 共享池内存结构 167
4.1.1 堆、区、Chunk与子堆 167
4.1.2 Chunk类型(x$ksmsp视图) 170
4.1.3 freeabl、recr与LRU链表 171
4.1.4 Free List链表 173
4.1.5 保留池 177
4.1.6 SQL的内存结构:父游标、子游标 178
4.1.7 SQL的内存结构:父游标句柄 181
4.1.8 SQL的Chunk:父游标堆0和DS 183
4.1.9 SQL的Chunk:子游标句柄 186
4.1.10 SQL的Chunk:子游标堆0与堆6 187
4.1.11 SQL所占共享池内存 189
4.1.12 LRU链表:我的共享池大了还是小了 191
4.1.13 ORA-4031的吊诡:错误的报错信息 195
4.1.14 解决ORA-4031之道:如何正确释放内存 201
4.1.15 Session Cached Cursor与内存占用 205
4.2 语句解析和执行 209
4.2.1 SQL执行流程 209
4.2.2 内存锁原理 211
4.2.3 Library Cache Lock/Pin 218
4.2.4 Library Cache Lock/Pin与硬解析 219
4.2.5 Library Cache Lock/Pin与软解析、软软解析 226
4.2.6 MULL模式Library Cache Lock与依赖链 229
4.2.7 存储过程与Library Cache Lock/Pin 229
4.2.8 断开依赖链 235
4.2.9 低级内存锁:Latch 237
4.2.10 Shared Pool Latch 239
4.3 Mutex 242
4.3.1 Mutex基本形式 242
4.3.2 Mutex获取过程:原子指令测试并交换 245
4.3.3 Mutex获取过程:竞争与Gets资料的更新 249
4.3.4 Mutex获取过程:共享Mutex与独占Mutex 250
4.3.5 独占Mutex的获取和释放过程 252
4.3.6 Mutex获取过程:Sleeps与CPU 254
4.4 Mutex与解析 261
4.4.1 Mutex类型 262
4.4.2 HASH Bucket与HASH链 262
4.4.3 Handle(句柄)与Library Cache Lock 262
4.4.4 HASH Table型Mutex 263
4.4.5 执行计划与Cursor Pin 264
4.5 通过Mutex判断解析问题 265
4.5.1 硬解析时的竞争 265
4.5.2 软解析和软软解析 266
4.5 -3解决解析阶段的竞争 267
4.5.4 过度软软解析竞争的解决 268
4.5.5 Select与执行 271
第5章 Redo调优与备份恢复原理 277
5.1 非IMU与IMU Redo格式的不同 277
5.2 解析Redo数据流 282
5.3 IMU与非IMU相关的Redo Latch 287
5.4 Redo Allocation Latch 288
5.5 Log Buffer空间的使用 290
5.6 LGWR与Log File Sync和Log File Parallel Write 297
5.7 IMU什么情况下被使用 300
第6章 UNDO 302
6.1 事务基本信息 302
6.2 回滚段空间重用规则 307
6.2.1 UNDO块的SEQ值 308
6.2.2 UNDO段的Extend 310
6.2.3 Steal Undo Extent:诡异的UNDO空间不足问题 311
6.2.4 回滚空间重用机制:UNDO块重用规则 313
第7章 ASM 317
7.1 ASM文件格式 317
7.1.1 ASM文件 317
7.1.2 使用kfed挖掘ASM文件格式 319
7.2 AU与条带 328
7.2.1 粗粒度不可调条带 329
7.2.2 细粒度可调条带 329
7.2.3 AU与条带的作用 331
7.2.4 DG中盘数量对性能的影响 332
7.2.5 最大I/O与最小I/O 333
7.2.6 数据分布对性能的影响 334
7.2.7 案例精选:奇怪的IO问题 335
7.2.8 大AU和小AU性能对比 340
7.2.9 AU与条带总结 341
7.2.10 OLTP与大条带 342
附录 HASH算法简单介绍 344