第1章 性能优化方法学 2
1.1什么是性能问题 2
1.1.1如何发现性能问题 2
1.1.2衡量性能的关键指标 2
1.1.3性能基准测试 3
1.1.4制定优化目标 3
1.2性能优化方法学 3
1.2.1几种常见误区 4
1.2.2自上而下(From Top To Down)方法学 4
1.2.3自下而上(From Down To Top)方法学 5
1.2.4自上而下和自下而上,如何选择? 5
1.3高质量数据库设计 5
1.3.1充分了解需求 6
1.3.2设计概念模型 7
1.3.3设计逻辑结构 8
1.3.4设计物理结构 10
1.3.5应用开发阶段 10
1.3.6运行维护阶段 11
1.4性能调整与优化 11
1.4.1磁盘瓶颈 12
1.4.2 CPU瓶颈 14
1.4.3内存瓶颈 16
1.4.4网络瓶颈 17
1.4.5懒惰系统 17
1.4.6关键SQL语句优化 18
1.5性能优化基本准则 18
1.6小结 19
第2章 实战案例研究与分享 21
2.1性能问题的提出 21
2.1.1系统现状:从Oracle RAC谈起 21
2.1.2性能优化解决方案:“分库”架构 22
2.1.3高可用解决方案:DB2 HADR 24
2.2实施:经营分析库 26
2.2.1 DB2数据库安装 26
2.2.2操作系统参数配置 27
2.2.3实例创建与配置 29
2.2.4存储规划与文件系统创建 30
2.2.5数据库创建 32
2.2.6 DB2参数配置 35
2.3实施:DB2 HADR 38
2.3.1准备工作 38
2.3.2复制数据库 38
2.3.3配记置HADR 43
2.3.4启动主从数据库 44
2.3.5 HADR切换演练 45
2.3.6为JAVA应用配置ACR 47
2.4性能分析 48
2.4.1业务分析 49
2.4.2系统分析 49
2.4.3优化方法学与计划 50
2.5性能优化 51
2.5.1全局调整和优化 51
2.5.2人力资源模块优化 64
2.5.3查询分析模块优化 69
2.5.4报表应用优化 72
2.5.5性能优化总结 74
2.6小结 75
第3章 高质量物理设计 77
3.1从数据库硬件选型谈起 77
3.1.1对主机的考虑 77
3.1.2对存储的考虑 77
3.1.3对网络环境的考虑 78
3.1.4电信公司选型结果 78
3.2存储设计 79
3.2.1磁盘与磁盘阵列技术 80
3.2.2条带化 83
3.2.3存储设计 84
3.2.4为电信公司规划存储 87
3.2.5为电信公司创建数据库 87
3.3表空间设计 88
3.3.1表空间管理方式 88
3.3.2表空间类型 91
3.3.3表空间参数设置 92
3.3.4为电信公司设计表空间 93
3.4内存的设置管理 94
3.4.1解密 DB2内存 95
3.4.2缓冲池设计 99
3.4.3缓冲池命中率 101
3.4.4 STMM自动管理内存 102
3.4.5为电信公司设计缓冲池 102
3.5高质量物理设计最佳实践 103
3.5.1硬件配置 103
3.5.2存储的设计配置 103
3.5.3数据库参数初始化选择 104
3.5.4内存设置管理 104
3.5.5表空间设计管理 104
3.6小结 105
第4章 经典逻辑设计 107
4.1数据库设计不仅是一种艺术 107
4.1.1业务需求 107
4.1.2性能需求 107
4.2常规表设计体现真功夫 108
4.2.1规范化决定成败 108
4.2.2用户与模式 109
4.2.3字段与类型 111
4.2.4建表的讲究 114
4.2.5键与约束 118
4.2.6序列、标识列和生成列 120
4.2.7处理大对象的智慧 122
4.3扑朔迷离的临时表 125
4.3.1声明全局临时表(DGTT) 125
4.3.2创建全局临时表(CGTT) 127
4.3.3临时表小结 128
4.4无处不在的时态表 129
4.4.1无处不在的时间 129
4.4.2系统时态表 130
4.4.3应用时态表 134
4.4.4双时态表 138
4.4.5将普通表转换为时态表 139
4.5索引设计是一招鲜,吃遍天 140
4.5.1 DB2索引长什么样 140
4.5.2为了性能设计索引 142
4.5.3吃透组合索引 148
4.5.4创建索引 150
4.5.5索引的常见误区 150
4.6触发器设计一瞥 155
4.7小结 156
第5章 高级逻辑设计 158
5.1如何处理TB级的数据 158
5.1.1方法学指导 158
5.1.2合理运用高级设计技术 158
5.2 DB2 DPF设计 159
5.2.1 DB2 DPF技术内幕 160
5.2.2 DB2 DPF设计最佳实践 161
5.3表分区设计 162
5.3.1表分区技术内幕 163
5.3.2全局索引vs分区索引 166
5.3.3转入转出 168
5.3.4分区排除技术 169
5.3.5分区维护 172
5.3.6 V10新特性:多温度存储 173
5.4 MDC表设计 175
5.4.1 MDC技术内幕 175
5.4.2 MDC表设计最佳实践 177
5.4.3案例:“吃磁盘”的MDC表 178
5.5分区技术对比:DB2 vs Oracle 179
5.6 MQT设计 184
5.6.1 MQT的能力 184
5.6.2创建MQT必须掌握的要点 187
5.6.3深入讨论MQT的刷新机制 188
5.6.4 MQT设计最佳实践 190
5.7强大的数据压缩 192
5.7.1行压缩深度剖析 192
5.7.2 V 10新特性:自适应压缩 194
5.7.3数据压缩实践与探索 195
5.8小结 198
第6章 系统监控 200
6.1由一则新闻想到的 200
6.2操作系统监控 200
6.2.1 CPU监控 201
6.2.2 I/O监控 203
6.2.3内存监控 204
6.2.4网络监控 206
6.3数据库监控 207
6.3.1快照监视器 207
6.3.2事件监视器 211
6.3.3监视器表函数 214
6.3.4管理视图 218
6.3.5 db2pd 219
6.3.6 db2top 222
6.4关键SQL语句监控 223
6.4.1监控最耗费用户CPU时间的动态SQL 223
6.4.2监控访问热点对象执行次数最多的SQL 224
6.4.3监控运行时间最长的SQL 224
6.4.4监控执行次数最多的SQL 224
6.4.5监控排序次数最多的SQL 225
6.5关键性能指标(KPI) 225
6.5.1缓冲区命中率 225
6.5.2包缓冲区命中率 226
6.5.3编目缓冲区命中率 226
6.5.4缓冲区读写平均响应时间 226
6.5.5日志写入速度 227
6.5.6锁升级及死锁 227
6.5.7排序溢出率 227
6.5.8数据、索引页异步清除比例 228
6.5.9脏页偷取次数 228
6.6融会贯通——监控的最佳实践 229
6.6.1 CPU瓶颈问题的监控与诊断 229
6.6.2 I/O瓶颈的监控与诊断 231
6.6.3内存瓶颈的监控与诊断 234
6.6.4懒惰系统的监控与诊断 236
6.7图形化性能管理器 237
6.8小结 238
第7章 配置参数与运维工具优化 240
7.1配置参数优化 240
7.1.1操作系统参数优化 240
7.1.2 DBM参数优化 242
7.1.3 DB参数优化 244
7.1.4注册变量优化 249
7.1.5常见问题总结 250
7.2日常运维工具的使用与优化 250
7.2.1知己知彼——统计信息收集 250
7.2.2集中兵力——碎片整理工具 251
7.2.3随机应变——重新绑定 253
7.3数据移动工具 254
7.3.1导出数据(EXPORT) 255
7.3.2导入数据(IMPORT) 256
7.3.3 LOAD——导入大数据的核武器 259
7.3.4 LOAD FROM CURSOR轻松移动数据 269
7.3.5 INGEST——性能和可用性间平衡的使者 270
7.3.6使用db2move在数据库间移动数据 274
7.3.7 db2relocatedb—— DB2移形换位 276
7.3.8存储过程——内部数据挪移的利器 278
7.3.9特殊对象的移动方式 283
7.4备份恢复工具优化 286
7.4.1备份的基本原理与优化 286
7.4.2 DB2崩溃恢复、版本恢复和前滚恢复与优化 290
7.5运维工具的调速策略 294
7.6小结 296
第8章 锁和日志优化 299
8.1 DB2锁机制解析 299
8.1.1没有锁会发生什么 299
8.1.2锁的类型和兼容性 301
8.2 DB2隔离级 305
8.2.1 DB2提供的四种隔离级 305
8.2.2如何设定隔离级 307
8.3实战案例:锁问题分析和解决 308
8.3.1什么是锁问题 308
8.3.2从监控开始 309
8.3.3锁等待分析和解决 311
8.3.4锁超时分析和解决 314
8.3.5锁升级分析和解决 315
8.3.6死锁分析和解决 316
8.4深入浅出——DB2日志的秘密 320
8.4.1 DB2日志的原理 320
8.4.2 DB2日志的模式 323
8.4.3日志优化的最佳实践 325
8.5并发机制比较:DB2 vs Oracle 326
8.5.1锁与隔离级别:DB2 vs Oracle 326
8.5.2日志:DB2 vs Oracle 327
8.6并发性能优化 328
8.6.1应用开发 328
8.6.2数据库调优 329
8.7小结 330
第9章 SQL语句优化实战 332
9.1 SQL优化基础,理解DB2优化器 332
9.1.1 SQL语句的编译过程 332
9.1.2 DB2优化器的核心作用 333
9.1.3 SQL语句优化过程 334
9.2 SQL优化关键:分析访问计划 334
9.2.1解释(Explain)工具 334
9.2.2解读访问计划 338
9.2.3表扫描与索引扫描 345
9.2.4嵌套循环连接、归并连接和哈希连接 348
9.2.5基数估计和统计信息 353
9.2.6用优化概要定制访问计划 362
9.3实战案例集锦 366
9.3.1案例1:不可思议的物理读次数 367
9.3.2案例2:理想的索引没用上 370
9.3.3案例3:标记位(Flag)数据上的runstats时机 374
9.3.4案例4: NLJOIN vs HSJOIN大比拼 377
9.3.5案例5:不是压缩惹的祸 381
9.3.6案例6:居高不下的CPU占用率 385
9.4高级SQL语句应用 390
9.4.1 Merge语句 390
9.4.2层次查询和SQL递归 392
9.4.3报表开发中的GROUP BY扩展 398
9.5编写高效SQL语句 401
9.5.1不要检索多余的数据 401
9.5.2避免在连接谓词中使用复杂表达式 402
9.5.3将复杂表达式放在常量上 402
9.5.4使用DB2提供的日期类型 403
9.5.5谨慎对待隐式类型转换 404
9.5.6外连接的顺序 404
9.5.7 IN和EXISTS子查询 405
9.5.8 OFNR和FFNR子句 410
9.5.9动态SQL vs静态SQL 410
9.5.10分组拼接字符串:LISTAGG 412
9.5.11事务结束后及时COMMIT 412
9.6小结 413
第10章 DB2数据仓库设计与优化 415
10.1数据仓库是什么 415
10.1.1数据仓库的误区 415
10.1.2数据仓库的体系结构 417
10.2支撑数据仓库的DB2特性 417
10.2.1分区数据库 417
10.2.2灵活的数据分区 419
10.2.3多分区环境下的连接(Join)策略 422
10.2.4物化查询表 424
10.3 DB2数据仓库设计 424
10.3.1 BCU/BPU的设计原则 424
10.3.2数据BPU上存储划分 427
10.3.3数据库的文件系统划分 427
10.3.4仓库中诞生的数据库 428
10.3.5数据库分区组的设计 428
10.3.6缓冲池的设计 429
10.3.7数据库日志的设计 429
10.3.8表空间的设计 430
10.3.9表的存放技巧 430
10.3.10数据压缩 431
10.4数据仓库实战 431
10.4.1硬件环境 431
10.4.2实例的规划与实施 432
10.4.3数据库的规划与实施 436
10.4.4参数设置 439
10.4.5其他操作 440
10.5工作负载管理(W LM) 442
10.5.1管理已知的工作负载 442
10.5.2管理不可预见的工作负载 443
10.5.3管理并行的LOAD工作负载 446
10.5.4监控工作负载 446
10.6数据仓库优化总结 448
10.6.1与OLTP系统的区别 448
10.6.2设定优化目标 449
10.6.3物理优化 449
10.6.4逻辑优化 450
10.7与Oracle数据仓库比较 450
10.8小结 451
第11章 DB2 pureScale集群数据库 453
11.1深入浅出DB2 pureScale架构 453
11.1.1 DB2 pureScale架构 453
11.1.2 DB2 pureScale的特点 454
11.1.3 DB2 pureScale与DB2 DPF的区别 455
11.2从细节入手:与Oracle RAC对比 455
11.3某银行DB2 pureScale实战案例 457
11.3.1从硬件配置开始 457
11.3.2突破难点:网络规划 458
11.3.3抓住重点:存储与文件系统 465
11.3.4检查与配置 467
11.3.5正式安装 471
11.3.6数据库部署 473
11.3.7应用端配置 473
11.4 DBA必须掌握的:DB2 pureScale实用运维命令 476
11.4.1日常管理命令 477
11.4.2节点维护命令 479
11.4.3 GPFS文件系统管理命令 480
11.4.4监控命令 481
11.5 DB2 pureScale规划总结 484
11.6小结 485