《DB2数据库性能调整和优化 第2版》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:牛新庄著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2013
  • ISBN:9787302325260
  • 页数:528 页
图书介绍:本书内容包含从DB2性能有关的理论知识、各种工具命令的用法、各种调优的技巧和完整的典型性能调优案例,同时本次修订以DB2 9.7为默认版本,并同时介绍了一些DB2 V10.1的新内容。

第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/O 44

2.2.2异步I/O和同步I/O 45

2.2.3minpout和maxpout 47

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存储的Cache 67

2.6.4网络存储技术 68

2.7存储架构 69

2.7.1存储I/O处理过程 69

2.7.2 RAHD IOPS 70

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 Chain 105

3.4.10监控锁内存的使用 108

3.4.11监控锁升级、死锁和锁超时 108

3.4.12监控全表扫描的SQL 109

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 db2pd 114

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 sheapthres 146

4.2.3 fcm_num_buffers 146

4.2.4 sheapthres_shr 147

4.2.5 intra_parallel 147

4.2.6 mon_heap_sz 148

4.2.7 query_heap_sz 148

4.3监控和调优数据库级配置参数 148

4.3.1缓冲池大小 149

4.3.2日志缓冲区大小(logbufsz) 155

4.3.3应用程序堆大小(applheapsz) 156

4.3.4 sortheap和sheapthres_shr 157

4.3.5锁相关配置参数 159

4.3.6活动应用程序的最大数目(maxappls) 163

4.3.7 pckcachesz 163

4.3.8 catalogcache_sz 164

4.3.9异步页清除程序的数目(num_iocleaners) 164

4.3.10异步I/O服务器的数目(num_ioservers) 166

4.3.11组提交数目(mincommit) 166

4.3.12 avg_appls 168

4.3.13 chngpgs_thresh(DB) 168

4.3.14 maxfilop 169

4.3.15 logprima、logsecond和logfilsz 169

4.3.16 stmtheap 170

4.3.17 dft_queryopt 170

4.3.18 util_heap_sz(DB) 170

4.4调整DB2概要注册变量 170

4.4.1 db2_arallel_io 171

4.4.2 db2_evaluncommitted 173

4.4.3 db2_skipdeleted 173

4.4.4 db2_skipinserted 173

4.4.5 db2_use_age_container_tag 173

4.4.6 db2_selectivi 173

4.4.7 db2_logger_non_buffered_io 174

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 Conmmitted) 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 LOCKS 198

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 SCAN 334

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_runstats 393

8.2.3如何监控auto_runstats 395

8.2.4 DB2 V10新特性——自动收集统计视图的统计信息 396

8.3碎片整理 397

8.3.1碎片产生机制和影响 397

8.3.2确定何时重组表和索引 398

8.3.3执行表、索引检查是否需要做REORG 401

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 db2expln 419

9.2.4 db2exfmt 422

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 EXISTS 432

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