第1章 DB2底层组件 1
1.1 DB2底层组件概述 1
1.2 OSS组件 3
1.2.1 OSS组件功能 3
1.2.2 OSS组件诊断案例 5
1.3 Memory Optimizer组件 6
1.4 BSU组件 7
1.4.1 BSU组件功能 7
1.4.2 BSU组件诊断案例 8
1.5 CCI组件 9
1.5.1 CCI组件功能 9
1.5.2 CCI组件诊断案例 10
1.6 RDS组件 11
1.6.1 RDS组件功能 11
1.6.2 RDS诊断案例 12
1.7 DMS组件 13
1.7.1 DMS组件功能 13
1.7.2 DMS诊断案例 14
1.8 IXM组件 15
1.8.1 IXM组件功能 15
1.8.2 IXM诊断案例 15
1.9 BPS组件 16
1.9.1 BPS组件功能 16
1.9.2 BUFFERPOOL配置文件 17
1.9.3 缓冲描述符BPD 17
1.9.4 BUFFERPOOL管理算法 20
1.9.5 基于块的缓冲池 24
1.9.6 BPS组件诊断案例 26
1.10 DPS组件 26
1.10.1 DPS组件功能 26
1.10.2 DPS组件诊断案例 27
1.11 DB2底层组件总结 28
1.12 本章小结 29
第2章 DB2进程体系结构 31
2.1 DB2进程技术模型 32
2.1.1 与操作系统相关的进程 33
2.1.2 与实例相关的进程 35
2.1.3 与数据库相关的进程 37
2.1.4 与应用程序相关的进程 41
2.1.5 Windows上相关的服务/线程 42
2.2 代理程序通信 43
2.2.1 代理程序概述 43
2.2.2 代理程序相关配置参数 44
2.2.3 连接集中器工作原理 46
2.2.4 应用程序、代理程序和交易 49
2.2.5 代理和连接常见问题与优化 50
2.2.6 DB2 V8、V9.1、V9.5代理的差异性 55
2.3 实用程序相关进程 56
2.3.1 LOAD相关进程 56
2.3.2 备份/恢复相关进程 59
2.4 DB2 V9.5多线程体系结构概述 61
2.4.1 多线程简介 61
2.4.2 DB2 V9.5主要进程 63
2.4.3 监控多线程 64
2.4.4 监控EDU运行的SQL语句 66
2.5 本章小结 68
第3章 DB2内存体系结构 69
3.1 32位与64位内存寻址 69
3.1.1 32位与64位寻址空间 69
3.1.2 32位系统常见内存问题 71
3.1.3 32位系统内存寻址解决方案 71
3.2 DB2内存体系结构 72
3.2.1 实例共享内存 73
3.2.2 数据库全局内存 74
3.2.3 应用程序全局内存 79
3.2.4 代理私有内存 82
3.2.5 代理程序与应用程序通信内存 83
3.2.6 共享内存与私有内存 84
3.3 内存集、内存池和内存块 86
3.3.1 实例级别内存集 87
3.3.2 跟踪内存使用 90
3.3.3 定位内存泄漏 93
3.3.4 数据库内存集 93
3.4 内存自动调优 96
3.4.1 内存自动调优示例 98
3.4.2 启用内存自动调优及相关参数 99
3.5 本章小结 100
第4章 DB2存储内部结构 101
4.1 数据库物理存储模型 101
4.1.1 DB2存储层次结构 101
4.1.2 数据库物理目录 104
4.2 表空间存储结构 106
4.2.1 SMS表空间存储结构 107
4.2.2 DMS表空间头部信息 108
4.2.3 DMS表空间映射 109
4.2.4 STRIPE SET和RANGE 112
4.2.5 表空间重平衡 115
4.2.6 表空间高水位 118
4.3 数据库内部存储结构 124
4.3.1 数据页和RID格式 124
4.3.2 列在磁盘上的布局 128
4.3.3 数据页内部结构 130
4.3.4 索引叶内部结构 133
4.3.5 数据库物理存储限制 138
4.4 日志文件存储结构 139
4.4.1 日志存储内容 139
4.4.2 SQLOGCTL.LFH文件 144
4.5 本章小结 148
第5章 DB2优化器 149
5.1 DB2优化器介绍 150
5.2 SQL语句执行过程 152
5.3 优化器组件和工作原理 154
5.3.1 查询重写示例:谓词移动、合并和转换 155
5.3.2 优化器成本评估 161
5.3.3 本地谓词基数(CARDINALITY)估计 162
5.3.4 连接基数(CARDINALITY)估计 164
5.3.5 分布统计信息 168
5.3.6 列组统计信息对基数的影响 172
5.4 扫描方式 183
5.4.1 全表扫描 184
5.4.2 索引扫描 184
5.4.3 RID SCAN 188
5.5 连接方法 188
5.5.1 嵌套循环连接 189
5.5.2 合并连接 191
5.5.3 哈希(hash)连接 192
5.5.4 选择最佳连接的策略 193
5.6 优化级别 193
5.6.1 优化级别概述 194
5.6.2 选择优化级别 197
5.6.3 设置优化级别 198
5.7 基于规则的优化 200
5.7.1 优化器概要文件概述 200
5.7.2 启用优化概要文件 202
5.7.3 优化概要文件使用示例 204
5.8 如何影响优化器来提高性能 210
5.8.1 使DB2统计信息保持最新 211
5.8.2 构建适当的索引 211
5.8.3 配置合理的数据库配置参数 212
5.8.4 选择合适的优化级别 213
5.8.5 合理的存储I/O设计 213
5.8.6 良好的应用程序设计和编码 214
5.9 优化器总结 217
第6章 高级锁 219
6.1 隔离级别和锁 219
6.1.1 可重复读 220
6.1.2 读稳定性 221
6.1.3 游标稳定性 224
6.1.4 未提交读 226
6.1.5 隔离级别加锁示例讲解 228
6.1.6 隔离级别摘要 232
6.2 加锁总结 234
6.2.1 如何获取锁 234
6.2.2 意图锁和非意图锁 236
6.2.3 读锁和写锁 236
6.2.4 LRB(Lock Resource Block) 237
6.2.5 USE AND KEEP LOCKS 237
6.2.6 索引类型和下一键锁 239
6.2.7 扫描方式加锁情况 240
6.3 乐观锁 243
6.3.1 悲观锁定和乐观锁定 243
6.3.2 DB2 V9.5的乐观锁定 244
6.3.3 乐观锁应用案例 251
6.4 内部锁 259
6.4.1 内部方案锁(Internal Plan Lock) 260
6.4.2 内部V锁(Internal Variation Lock) 261
6.4.3 内部S锁 262
6.4.4 内部C锁 263
6.4.5 其他内部锁 265
6.5 设置锁相关的注册变量 268
6.5.1 DB2_EVALUNCOMMITTED 270
6.5.2 DB2_SKIPDELETED 274
6.5.3 DB2_SKIPINSERTED 275
6.6 本章小结 277
第7章 数据库配置参数 279
7.1 数据库配置参数概述 279
7.2 监控和调优实例(DBM)配置参数 280
7.2.1 并行相关的配置参数 281
7.2.2 安全相关的配置参数 283
7.2.3 环境相关的配置参数 284
7.2.4 监视相关的配置参数 284
7.2.5 通信相关的配置参数 284
7.2.6 诊断相关的配置参数 285
7.2.7 代理程序相关配置参数 285
7.2.8 SHEAPTHRES 288
7.2.9 MON_HEAP_SZ 288
7.2.10 QUERY_HEAP_SZ 288
7.3 监控和调优DB配置参数 288
7.3.1 内存相关配置参数调整 290
7.3.2 应用程序堆大小(APPHEAPSZ) 298
7.3.3 SORTHEAP和SHEAPTHRES 298
7.3.4 SHEAPTHRES_SHR 301
7.3.5 锁相关配置参数 301
7.3.6 活动应用程序的最大数目(MAXAPPLS) 304
7.3.7 PKGCACHESZ 305
7.3.8 CATALOGCACHE_SZ 305
7.3.9 异步页清除程序的数目(NUM_IOCLEANERS) 305
7.3.10 异步I/O服务器的数目(NUM_IOSERVERS) 307
7.3.11 组提交数目(MINCOMMIT) 308
7.3.12 AVG_APPLS 309
7.3.13 CHNGPGS_THRESH(DB) 310
7.3.14 MAXFILOP 310
7.3.15 LOGPRIMARY、LOGSECOND和LOGFILSZ 310
7.3.16 日志缓冲区大小(LOGBUFSZ) 311
7.3.17 STMTHEAP 312
7.3.18 DFT_QUERYOPT 312
7.3.19 UTIL_HEAP_SZ(DB) 312
7.3.20 其他数据库配置参数 312
7.4 环境变量和DB2注册表变量 313
7.4.1 DB2INSTANCE变量 315
7.4.2 DB2_PARALLEL_IO 316
7.4.3 DB2_USE_PAGE_CONTAINER_TAG 318
7.4.4 DB2_SELECTIVITY 319
7.4.5 DB2_INLIST_TO_NLJN 320
7.4.6 DB2_MINIMIZE_LISTPREFETCH 320
7.4.7 DB2_USE_ALTERNATE_PAGE_CLEANING 320
7.4.8 DB2_REDUCED_OPTIMIZATION 321
7.4.9 DB2_LIKE_VARCHAR 322
7.4.10 DB2_NEW_CORR_SQ_FF 323
7.4.11 DB2_OPT_MAX_TEMP_SIZE 324
7.5 本章小结 324
第8章 DB2数据字典 327
8.1 系统目录视图概述 327
8.2 SYSCAT系统编目视图 328
8.2.1 数据库对象信息 328
8.2.2 权限相关的系统编目视图 330
8.2.3 程序包相关的系统编目视图 333
8.3 SYSIBMADM管理视图 334
8.3.1 监控缓冲池命中率 336
8.3.2 监控PACKAGE CACHE大小 336
8.3.3 监控执行成本最高的SQL语句 337
8.3.4 监控运行最长的SQL语句 337
8.3.5 监控SQL准备和预编译时间最长的SQL语句 338
8.3.6 监控执行次数最多的SQL语句 338
8.3.7 监控排序次数最多的SQL语句 339
8.3.8 监控LOCK WAIT时间 339
8.3.9 监控LOCK CHAIN 340
8.3.10 监控锁内存使用 340
8.3.11 监控锁升级、死锁和锁超时 341
8.3.12 监控全表扫描的SQL 341
8.3.13 检查PAGE CLEANERS是否足够 342
8.3.14 监控PREFETCHER是否足够 343
8.3.15 监控数据库内存使用 343
8.3.16 监控日志使用情况 344
8.3.17 监控占用日志空间最旧的交易 345
8.3.18 监控存储路径 345
8.3.19 监控表空间使用情况 346
8.4 SYSSTAT系统编目视图 347
8.5 利用系统编目视图编写脚本案例 350
8.5.1 案例1 350
8.5.2 案例2 351
8.6 保护系统编目视图 352
8.7 本章小结 353
第9章 高级诊断 355
9.1 db2dart和inspect 355
9.1.1 db2dart和inspect概述 355
9.1.2 利用db2dart查找停顿(quiesce)表空间的用户 358
9.1.3 db2dart诊断高水位问题 360
9.1.4 db2dart诊断数据页损坏问题 362
9.1.5 inspect命令使用案例 365
9.2 db2pdcfg 366
9.2.1 db2pdcfg-cos选项 368
9.2.2 db2pdcfg-catch选项 371
9.2.3 db2pd-fodc选项 376
9.3 db2trc 376
9.3.1 db2trc 376
9.3.2 db2trc案例1 385
9.3.3 db2trc案例2 386
9.4 db2_call_stack和db2nstck 395
9.5 高级诊断案例 396
9.6 小结 400
第10章 深入讲解解释输出 401
10.1 执行计划基础 401
10.2 表访问信息 404
10.2.1 常规表访问 404
10.2.2 扫描方式 407
10.2.3 锁和隔离级别信息 411
10.2.4 谓词 412
10.2.5 临时表访问 417
10.3 排序 420
10.3.1 排序原理 420
10.3.2 共享排序与私有排序 422
10.3.3 监控排序 423
10.3.4 优化排序性能 427
10.4 预取方式 429
10.4.1 数据库预取概念 429
10.4.2 顺序预取 431
10.4.3 列表预取 433
10.4.4 提高预取性能 437
10.5 连接信息 438
10.5.1 嵌套循环连接(NLJOIN) 439
10.5.2 合并连接(MSJOIN) 440
10.5.3 哈希连接(HSJOIN) 441
10.5.4 外连接 443
10.6 IndexORing和IndexANDing 444
10.6.1 IndexORing案例 444
10.6.2 IndexANDing案例 446
10.7 其他输出信息 448
10.7.1 数据流信息 448
10.7.2 插入、更新和删除信息 450
10.7.3 并行处理信息 451
10.7.4 其他说明信息 452
10.8 基于执行计划的优化案例 454
10.9 本章小结 470
后记 473
参考文献 475