Part 1 关于OWI 1
第1章 OWI介绍 3
1.1 何谓OWI 3
1.2 OWI的特点 6
1.2.1 OWI是面向问题的(problem-oriented) 6
1.2.2 OWI是定量的 7
1.2.3 OWI是征兆学性的 7
1.2.4 OWI正在不断完善 8
1.3 OWI工具 10
1.3.1 OWI动态视图 10
1.3.2 其他重要动态视图 13
1.3.3 Extended SQL Trace 15
1.3.4 oradebug与转储(dump) 17
1.3.5 Automatic Workload Repository 21
1.4 OWI数据收集 23
1.4.1 Logoff Trigger 23
1.4.2 利用SQL周期性收集 23
1.4.3 Automatic Workload Repository(AWR) 23
1.4.4 Direct Memory Access(DMA) 24
1.5 其他 25
1.5.1 PL/SQL 25
1.5.2 脚本(script) 25
第2章 Latch和Lock 28
2.1 Oracle的同步机制 28
2.2 锁存器 31
2.2.1 何谓锁存器 31
2.2.2 锁存器所保护的资源 32
2.2.3 锁存器工作机制 34
2.2.4 锁存器相关的动态视图(dynamic views) 40
2.2.5 一般锁存器相关的等待事件 41
2.3 锁 43
2.3.1 锁的分类 43
2.3.2 锁保护的资源 45
2.3.3 锁工作机制 47
2.3.4 锁相关的动态视图 49
2.3.5 普通锁相关等待事件 51
第3章 Oracle内部结构和OWI 53
3.1 高速缓冲区(buffer cache)和OWI 53
3.1.1 高速缓冲区结构 53
3.1.2 Working Set 55
3.1.3 Buffer lock 60
3.1.4 检索缓冲区 60
3.1.5 高速缓冲区转储(buffer cache dump) 62
3.2 Shared Pool/Library Cache和OWI 65
3.2.1 共享池(shared pool)和堆 65
3.2.2 库高速缓冲区(library cache)结构 71
3.2.3 SQL的执行 75
3.3 事务和OWI 79
3.3.1 事务的概要 79
3.3.2 事务和块转储 81
3.3.3 事务和撤销块转储 86
3.4 段和OWI 88
3.4.1 段的概要 88
3.4.2 手动段空间管理FLM 89
3.4.3 自动模式的段空间管理ASSM 94
3.5 I/O和OWI 97
3.5.1 I/O概要 97
3.5.2 应用程序层(application layer) 97
3.5.3 Oracle内存层 98
3.5.4 Oracle段层 100
3.5.5 OS/裸设备层(raw device layer) 100
3.5.6 Direct path I/O 103
3.6 重做和OWI 105
3.6.1 重做(redo)概要 105
3.6.2 重做缓冲区 108
3.6.3 重做日志 110
Part 2 个别等待事件 113
第4章 高速缓冲区上的等待事件 115
4.1 latch:cache buffers chains 115
4.1.1 低效的SQL 116
4.1.2 Hot Block 121
4.2 latch:cache buffers lru chain 126
4.3 buffer busy waits/read by other session 130
4.3.1 Select/Select引起的read by other session 133
4.3.2 Select/Update引起的buffer busy waits/read by other session 137
4.3.3 Insert/Insert引起的buffer busy waits 141
4.3.4 Update/Update引起的buffer busy waits 146
4.4 write complete waits 157
4.5 free buffer waits 164
4.6 enq:TC-contention 167
4.6.1 Parallel Query 168
4.6.2 Tablespace Hot backup 170
4.7 enq:CI-contention,enq:RO-contention 173
第5章 库高速缓冲区上的等待事件 178
5.1 latch:shared pool 178
5.2 latch:library cache 187
5.2.1 Hard Parsing或Soft Parsing过多时 188
5.2.2 Version Count高时 193
5.2.3 SGA区域发生Page Out时 194
5.3 library cache lock和library cache pin 195
第6章 行高速缓冲区上的等待事件 213
6.1 row cache lock 213
6.2 enq:SQ-contention,DFS lock handle(SV) 218
第7章 事务上的等待事件 221
7.1 enq:TM-contention 221
7.1.1 无索引的外键 224
7.1.2 不当的DDL引起的TM锁争用 224
7.1.3 利用Lock table...主动获取TM锁时 226
7.1.4 执行Direct/Parallel Load工作时 227
7.2 enq:TX-row lock contention,enq:TX-allocate ITL Entry,enq:TX-index contention 229
7.2.1 多个会话修改相同行时(enq:TX-row lock contention,mode=6) 230
7.2.2 多个会话引起唯一键冲突时(enq:TX-row lock contention,mode=4) 233
7.2.3 ITL条目不足(enq:TX-allocate ITL entry,mode=4) 235
7.2.4 多个会话引起位图索引冲突时(enq:TX-row lock contention,mode=4) 239
7.2.5 索引叶节点上发生分割时(enq:TX-index contention,mode=4) 242
7.2.6 其他(enq:TX-contention) 243
7.3 enq:UL-contention,PL/SQL lock Timer 245
第8章 段上的等待事件 248
8.1 enq:HW-contention 248
8.2 enq:ST-contention,enq:TT-contention 257
8.3 enq:US-contention 262
第9章 I/O上的等待事件 266
9.1 db file scattered read 266
9.1.1 应用程序层 268
9.1.2 Oracle内存层 269
9.1.3 Oracle段层 271
9.1.4 OS/裸设备层 272
9.2 db file sequential read 273
9.2.1 应用程序层 273
9.2.2 Oracle内存层 274
9.2.3 OS/裸设备层 278
9.3 direct path read 279
9.4 direct path write 282
9.5 direct path read temp/direct path write temp 284
9.5.1 应用程序层 284
9.5.2 Oracle内存层 284
9.6 direct path read(lob)/direct path write(lob) 289
9.7 db file parallel write 291
9.8 control file parallel write 293
第10章 重做缓冲区上的等待事件 296
10.1 latch:redo writing,latch:redo allocation,latch:redo copy 296
10.2 log file sync 303
10.2.1 提交次数和log file sync 303
10.2.2 I/O系统的性能和log file sync 306
10.2.3 重做数据量和log file sync 306
10.2.4 重做缓冲区的大小和log file sync 308
10.3 log file parallel write 309
10.4 log buffer space 311
10.5 log file switch completion,log file switch(checkpoint incomplete),log file switch(archiving needed),log file switch(private strand flush incomplete) 315
第11章 网络上的等待事件 317
11.1 网络速度缓慢时 318
11.2 SQL执行次数异常地过高时 319
11.3 应用程序的实现方式上存在问题时 322
参考文献和资料说明 323
术语索引 326
图索引 338
表索引 339
测试索引 340