第一部分 方法和工具概述 1
第1章 Oracle调整概述 1
1.1 整体调整方法 1
1.1.1 服务器调整 4
1.1.2 网络调整 5
1.1.3 磁盘调整 5
1.1.4 实例调整 6
1.1.5 对象调整 7
1.1.6 SQL调整 8
1.1.7 用Oracle并行查询进行调整 8
1.1.8 调整Oracle并行服务器环境 8
1.2 Oracle和STATSPACK 9
1.3 小结 11
第2章 STATSPACK概述 12
2.1 STATSPACK体系结构 12
2.2 STATSPACK怎样收集数据 13
2.3 STATSPACK的表结构 14
2.3.1 STATSPACK控制表 15
2.3.2 STATSPACK参数表 16
2.4 STATSPACK信息使用 17
2.4.1 使用STATSPACK进行数据库调整 17
2.4.2 资源规划 18
2.4.3 预测模型 18
2.5 小结 19
第3章 安装和配置STATSPACK 20
3.1 将STATSPACK用于Oracle 8.0到8.1.5 20
3.2 STATSPACK脚本概述 20
3.3 步骤1:创建perfstat表空间 21
3.4 步骤2:运行创建脚本 22
3.5 步骤3:测试STATSPACK安装 23
3.6 步骤4:规划自动STATSPACK数据收集 23
3.7 STATSPACK的配置和维护 25
3.8 调整STATSPACK收集门限 26
3.8.1 快照级别 26
3.8.2 快照门限 27
3.9 移走旧有的STATSPACK快照 27
3.10 便于使用的STATSPACK Shell脚本 28
3.11 小结 32
第4章 STATSPACK表中的数据 33
4.1 STATSPACK遗漏的内容 33
4.2 STATSPACK附属表结构 33
4.3 STATSPACK概要表 34
4.3.1 stats$latch_misses_summary表 34
4.3.2 stats$sgastat_summary表 35
4.3.3 stats$sql_summary表 37
4.3.4 stats$parameter表 38
4.4 STATSPACK系统表 39
4.4.1 stats$rollstat表 39
4.4.2 stats$latch表 40
4.4.3 stats$latch_children表 41
4.4.4 stats$librarycache表 41
4.4.5 stats$waitstat表 42
4.4.6 stats$enqueuestat表 43
4.4.7 stats$sysstat表 44
4.4.8 stats$sesstat表 45
4.4.9 stats$sgastat表 46
4.5 STATSPACK事务表 46
4.5.1 stats$buffer_pool表 46
4.5.2 stats$buffer_pool_statistics表 47
4.5.3 stats$filestatxs表 48
4.6 STATSPACK事件表 49
4.6.1 stats$system_event表 50
4.6.2 stats$session_event表 51
4.6.3 stats$bg_event_summary表 52
4.6.4 stats$idle_event表 52
4.7 Oracle并行服务器表 53
4.7.1 stats$rowcache_summary表 53
4.7.2 stats$sgaxs表 53
4.8 小结 54
第二部分 使用STATSPACK调整Oracle数据库 55
第5章 扩展STATSPACK收集服务器统计 55
5.1 vmstat工具概述 55
5.1.1 各种vmstat的不同之处 56
5.1.2 在vmstat中可以得到什么 57
5.1.3 使用vmstat识别CPU瓶颈 57
5.1.4 使用vmstat识别频繁使用的CPU 59
5.1.5 识别RAM内存瓶颈 60
5.2 在STATSPACK中获取服务器性能数据 64
5.2.1 获取vmstat信息的脚本 64
5.2.2 vmstat获取脚本的本质 67
5.2.3 报告其他Oracle服务器上的vmstat信息 68
5.3 小结 69
第6章 调整服务器环境 70
6.1 数据库管理员和系统管理员之间的关系 70
6.2 在线服务器监控工具 71
6.2.1 使用glance 71
6.2.2 使用top监控服务器 72
6.2.3 使用sar监控服务器统计 73
6.3 监控服务器CPU消耗 75
6.4 升级整个服务器 76
6.4.1 增加附加的CPU处理器 76
6.4.2 服务器任务负载平衡 77
6.4.3 使用nice和priocntl改变执行优先级 80
6.5 监控服务器内存消耗 81
6.5.1 服务器内存设置 81
6.5.2 非常大的内存和Oracle 82
6.5.3 使Oracle内存不可交换 82
6.6 报告服务器统计 83
6.6.1 服务器异常报告 83
6.6.2 日常vmstat趋势报告 86
6.6.3 长期服务器分析和趋势 89
6.7 小结 90
第7章 调整网络环境 91
7.1 优化Oracle Net8配置 91
7.1.1 protocol.ora中的tcp.nodelay参数 92
7.1.2 sqlnet.ora的automatic_ipc参数 92
7.1.3 tnsnames.ora中的SDU和TDU参数 92
7.1.4 在listener.ora中的queuesize参数 94
7.1.5 sqlnet.ora的break_poll_skip参数 94
7.1.6 sqlnet.ora的disable_oob参数 95
7.1.7 epc_disabled环境变量 95
7.2 其他影响网络行为的Oracle特性 95
7.2.1 使用阵列获取来提高网络吞吐 95
7.2.2 使用多线程服务器 96
7.2.3 连接共享和网络性能 97
7.2.4 ODBC和网络性能 99
4.2.5 调整Oracle复制 99
7.3 从Oracle STATSPACK中监控网络性能 101
7.4 调整分布式网络 103
7.5 小结 105
第8章 使用STATSPACK调整磁盘I/O子系统 106
8.1 影响磁盘I/O的Oracle调整因素 106
8.2 Oracle内部结构和磁盘I/O 107
8.2.1 Oracle文件组织技术 108
8.2.2 瞬时磁盘热点 108
8.3 映射Oracle磁盘结构 113
8.3.1 多RAM缓冲问题 114
8.3.2 对Oracle进行文件条带化 114
8.3.3 对Oracle使用RAID 115
8.3.4 使用具有原始设备的Oracle 116
8.3.5 Oracle数据库的磁盘负载平衡 116
8.3.6 配置Oracle表空间和数据文件 117
8.3.7 建立Oracle文件到磁盘的体系结构 119
8.3.8 报告Oracle磁盘体系结构 120
8.4 STATSPACK报告Oracle数据文件 121
8.4.1 使用STATSPACK报告详细的磁盘和文件I/O 126
8.4.2 有关特定I/O活动的STATSPACK报告 127
8.4.3 识别热点数据文件的STATSPACK脚本 129
8.4.4 定位热点磁盘的方法 129
8.5 扩充STATSPACK以用于磁盘I/O数据 130
8.5.1 基本iostat工具 130
8.5.2 定义STATSPACK表 132
8.5.3 获取iostat信息 133
8.5.4 产生iostat报告 135
8.6 使用STATSPACK查看I/O特性 137
8.7 小结 142
第9章 调整Oracle数据库实例 143
9.1 Oracle数据库实例概述 143
9.1.1 Oracle SGA 143
9.1.2 Oracle后台进程 146
9.1.3 块大小和Oracle磁盘I/O 149
9.1.4 db_file_multiblock_read_count以及Oracle 149
9.2 调整Oracle数据缓冲 149
9.2.1 数据块缓存介绍 150
9.2.2 完全数据缓存 151
9.2.3 数据缓冲命中率 152
9.2.4 数据缓冲池内部结构 153
9.2.5 使用STATSPACK监控数据缓冲池的使用 155
9.2.6 新数据池概述 158
9.2.7 定位KEEP池的表和索引 159
9.2.8 调整RECYCLE池 164
9.2.9 为RECYCLE池识别候选 165
9.3 使用STATSPACK进行数据缓冲命中率趋势报告 168
9.4 调整数据库写入器进程 172
9.5 调整共享池 178
9.6 调整库缓存 184
9.6.1 监控库缓存缺失率 185
9.6.2 使用STATSPACK监控库缓存内的对象 186
9.7 调整数据辞典缓存 190
9.8 调整Oracle排序 194
9.9 调整回滚段 200
9.10 小结 201
第10章 调整Oracle数据表和索引 202
10.1 Oracle基本存储参数及其对性能的影响 202
10.1.1 pctfree存储参数 202
10.1.2 pctused存储参数 203
10.1.3 freelists存储参数 203
10.1.4 OPS使用的freelist group存储参数 204
10.1.5 存储参数规则概述 204
10.2 自由表管理和Oracle对象 205
10.2.1 自由表中的链接与去除链接 206
10.2.2 减少自由表的重链接 207
10.3 数据表内部情况和自由表 208
10.4 根据数据行平均长度设置pctfree和pctused 210
10.5 缓存忙等待和自由表冲突 212
10.5.1 利用STATSPACK发现等待冲突 212
10.5.2 利用STATSPACK发现缓存忙等待 215
10.6 重组Oracle数据表 222
10.7 识别存在链接数据行的Oracle表 227
10.7.1 识别带有长数据行的表 231
10.7.2 识别稀疏表 232
10.8 为提高操作性能对Oracle表中的数据行重新排序 234
10.9 索引重建技术 235
10.9.1 何时需要重建索引 240
10.9.2 自动索引重建 241
10.10 利用STATSPACK监视Oracle表和索引 242
10.10.1 分配STATSPACK扩展表 242
10.10.2 收集数据表和索引的STATSPACK快照 244
10.10.3 生成数据表和索引的报告 246
10.10.4 通过e-mail发布数据表报告 261
10.11 小结 262
第11章 调整Oracle SQL 263
11.1 SQL调整的目标 263
11.2 说明性SQL语法的问题 264
11.3 Oracle SQL优化器 265
11.3.1 optimizer_mode=RULE 265
11.3.2 optimizer_mode=FIRST_ROWS 265
11.3.3 optimizer_mode=ALL_ROWS 265
11.3.4 optimizer_mode=CHOOSE 266
11.4 利用基于规则的优化器进行调整 267
11.4.1 改变基于规则的驱动表 267
11.4.2 基于规则的优化器何时无法使用正确的索引 268
11.5 使用基于成本优化器进行调整 269
11.5.1 启用基于成本的优化器 270
11.5.2 为CBO收集统计数据 271
11.6 确定默认的optimizer_mode设置 272
11.7 其他的调整技术 272
11.7.1 带CBO SQL提示的调整 273
11.7.2 调整SQL子查询 273
11.7.3 文字性SQL语句的问题 274
11.7.4 在Oracle8i中使用cursor_sharing参数 276
11.7.5 带临时表的SQL调整 277
11.7.6 通过添加索引调整SQL 277
11.7.7 编写高效率SQL的一般原则 278
11.8 SQL调整过程 279
11.8.1 步骤1:识别库缓冲区中影响大的SQL 279
11.8.2 步骤2:提取并解释SQL语句 287
11.8.3 步骤3:调整SQL语句 291
11.9 SQL调整中实际情况的研究 291
11.10 高级SQL运行方案分析 294
11.11 保存SQL调整的永久性改变 297
11.12 小结 298
第12章 利用Oracle并行特性进行调整 299
12.1 使用Oracle并行查询 300
12.1.1 并行查询的init.ora参数 300
12.1.2 设置优化并行度 301
12.1.3 使用并行查询提示 304
12.2 监视Oracle并行查询 305
12.2.1 利用STATSPACK监视Oracle并行查询 305
12.2.2 利用V$视图监视Oracle并行查询 306
12.2.3 并行查询和分布式对象 306
12.2.4 查找Oracle并行查询候选数据表 307
12.3 使用并行DML 308
12.3.1 启用并行DML 309
12.3.2 Oracle表重组工作的并行化 309
12.3.3 并行的索引重建 310
12.4 小结 311
第13章 Oracle并行服务器环境的调整 312
13.1 Oracle并行服务器系统结构的介绍 312
13.2 OPS数据分区 314
13.3 集成分布式锁管理器 314
13.4 针对OPS的Oracle数据表设置 317
13.5 调整OPS环境 319
13.6 监视OPS的STATSPACK表 320
13.6.1 stats$rowcache_summary表 320
13.6.2 stats$sgaxs表 320
13.6.3 stats$sysstat表 321
13.7 扩展STATSPACK以获取OPS信息 322
13.8 查询Oracle并行服务器的v$视图 325
13.9 小结 327
第三部分 利用STATSPACK进行数据库报告 329
第14章 利用STATSPACK监视Oracle 329
14.1 报警程序概述 329
14.2 定制为DBA提供的异常警告报告 330
14.2.1 STATSPACK警告日报 330
14.2.2 服务器警告日报 338
14.2.3 Oracle问题的实时检测 339
14.2.4 对象增长周报 340
14.2.5 跟踪报警报告 342
14.2.6 Web服务器警告报告 345
14.2.7 缓冲繁忙等待警告 345
14.3 STATSPACK相互作用报告 347
14.4 安排和定制Oracle报警报告 352
14.5 小结 353
第15章 利用STATSPACK进行趋势分析 354
15.1 利用MS-Excel绘制STATSPACK数据的图形 354
15.1.1 利用电子表格图表向导绘制STATSPACK数据图形 354
15.1.2 步骤1:定制STATSPACK报告 355
15.1.3 步骤2:在SQL?Plus中运行报告 356
15.1.4 步骤3:高亮选择并复制结果 356
15.1.5 步骤4:打开MS-Excel并粘贴数据 356
15.1.6 步骤5:将数据划分出数据列 357
15.1.7 步骤6:数据分栏 358
15.1.8 步骤7:启动图表向导 359
15.1.9 步骤8:选择线条图 359
15.1.10 步骤9:完成图表向导并查看图表 360
15.1.11 步骤10:添加趋势线 360
15.2 用于预测的STATSPACK报告 360
15.2.1 用于趋势分析的基本STATSPACK度量 361
15.2.2 用于数据库服务器趋势分析的STATSPACK扩展 362
15.2.3 检查服务器以小时为单位的趋势 364
15.2.4 绘制一周中各天服务器统计数据的图表 366
15.3 STATSPACK数据基于Web的图形绘制 367
15.3.1 RRDtool 368
15.3.2 其他基于Web的制图工具 368
15.4 小结 370
附录 371
附录A STATSPACK脚本 371