前言
写作背景
作为最早出现的关系型数据库,DB2提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模到大规模应用程序的执行能力。并且DB2以拥有一个非常完备的查询优化器而著称,其外部连接改善了查询性能,并支持多任务并行查询。近几年来,为了应对爆炸式增长的数据量,DB2也在进行推陈出新,不断推出完美应对大数据的技术,并持续增强DB2的性能以及可用性。到本书出版之时,DB2已经推出了V10.5版本,并在该版本中提供了列式存储功能及更加强大的性能提升。
DB2随着一代代版本的发展,已经成为一个庞然大物,其内部组件众多,对于SQL语句的处理有时甚至需要调动数十个内部组件进行相互协同。当遇到性能问题时更需要对内部原理有详细的了解才能进行有效的处理以及应对,否则就会让人感到无从下手。与Oracle数据库相比,DB2数据库的资料显得相对匮乏,其中鲜有对其内部运行机制进行详细剖析的资料,这也给DB2的传播发展带来了一定的弊端。因此对于这种情况,尽可能地将自己所知分享出来的想法从我脑中涌现,尽可能地对DB2处理过程在流程上进行阐述的念头一直支持着我完成本书的写作。
在常见的数据库问题中,性能问题不仅出现的频率较高并且很多生产系统中并不存在一个对性能问题进行隔离的高可用机制,正因为如此,在很多关键行业的系统中,性能问题往往成为影响生产系统正常运行的最大因素。而性能问题的影响时间有时长达数小时,这样不仅给生产系统带来了极大的负面影响,也使业务很难正常进行。
由于性能问题的特殊性,很多情况下问题发生过后并没有留下任何有效的故障信息,这又给之后的分析处理带来了一定的难度和困扰,往往并无相关线索可以对其进行求证。而对于性能问题的信息收集及调优方法,目前关于DB2性能调优的资料过于分散,并没有提供一个很完善的性能解决体系,甚至有些资料中仅仅在套用各个KPI指标对性能问题进行调节,虽然这种方式有时能够解决一些问题,但在更多时候会显得无能为力。
在本书中,通过对DB2数据库的内部机制进行探讨,希望能够让读者更好地理解数据库的运行机制,当性能问题发生时能够在脑海中对数据库的整体运作机制有个清晰的认识,这样才能够直接有效地对数据库进行分析与优化。
感谢读者选择本书,笔者水平有限,书中错漏在所难免,敬请读者朋友谅解,并期望读者朋友进行指正。
本书结构
全书分为5大篇共13章。第1篇主要对性能问题的定义、影响性能问题的因素、DB2的整体组件结构,以及对于各种类型语句的处理机制进行详细的探讨;第2篇主要针对DB2提供的各个监控工具进行阐述,并提供了一些监控建议;第3篇主要阐述DB2的内部运行机制及各个组件的原理;第4篇包含DB2中内部工具的优化与运行机制,以及DB2在各个平台中需要注意的性能参数;第5篇对性能优化思路进行了概括性的总结。
第1篇 性能定义及整体架构
第1章主要对性能问题的目标进行了阐述和定义,并描述了可能影响各个工作负载的特征,以及可能对其产生性能影响的因素。
第2章对DB2的体系结构进行了基本介绍,并描述了DB2各个组件处理SQL语句的基本原理与机制。
第2篇 性能监控工具及监控技巧
第3章按照监控特性对DB2提供的监控工具进行了基本介绍,并介绍了一些基本的监控技巧。
第3篇 性能分析及内部原理剖析
第4章对优化器的原理进行了探讨,阐述了优化器的重写机制、优化原理及编译原理,并介绍了如何检查优化器的估算结果的两种方法。
第5章介绍了解决优化器编译问题的的7种性能优化武器,以及何时且如何才能有效地使用这些武器解决实际问题。
第6章描述了为了避免性能问题应该如何对数据库表及索引进行有效设计,针对合适的场景使用适合的技术才能更有效地避免性能问题的发生。
第7章详细描述了DB2数据库的I/O原理,I/O性能通常是数据库运行过程中最为耗时的一环,本章详细介绍了DB2相关I/O情景,以及如何有效地提高I/O性能。
第8章详细介绍了DB2中各个内存池的分配以及作用,并讲述了怎样定位及修复内存泄露的方法。
第9章对数据库的物理结构进行了详细剖析,并讲解了各种情况下物理结构对于数据库性能的负面影响及避免方法。
第10章对DB2中锁及latch等待事件进行了描述与分析,并分享部分等待事件解决案例及心得。
第4篇 实用工具调优及操作系统优化
第11章讲述了backup、restore、export、import、load、reorg、runstats等DB2提供的多种实用工具的执行原理以及性能调优方法。
第12章介绍了AIX及Windows平台上CPU、内存、磁盘I/O及网络等方面的相关优化参数。
第5篇 性能分析思路及优化总结
第13章对性能分析思路进行了归纳与总结,并按照资源占用问题及响应时间缓慢的问题对数据库性能问题提供了整体分析的思路与解决方案。
致谢
首先感谢整个DB2群体,感谢IBM公司对DB2的推广与支持,同样要感谢DB2China论坛、ITPUB论坛、db365论坛以及各个DB2技术QQ群,他们为了DB2的传播发展做出了杰出的贡献,并给初学者们提供了一个很好的成长平台。
其次我要感谢电子工业出版社博文视点的张国霞编辑,她在本书的选题编辑过程中给了我很多帮助,并为我提供了把自己的经验成书出版的机会。感谢牛新庄老师、干毅民老师、成孜论老师及唐志刚老师为本书慷慨作序。还要感谢我的同事王凯,他审阅了本书的部分手稿,提出了很多有价值的参考意见。
最后,感谢多年以来支持我的家人,以及所有在我的成长过程中曾经给予我关心和帮助的朋友们!