《DB2数据库性能调整和优化(第2版)》
基本信息
作者: 牛新庄
出版社:清华大学出版社
ISBN:9787302325260
上架时间:2013-7-3
出版日期:2013 年7月
开本:16开
页码:528
版次:2-1
所属分类:计算机 > 数据库 > DB2
更多关于 》》》《DB2数据库性能调整和优化(第2版) 》
内容简介
计算机书籍
《db2数据库性能调整和优化(第2版)》侧重于介绍db2数据库的性能调优。性能调优是一个系统工程:全面监控分析操作系统、i/o性能、内存、应用及数据库才能快速找到问题根源;深刻理解db2的锁及并发机制、索引原理、数据库参数、优化器原理、sql语句调优等内部机理才能针对性地快速提出解决问题的方法;快照、db2pd、db2expln及事件监控器等则是必须熟练掌握的工具。这本书覆盖了进行db2数据库性能调优所需的全部知识和工具,并提供了大量的性能调优的实际案例。
《db2数据库性能调整和优化(第2版)》系统性地总结了db2数据库性能调整的方法、流程、思路和保持系统良好性能的注意要点。最难得的是作者分享了其10年积累的db2性能调优案例和经验总结。
目录
《db2数据库性能调整和优化(第2版)》
第1章 性能调整概述1
1.1 性能概述2
1.2 性能评估4
1.3 建立性能目标7
1.4 什么时候需要做性能调整8
1.5 性能调整准则9
1.6 性能调整的方法和过程10
1.6.1 性能调整的步骤10
1.6.2 性能调整的限制11
1.6.3 向客户了解情况11
1.6.4 性能调整流程图12
1.7 性能模型15
1.7.1 输入17
1.7.2 处理17
1.7.3 输出23
1.8 本章小结24
第2章 操作系统及存储的性能调优27
2.1 aix性能监控综述29
2.1.1 监控工具29
.2.1.2 监控系统总体运行状态30
2.1.3 监控cpu性能34
2.1.4 监控内存使用38
2.1.5 监控存储系统状态40
2.1.6 监控网络状态42
2.2 操作系统性能优化43
2.2.1 直接i/o和并发i/o44
2.2.2 异步i/o和同步i/o45
2.2.3 minpout和maxpout47
2.2.4 文件系统和裸设备47
2.2.5 负载均衡及条带化(striping)48
2.3 逻辑卷和lvmo优化53
2.3.1 使用lvmo进行优化54
2.3.2 卷组pbuf池55
2.3.3 pbuf设置不合理导致性能问题调整案例56
2.3.4 使用ioo进行优化60
2.4 操作系统性能调整总结65
2.5 存储i/o设计65
2.6 存储基本概念65
2.6.1 硬盘65
2.6.2 磁盘阵列技术67
2.6.3 存储的cache67
2.6.4 网络存储技术68
2.7 存储架构69
2.7.1 存储i/o处理过程69
2.7.2 raid iops70
2.7.3 raid 10和raid 5的比较71
2.8 良好存储规划的目标74
2.9 良好存储规划的设计原则75
2.10 存储相关性能调整案例76
2.11 存储i/o性能调整总结79
2.12 本章小结80
第3章 db2性能监控81
3.1 快照监视器案例81
3.1.1 监控动态sql语句81
3.1.2 监控临时表空间使用84
3.2 事件监视器及监控案例87
3.3 利用表函数监控93
3.4 性能管理视图及案例99
3.4.1 监控缓冲池命中率100
3.4.2 监控package cache大小101
3.4.3 监控执行成本最高的sql语句102
3.4.4 监控运行时间最长的sql语句102
3.4.5 监控sql准备和预编译时间最长的sql语句103
3.4.6 监控执行次数最多的sql语句103
3.4.7 监控排序次数最多的sql语句104
3.4.8 监控锁等待时间104
3.4.9 监控lock chain105
3.4.10 监控锁内存的使用108
3.4.11 监控锁升级、死锁和锁超时108
3.4.12 监控全表扫描的sql109
3.4.13 检查页清理器是否足够110
3.4.14 监控prefecher是否足够110
3.4.15 监控数据库内存使用111
3.4.16 监控日志使用情况112
3.4.17 监控占用日志空间最旧的事务112
3.4.18 监控存储路径113
3.4.19 追踪监控历史114
3.5 db2pd114
3.5.1 常用db2pd监控选项和示例115
3.5.2 使用db2pd监控死锁案例127
3.5.3 db2pd使用问题总结132
3.6 内存监控134
3.6.1 db2pd 内存监控134
3.6.2 db2mtrk 内存监控138
3.7 本章小结140
第4章 db2配置参数调整141
4.1 初识db2配置参数141
4.2 监控和调优实例级(dbm)配置参数143
4.2.1 代理程序相关配置参数143
4.2.2 sheapthres146
4.2.3 fcm_num_buffers146
4.2.4 sheapthres_shr147
4.2.5 intra_parallel147
4.2.6 mon_heap_sz148
4.2.7 query_heap_sz148
4.3 监控和调优数据库级配置参数148
4.3.1 缓冲池大小149
4.3.2 日志缓冲区大小(logbufsz)155
4.3.3 应用程序堆大小(applheapsz)156
4.3.4 sortheap和sheapthres_shr157
4.3.5 锁相关配置参数159
4.3.6 活动应用程序的最大数目(maxappls)163
4.3.7 pckcachesz163
4.3.8 catalogcache_sz164
4.3.9 异步页清除程序的数目(num_iocleaners)164
4.3.10 异步i/o 服务器的数目(num_ioservers)166
4.3.11 组提交数目(mincommit)166
4.3.12 avg_appls168
4.3.13 chngpgs_thresh(db)168
4.3.14 maxfilop169
4.3.15 logprimary、logsecond和logfilsz169
4.3.16 stmtheap170
4.3.17 dft_queryopt170
4.3.18 util_heap_sz (db)170
4.4 调整db2概要注册变量170
4.4.1 db2_parallel_io171
4.4.2 db2_evaluncommitted173
4.4.3 db2_skipdeleted173
4.4.4 db2_skipinserted173
4.4.5 db2_use_page_container_tag173
4.4.6 db2_selectivity173
4.4.7 db2_logger_non_ buffered_io174
4.5 内存自动调优174
4.5.1 内存自动调优示例175
4.5.2 启用内存自动调优及相关参数176
4.5.3 内存配置参数的配置原则178
4.6 本章小结179
第5章 高级锁与优化181
5.1 隔离级别与锁181
5.1.1 可重复读(rr—repeatable read)182
5.1.2 读稳定性(rs—read stability)184
5.1.3 游标稳定性(cs—cursor stability)186
5.1.4 当前提交(currently committed)188
5.1.5 未提交读(ur—uncommitted read)190
5.1.6 隔离级别总结193
5.2 加锁总结195
5.2.1 如何获取锁195
5.2.2 意图锁和非意图锁196
5.2.3 读锁和写锁197
5.2.4 lrb(lock resource block)197
5.2.5 use and keep locks198
5.2.6 索引类型和下一键锁199
5.2.7 扫描方式与加锁201
5.3 乐观锁204
5.3.1 悲观锁和乐观锁204
5.3.2 db2 v9.5中的乐观锁205
5.3.3 乐观锁应用案例212
5.4 内部锁221
5.4.1 内部方案锁(internal plan lock)221
5.4.2 内部v锁(internal variation lock)222
5.4.3 内部s锁223
5.4.4 内部c锁224
5.4.5 其他内部锁225
5.5 锁等待及调整案例228
5.5.1 锁等待问题解决流程和步骤228
5.5.2 捕获引起锁等待的sql语句230
5.5.3 利用db2pd捕获锁超时233
5.5.4 利用事件监视器捕获锁超时236
5.6 锁升级及调整案例238
5.6.1 监控锁升级239
5.6.2 锁升级调整239
5.7 死锁及调整案例241
5.7.1 利用事件监视器监控死锁242
5.7.2 死锁案例243
5.7.3 最小化死锁建议246
5.8 最大化并发性246
5.8.1 选择合适的隔离级别246
5.8.2 尽量避免锁等待、锁升级和死锁246
5.8.3 设置合理的注册表变量247
5.9 锁相关的性能问题总结255
5.10 锁与应用程序开发256
5.11 本章小结259
第6章 索引设计与优化261
6.1 索引概念261
6.1.1 索引优点261
6.1.2 索引类型263
6.2 索引结构263
6.3 理解索引访问机制266
6.4 索引设计269
6.4.1 创建索引269
6.4.2 创建集群索引270
6.4.3 创建双向索引271
6.4.4 完全索引访问272
6.4.5 与创建索引相关的问题273
6.4.6 创建索引示例273
6.5 索引创建原则与示例274
6.5.1 索引与谓词274
6.5.2 根据查询使用的列建立索引276
6.5.3 根据条件语句中谓词的选择度创建索引277
6.5.4 避免在建有索引的列上使用函数278
6.5.5 在那些需要被排序的列上创建索引278
6.5.6 合理使用include关键词创建索引280
6.5.7 指定索引的排序属性281
6.6 影响索引性能的相关配置282
6.6.1 设置影响索引性能的配置参数282
6.6.2 为索引指定不同的表空间282
6.6.3 确保索引的集群度283
6.6.4 使表和索引统计信息保持最新283
6.6.5 重组索引283
6.7 索引维护284
6.7.1 异步索引清除(aic)285
6.7.2 联机索引整理碎片287
6.7.3 查找使用率低下的索引287
6.7.4 索引压缩289
6.8 db2 design advisor(db2advis)289
6.9 本章小结293
第7章 db2优化器299
7.1 db2优化器介绍300
7.2 sql语句执行过程302
7.3 优化器组件和工作原理304
7.3.1 查询重写示例:谓词移动、合并和转换305
7.3.2 优化器成本评估310
7.3.3 本地谓词基数(cardinality)估计311
7.3.4 连接基数(cardinality)估计313
7.3.5 分布统计信息317
7.3.6 列组统计信息对基数的影响321
7.4 扫描方式330
7.4.1 全表扫描331
7.4.2 索引扫描331
7.4.3 rid scan334
7.5 连接方法335
7.5.1 嵌套循环连接336
7.5.2 合并连接338
7.5.3 哈希连接339
7.5.4 选择最佳连接的策略340
7.6 优化级别340
7.6.1 优化级别概述341
7.6.2 选择优化级别344
7.6.3 设置优化级别345
7.7 基于规则的优化347
7.7.1 优化器概要文件概述347
7.7.2 启用优化概要文件349
7.7.3 优化概要文件使用示例350
7.8 如何影响优化器来提高性能357
7.8.1 使db2统计信息保持最新357
7.8.2 构建适当的索引357
7.8.3 配置合理的数据库配置参数358
7.8.4 选择合适的优化级别359
7.8.5 合理的存储i/o设计359
7.8.6 良好的应用程序设计和编码360
7.9 本章小结363
第8章 统计信息更新与碎片整理365
8.1 统计信息更新365
8.1.1 统计信息的重要性365
8.1.2 统计信息更新示例369
8.1.3 like statistics统计信息更新372
8.1.4 列组统计信息更新374
8.1.5 分布统计信息更新383
8.1.6 统计信息更新策略389
8.2 自动统计信息更新391
8.2.1 自动runstats的基本概念391
8.2.2 如何打开auto runstats393
8.2.3 如何监控auto runstats395
8.2.4 db2 v10新特性——自动收集统计视图的统计信息396
8.3 碎片整理397
8.3.1 碎片产生机制和影响397
8.3.2 确定何时重组表和索引398
8.3.3 执行表、索引检查是否需要做reorg401
8.3.4 reorg的用法和使用策略402
8.4 重新绑定程序包405
8.5 本章小结407
第9章 sql语句调优409
9.1 通过监控找出最消耗资源的sql语句409
9.2 通过解释工具分析sql语句执行计划410
9.2.1 解释表411
9.2.2 visual explain(可视化解释)412
9.2.3 db2expln419
9.2.4 db2exfmt422
9.2.5 各种解释工具的比较424
9.2.6 如何从解释信息中获取有价值的建议424
9.3 理解sql语句如何工作425
9.3.1 理解谓词类型425
9.3.2 排序和分组428
9.3.3 连接方法430
9.3.4 扫描方式431
9.4 sql调优案例431
9.4.1 尽量使用单条语句完成逻辑431
9.4.2 合理使用not in和not exists432
9.4.3 利用子查询进行优化434
9.4.4 调整表连接顺序使join最优436
9.4.5 数据非均匀分布时手工指定选择性437
9.4.6 使用udf代替查询中的复杂部分438
9.4.7 合并多条sql语句到单个sql表达式439
9.4.8 使用sql一次处理一个集合语义440
9.4.9 在无副作用的情况下使用sql函数442
9.4.10 小结443
9.5 提高应用程序性能443
9.5.1 良好的sql编码规则443
9.5.2 提高sql编程性能445
9.5.3 改进游标性能447
9.5.4 根据业务逻辑选择最低粒度的隔离级别448
9.5.5 通过reopt绑定选项来提高性能448
9.5.6 统计信息、碎片整理和重新绑定449
9.5.7 避免不必要的排序449
9.5.8 在c/s环境中利用sql存储过程降低网络开销450
9.5.9 在高并发环境下使用连接池450
9.5.10 使用design advisor(db2advis)建议索引450
9.5.11 提高批量删除、插入和更新速度451
9.5.12 提高插入性能451
9.5.13 高效的select语句452
9.6 高性能sql语句注意事项453
9.6.1 避免在搜索条件中使用复杂的表达式453
9.6.2 将 optimize for n rows子句与fetch first n rows only子句配合使用454
9.6.3 避免使用冗余的谓词454
9.6.4 避免使用多个带有distinct关键字的聚集操作455
9.6.5 避免连接列之间数据类型不匹配456
9.6.6 避免对表达式使用连接谓词456
9.6.7 避免在谓词中使用空操作表达式来更改优化器估算456
9.6.8 确保查询符合星型模式连接的必需条件457
9.6.9 避免使用非等式连接谓词458
9.6.10 避免使用不必要的外连接459
9.6.11 使用参数标记来缩短动态查询的编译时间459
9.6.12 使用约束来提高查询优化程度460
9.7 本章小结461
第10章 db2调优案例、问题总结和技巧463
10.1 调优案例1:某移动公司存储设计不当和sql引起的i/o瓶颈463
10.2 调优案例2:某银行知识库系统锁等待、锁升级引起性能瓶颈470
10.3 调优案例3:某汽车制造商erp系统通过调整统计信息提高性能478
10.4 调优案例4:某农信社批量代收电费批处理慢调优案例488
10.5 调优案例5:某银行系统sql执行慢,通过跟踪信息获取调整信息492
10.6 调优案例6:某银行系统字段类型定义错误导致sql执行时间变长495
10.7 调优学习案例:利用压力测试程序学习db2调优498