DB2数据库性能调整和优化(第2版)

出版时间:2013-7  出版社:清华大学出版社  作者:牛新庄  
Tag标签:无  

前言

序一自1970年IBM公司研究员E.F.Codd博士,即“关系数据库之父”,发表业界第一篇关于关系数据库理论的论文A Relational Model of Data for Large Shared Data Banks以来,伴随着DB2的诞生,IBM公司涌现出了一批优秀的数据库技术领域先驱科学家,并获得了一系列数据库领域大奖,比如1981年荣获了计算机科学界的最高荣誉——ACM图灵奖。在此之后,数据库管理软件在企业中得到广泛应用,业务流程自动化得以实现,对日常的工作和生活带来了深远的影响。随着近年来云计算、大数据、移动以及社交信息技术的发展,数据技术也正在经历深刻的变革,处于一个全新计算时代的最前沿。我们能够观察到这样一个趋势:数据库的24×7高可用性、高可伸缩性,以及企业处理海量信息的方式将趋于实时,并从根本上转变业务运作的模式。客户在数据处理速度、简化程度和成本控制等方面需要更上一层楼。最新版的DB2v10.1带来更低的存储要求以及更高的响应速度,并添加了对大数据管理(比如Hadoop)的支持。更具创新性的PureData 也在这样的技术潮流中应运而生。它整合了基础架构、统一了平台管理和专家知识体系,能够以不同的配置分别提供OLTP(联机事务处理)、OLAP(联机分析处理)和大数据分析操作的能力。今天的企业用户希望他们的数据库能够可靠高效地运作,并推动业务发展。当我们把目光放到中国,就会看到,DB2已成为各行业大型应用系统的支柱产品。但是因DB2而闻名业界的本土技术专家,并不多见。认识新庄是在2012年8月北京举办的“IBM软件技术峰会”上。在中国的数据库技术领域,他是许多年轻人的楷模。新庄的成长令人欣喜,新庄对技术和实践的孜孜不倦令人印象深刻。这套DB2书籍得益于他历年的钻研及实践,对DB2初学者、DB2管理员以及资深从业者,都有非常好的指导及参考价值。祝愿每一位读者能有所得、有所悟,成长为新一代的数据库技术专家,也祝愿新庄在数据库技术领域这条康庄大道上走得更宽更远。IBM全球副总裁兼IBM中国开发中心总经理王阳序二新庄是IBM的老朋友,也是我的老朋友了。虽然我们的见面次数并不多,但我深感他是一位非常优秀的技术专家和管理者。尤其是在技术方面,他有自己的独特见地,在IT软件、硬件及解决方案方面都涉猎很广。另外,他本人也很亲和,具有技术专家的风范。在最近一次交流中,他跟我提起他打算把之前出版的3本DB2系列书籍进行全面版本升级,我感到非常钦佩和欣喜。他在繁忙的日常工作之余,还能利用业余时间完成3本书籍的撰写和更新,足以证明新庄的勤奋和对技术的热爱。同时我也欣喜广大的技术爱好者能有机会分享技术大家的心得。他把他的新书送给我,我先粗略读了一遍,更详细的内容留待以后的时间里细细品味。他的这3本书籍将帮助数据库爱好者和企业数据库实践者由浅入深地学习DB2。即使在网络日益普及的今天,对于DB2技术工作者来说,通过书籍来系统化地学习同样很重要。在我看来,阅读他的书籍有3个最特别之处:第一,他是第一位出版DB2系列中文书籍的作者,随着这么多年书籍的广泛传播,他在此基础上再次升级更新,结合了非常多的读者反馈,增加了很多近几年读者关注和遇到的问题。这非常难得。第二,他所在单位的核心数据库就是DB2,本次书籍的升级纂写,也更多结合了他的实战经验,这将极大帮助更多企业在应用DB2数据库时借鉴和学习。第三,很多的技术书籍是由专注于技术的工作者撰写,而新庄同时还是非常重要的技术管理和实践者。站在管理者的角度撰写的技术书籍更是融合了一名管理者如何看待技术的处理和看待问题的视角。这几本书综合来看,也体现了一名技术管理者乐于分享的心意,这一点是最难得的。最后,让我表达对新庄的敬意和谢意,感谢他对推动中国的信息化建设和技术的普及所做出的贡献!希望广大的技术爱好者和技术管理者好好品味这些书籍,相信你们一定能从中获益匪浅!IBM全球副总裁兼IBM软件集团大中华区总经理胡世忠前言关于本书这些年我做数据库,深深感到,相对于Oracle数据库而言,DB2技术书籍的匮乏,所以我一直想写一套DB2方面的技术书籍,我也一直感觉到自己有义务和责任去写一些东西来给大家分享,也算是对自己10年DB2学习、运用经验的总结吧!目前数据库市场上虽然有Oracle、DB2、Informix、Sybase和SQL Server,但是Informix数据库已经被IBM收购,而Sybase数据库在技术和市场上正走向没落,那么剩下的其实就只有Oracle、DB2和SQL Server数据库了。SQL Server数据库非常好,但是很遗憾,它只能在Windows平台使用,所以如果你深入研究SQL Server数据库,那么大多数情况下你只能做到养家糊口,因为坦白地说,用SQL Sever数据库的大型企业通常是不多的。而国内做Oracle数据库的人太多了,如果你想在Oracle领域出人头地,难度极大。DB2数据库反而做的人不太多,物以稀为贵。DB2数据库被广泛应用在银行、电信、制造、零售、保险等行业,所以我强烈建议你学习DB2数据库,做IBM技术成功的概率会大一些。我们的时间和精力是有限的,所以必须选择好方向,然后去努力。但是过去一直没有时间,直到2008年奥运保障期间,有了一些时间,我才写了这套书。在这套书中,我把应用开发和系统管理剥离开,分成两条线来讲解,包括循序渐进DB2、高级进阶DB2、DB2性能调整和优化这几大块。本书侧重在数据库的性能调优,而性能调优是一个系统工程,全面监控分析操作系统、I/O性能、内存、应用及数据库才能快速找到问题根源,深刻理解DB2的锁及并发机制、索引原理、数据库参数、优化器原理、SQL语句调优等内部机理才能有针对性地快速提出解决问题的方法,快照、db2pd、db2expln及事件监控器等等则是必须熟练掌握的工具。本书正是覆盖了性能调优所需要的全部领域,并提供了大量的性能调优的实际案例。本书系统性地总结了DB2数据库性能调整的方法、流程、思路以及保持系统良好性能的注意要点。最后与读者分享我10年来积累的DB2性能调优案例和经验总结。本书所讲内容适用于DB2V7、V8、V9.5、V9.7的所有平台。本书第1版的出版已有3年时间,这期间收到了很多宝贵的意见反馈,第1版的成书也稍显匆忙,回过头来看确实发现有些细节是值得修改的。另外,IBM DB2LUW这一数据库产品在这几年也发生了很大的变化。从版本上:DB2V9.7成为主流版本,DB2V10.1也已经于今年上半年发布,并且最新的FixPack已经发布到了版本2。技术上更是一日千里:监控技术、压缩技术、分区技术、并发控制、性能提升等等各个方面无一不是变化显著。尤其是purescale等创新型技术的出现,大大改变了原有的技术架构。当然这对DBA提出了更多新的要求。同时在性能和调优方面DB2也有了不小改进和提升,并且增加了一些新的功能,在本次修订中也务求在这些方面有所体现。本书的本次修订涉及的内容较多,合并了原有的第2和第3章为新的一章“操作系统及存储的性能调优”,对其他所有的章节也都做了大量的修改,有些章节的修改幅度很大,希望本次修订能给各位读者提供一些新的知识和经验。关于数据库学习“不经一番寒彻骨,安得梅花扑鼻香”,这样的道理人人都懂,可是能够真正实施的人并不多。在现在的很多年轻人身上,我以为恰恰缺少的就是这样的忘我与痴迷。在我熟悉的数据库技术领域,很多年轻人越来越早就将注意力集中在薪水和职位上,开始变得浮躁,而我想说的是,往往是那些将诸如高薪与职位忘怀的人反而能更快地抵达。在这里,我想讲讲我的技术学习之路,主要是想给大家一些参考,尤其是对在校学生而言,我希望我的学习之路能给你以启迪。我在1999年刚刚开始念硕士时就给自己确定了以后的发展方向,当时定了两个:网络和数据库技术。因为2000年时,网络特别火,能拥有CCNP、CCIE就特别牛,所以自己也考了CCNP证书,但是到后来我发现网络牵涉很多硬件层面的东西,对厂商的依赖特别强,而且面特别窄。所以慢慢就把这个方向放弃了。而我喜欢钻研,所以我就选择了数据库技术。在确认好数据库这个方向后,我深入系统地学习了数据库理论方方面面的知识,我还记得人大王珊教授的那本《数据库系统原理教程》,我读了几十遍,受益匪浅。在对数据库理论学习的同时,我也开始了对DB2和Oracle的深入学习。我是从1999年开始使用DB2V5.2的,那时因为我导师做一个课题需要用到DB2数据库。那时市场上关于DB2方面的技术书籍几乎没有,互联网还不像现在这么发达,自己只能依靠查看DB2随机文档来学习。那时,我用自己兼职帮别人做一些小软件和课题赚的钱去考OCP认证和DB2认证。其实我认为考认证是一个很好的外界动力来促使自己学习,因为考试需要很大一笔花费,所以不想浪费钱的话就只能拼命地看书。那时读研究生有的是时间,所以在2000年我就通过了OCP8i的认证,后来又陆续通过了DB2V5.2的认证,通过这些认证大大增强了自己的自信。同时,我帮导师做应用程序的开发工作,那时用的是PB、Delphi等编程工具,在开发中我有意识地增强自己对SQL的学习,这对我后来的性能调优非常有帮助。因为很多时候在客户现场看到同样的一个操作,本来在数据库中利用函数或其他高级SQL也可以实现的,开发人员却频繁地在数据库和应用程序之间来回切换,殊不知,在过程层(程序)和数据库层反复上下文切换交互会显著影响应用效率。所以,我们首先要有清晰的方向和规划,然后有意识地朝这个方向去努力。做好一个时期的人生规划非常重要,它是你努力的方向,因为积极的学习比被动的学习效率要高太多。机遇偏爱有准备的人,我记得2001年年初的时候,我在网上看到一个帖子说要找一个有DB2认证的人去安装DB2数据库,差旅报销,每天500元,我喜出望外,我有DB2系统管理、应用开发的认证,所以很快就通过了。但去了客户现场以后才发现不是安装,而是去给客户讲课,当时我就傻眼了,因为讲课远比安装配置难得多,而我之前没有讲过课。没办法了,只能前一天夜里看教材备课到凌晨5点,睡两个小时,8点半去讲课,就这样4天讲课,我每天都是休息3小时左右。还好自己毕竟使用过DB2,而且也通过了DB2认证,还是有基础的,这次讲课虽然不太成功,但是毕竟通过了,勉强可以打60分吧,没想到这次培训竟是我以后几年培训生涯的开始。经过这次讲课后,我也看到了自己的差距,知道仅仅拥有认证是不行的,因为客户问的很多问题书本上是没有的,还需要自己进一步钻研,因为平常看书时有些概念不太懂也不会去深入研究,但是讲课时你就必须把这些原理概念弄清楚,所以这需要对数据库更深入地进行学习。后来经过一些其他的渠道,IBM培训部知道我能讲DB2并且有相关证书,就找我讲DB2系列课程。所以从2001年开始我就经常作为IBM官方讲师讲DB2系列的所有课程,其中我感觉到讲课是个很好的学习过程,因为要讲清楚一些内容,就必须自己先精通,这对提升自己有很大的帮助,我把课堂上学员问的实际操作中的问题深入地进行研究,希望学员在我这里听讲3个小时要远远胜过自己看3个小时的书,要想给学生一杯水,那么老师至少应该准备一桶水。艰辛可想而知。所以,我在讲课准备过程中,精心准备实例,课堂下深入和学员交流。争取把一些难懂的概念用浅显易懂的例子来阐述,所以这在客观上促进了自己的学习。随着培训的增多,也有一些客户找我去做一些实际的调优工作,我记得我第一次去客户现场调优是2001年去大连大通证券,当时主要解决锁等待问题。客户环境用到了AIX和CICS环境。当时虽然问题解决了,但自己心中还是感觉到比较虚,因为对AIX和CICS不了解,万一是这两个方面有问题,自己就没办法搞定了;同时认识到复杂系统的调整往往不是单方面的,需要具备全面的知识。所以经过这次事情后,我就在网上买了一个140的IBM工作站小机,自己安装AIX,开始学习AIX,在这个时期我一边学习,一边把AIX的认证全部过掉,我记得非常清楚,为了做HA的实验着实费了很大的功夫,因为那时无法搞到7133阵列,那时小型机不像今天这么普及。后来自己又学习了CICS、WebSphere、MQ和存储,所以我认为有目的的学习、有压力和有动力的学习效率是非常高的。就这样在我培训的过程中,我发现自己哪个方面薄弱并且这个方向有前途我就开始学习,不过那个时候我的技术主要以IBM为主。由于自己对培训比较用心以及客户的好评,找我做培训的国内培训机构开始多起来。感觉到这个时期自己的技术水平增长很快。2002年11月,我参加首届“IBM DeveloperWorksLive! China2002”大会并获得IBM首次在国内评选的“杰出软件技术专家”奖,在6名获奖者中名列第2。获得这个认证后客观上对我有了很大的帮助,因为认识我的人更多了,所以在2002至2003年是我技术提升最快的两年,在这两年我又陆续学习了HP-UX、WebSphere和MQ并通过了认证。其实我有时感觉到如果你把一门技术研究得非常深、非常透之后,这时你再去学习另一门技术就会非常轻松了,因为技术是相通的。我在学习完AIX后再去学习HP-UX就感觉非常轻松,同样在学习Oracle和DB2后再去学习Informix感觉到很容易。通过这种纵向的深入和横向的比较,你会思考它们的区别,你反而比较容易发现每一个产品的尺之所长和寸之所短。就拿DB2来说,它每次版本更新后的新特性我基本上在新版本没有出来之前就猜得差不多了,因为一是我是贴近真实用户的,了解他们的真实需求;二是自己一直在用,自己不断地在总结思考;三是别的数据库有,而DB2没有,那么在下个版本中它肯定会增加。所以相对来说,对新版本中新特性的学习就非常轻松了。就DB2而言,我想我应该是国内拥有DB2认证最多的人,我拥有DB2V5.2、V7.1、V8.1和DB2V9的全部认证。我应该是国内第一个把DB2V8认证全部通过的人,当然这也是巧合,因为2003年3月非典原因我被困在深圳,在网上看到DB2V8认证从4月1日开始考,就在前一天报名注册,第二天把DB2V8所有认证(新特性、高级DBA、应用开发、BI等)通过。2004至2005年是我最忙碌的两年,那个时候找我讲课的培训机构以及性能调优的客户非常多,一年我基本上天天在天上飞(当然学校导师那边我是有办法搞定的),培训机构找我讲课常常需要提前一个月的时间预约,那时除了过年在家待上几天,其他时间都是在做培训和诊断调优等,足迹踏遍国内主要城市,只要时间不冲突,那时我基本上是国内6大行开发中心和数据中心培训的指定老师,并为北京银信科技、山东农信、广东农信,交行大集中IBP等项目做数据库技术顾问。那时年轻很有精力,我记得有一次是2004年9月白天上午9点,我为上海移动IT部门做AIX动态逻辑分区(DLPAR)的培训;17点,打车前往扬州,20点,到达扬州供电局协助他们进行电力负荷控制系统项目上线,彻夜奋战到第二天凌晨3点半;然后连夜打的赶往上海,凌晨6点,到达酒店;休息两小时,8点出发,准时出现在上海移动培训现场。那时我对报酬不太在意,我想的是积累技术和客户资源。就这样不断地对技术进行学习、钻研、思考、提高,以及不断地向上成长和孜孜不倦的探索过程。我一步步成长起来,在很长一段时间内,我不断奔波于国内的各个城市,不计较出差、也不计较报酬,在我看来能够不断通过实践让自己成长才是第一要义。而且去的客户现场越多,处理的问题越多,就越发现自己的不足,然后再拼命地学习,不断地积累、总结和思考,这样就进入了一个良性循环,至今我仍然怀念那充实、紧张和充满激情的黄金年代。2004年和2005年,我分别在上海、北京注册了公司。一方面因为以独立咨询顾问的个人身份无法出具发票;另一方面,随着项目越做越大,尤其是很多银行的数据库架构和维护项目涉及合同金额也越来越大,需要签订合同,以公司的身份来签合同更加合适。当然这些年并非所有都是一帆风顺,也犯过一些重大错误。例如,我曾经在2002年5月1日把某机场的数据库调死,导致机场航班信息管理系统瘫痪。在早期也曾经把某证券系统因为调整而宕机,这些都对客户造成了重大影响,同时也让我思考总结自己的不足。也许这是成长必须要走的路,所以经过这两次事情之后,我之后的调优基本上没有犯过错误。所以,结合我的学习经验与感悟,有16个字送给即将进入这一领域的读者:去除浮躁,认真学习,不断积累,寻找机遇。古之成大事者,不唯有超世之才,亦唯有坚忍不拔之志也!——最后用这句话与大家共勉

内容概要

本书侧重于介绍DB2数据库的性能调优。性能调优是一个系统工程:全面监控分析操作系统、I/O性能、内存、应用及数据库才能快速找到问题根源;深刻理解DB2的锁及并发机制、索引原理、数据库参数、优化器原理、SQL语句调优等内部机理才能针对性地快速提出解决问题的方法;快照、db2pd、db2expln及事件监控器等则是必须熟练掌握的工具。这本书覆盖了进行DB2数据库性能调优所需的全部知识和工具,并提供了大量的性能调优的实际案例。
本书系统性地总结了DB2数据库性能调整的方法、流程、思路和保持系统良好性能的注意要点。最难得的是作者分享了其10年积累的DB2性能调优案例和经验总结。

作者简介

牛新庄,国内顶尖数据架构和信息治理专家,担任对外经济贸易大学客座教授、北京交通大学兼职教授、中国DB2用户协会(CDUG)理事长、亚洲金融合作联盟信息科技委员会主任。2008年曾以217万年薪受聘于中国建设银行总行特聘技术顾问,2009年受邀加入中国民生银行总行科技部,现任总行科技部总经理。牛新庄博士拥有20多项国际厂商认证(包括DB2V5~V9的全部认证),获得过国内数据库领域最高荣誉的“2006年中国首届杰出数据库工程师奖”、“首届IBM杰出软件专家奖”、“2006年IT168技术卓越奖”等奖项。

书籍目录

第1章 性能调整概述11.1 性能概述21.2 性能评估41.3 建立性能目标71.4 什么时候需要做性能调整81.5 性能调整准则91.6 性能调整的方法和过程101.6.1 性能调整的步骤101.6.2 性能调整的限制111.6.3 向客户了解情况111.6.4 性能调整流程图121.7 性能模型151.7.1 输入171.7.2 处理171.7.3 输出231.8 本章小结24第2章 操作系统及存储的性能调优272.1 AIX性能监控综述292.1.1 监控工具292.1.2 监控系统总体运行状态302.1.3 监控CPU性能342.1.4 监控内存使用382.1.5 监控存储系统状态402.1.6 监控网络状态422.2 操作系统性能优化432.2.1 直接I/O和并发I/O442.2.2 异步I/O和同步I/O452.2.3 minpout和maxpout472.2.4 文件系统和裸设备472.2.5 负载均衡及条带化(Striping)482.3 逻辑卷和lvmo优化532.3.1 使用lvmo进行优化542.3.2 卷组pbuf池552.3.3 pbuf设置不合理导致性能问题调整案例562.3.4 使用ioo进行优化602.4 操作系统性能调整总结652.5 存储I/O设计652.6 存储基本概念652.6.1 硬盘652.6.2 磁盘阵列技术672.6.3 存储的Cache672.6.4 网络存储技术682.7 存储架构692.7.1 存储I/O处理过程692.7.2 RAID IOPS702.7.3 RAID10和RAID5的比较712.8 良好存储规划的目标742.9 良好存储规划的设计原则752.10 存储相关性能调整案例762.11 存储I/O性能调整总结792.12 本章小结80第3章 DB2性能监控813.1 快照监视器案例813.1.1 监控动态SQL语句813.1.2 监控临时表空间使用843.2 事件监视器及监控案例873.3 利用表函数监控933.4 性能管理视图及案例993.4.1 监控缓冲池命中率1003.4.2 监控Package Cache大小1013.4.3 监控执行成本最高的SQL语句1023.4.4 监控运行时间最长的SQL语句1023.4.5 监控SQL准备和预编译时间最长的SQL语句1033.4.6 监控执行次数最多的SQL语句1033.4.7 监控排序次数最多的SQL语句1043.4.8 监控锁等待时间1043.4.9 监控Lock Chain1053.4.10 监控锁内存的使用1083.4.11 监控锁升级、死锁和锁超时1083.4.12 监控全表扫描的SQL1093.4.13 检查页清理器是否足够1103.4.14 监控prefecher是否足够1103.4.15 监控数据库内存使用1113.4.16 监控日志使用情况1123.4.17 监控占用日志空间最旧的事务1123.4.18 监控存储路径1133.4.19 追踪监控历史1143.5 db2pd1143.5.1 常用db2pd监控选项和示例1153.5.2 使用db2pd监控死锁案例1273.5.3 db2pd使用问题总结1323.6 内存监控1343.6.1 db2pd 内存监控1343.6.2 db2mtrk 内存监控1383.7 本章小结140第4章 DB2配置参数调整1414.1 初识DB2配置参数1414.2 监控和调优实例级(DBM)配置参数1434.2.1 代理程序相关配置参数1434.2.2 sheapthres1464.2.3 fcm_num_buffers1464.2.4 sheapthres_shr1474.2.5 intra_parallel1474.2.6 mon_heap_sz1484.2.7 query_heap_sz1484.3 监控和调优数据库级配置参数1484.3.1 缓冲池大小1494.3.2 日志缓冲区大小(logbufsz)1554.3.3 应用程序堆大小(applheapsz)1564.3.4 sortheap和sheapthres_shr1574.3.5 锁相关配置参数1594.3.6 活动应用程序的最大数目(maxappls)1634.3.7 pckcachesz1634.3.8 catalogcache_sz1644.3.9 异步页清除程序的数目(num_iocleaners)1644.3.10 异步I/O服务器的数目(num_ioservers)1664.3.11 组提交数目(mincommit)1664.3.12 avg_appls1684.3.13 chngpgs_thresh(DB)1684.3.14 maxfilop1694.3.15 logprimary、logsecond和logfilsz1694.3.16 stmtheap1704.3.17 dft_queryopt1704.3.18 util_heap_sz (DB)1704.4 调整DB2概要注册变量1704.4.1 db2_parallel_io1714.4.2 db2_evaluncommitted1734.4.3 db2_skipdeleted1734.4.4 db2_skipinserted1734.4.5 db2_use_page_container_tag1734.4.6 db2_selectivity1734.4.7 db2_logger_non_buffered_io1744.5 内存自动调优1744.5.1 内存自动调优示例1754.5.2 启用内存自动调优及相关参数1764.5.3 内存配置参数的配置原则1784.6 本章小结179第5章 高级锁与优化1815.1 隔离级别与锁1815.1.1 可重复读(RR-Repeatable Read)1825.1.2 读稳定性(RS-Read Stability)1845.1.3 游标稳定性(CS-Cursor Stability)1865.1.4 当前提交(Currently Committed)1885.1.5 未提交读(UR-Uncommitted Read)1905.1.6 隔离级别总结1935.2 加锁总结1955.2.1 如何获取锁1955.2.2 意图锁和非意图锁1965.2.3 读锁和写锁1975.2.4 LRB(Lock Resource Block)1975.2.5 USE AND KEEP LOCKS1985.2.6 索引类型和下一键锁1995.2.7 扫描方式与加锁2015.3 乐观锁2045.3.1 悲观锁和乐观锁2045.3.2 DB2 V9.5中的乐观锁2055.3.3 乐观锁应用案例2125.4 内部锁2215.4.1 内部方案锁(Internal Plan Lock)2215.4.2 内部V锁(Internal Variation Lock)2225.4.3 内部S锁2235.4.4 内部C锁2245.4.5 其他内部锁2255.5 锁等待及调整案例2285.5.1 锁等待问题解决流程和步骤2285.5.2 捕获引起锁等待的SQL语句2305.5.3 利用db2pd捕获锁超时2335.5.4 利用事件监视器捕获锁超时2365.6 锁升级及调整案例2385.6.1 监控锁升级2395.6.2 锁升级调整2395.7 死锁及调整案例2415.7.1 利用事件监视器监控死锁2425.7.2 死锁案例2435.7.3 最小化死锁建议2465.8 最大化并发性2465.8.1 选择合适的隔离级别2465.8.2 尽量避免锁等待、锁升级和死锁2465.8.3 设置合理的注册表变量2475.9 锁相关的性能问题总结2555.10 锁与应用程序开发2565.11 本章小结259第6章 索引设计与优化2616.1 索引概念2616.1.1 索引优点2616.1.2 索引类型2636.2 索引结构2636.3 理解索引访问机制2666.4 索引设计2696.4.1 创建索引2696.4.2 创建集群索引2706.4.3 创建双向索引2716.4.4 完全索引访问2726.4.5 与创建索引相关的问题2736.4.6 创建索引示例2736.5 索引创建原则与示例2746.5.1 索引与谓词2746.5.2 根据查询使用的列建立索引2766.5.3 根据条件语句中谓词的选择度创建索引2776.5.4 避免在建有索引的列上使用函数2786.5.5 在那些需要被排序的列上创建索引2786.5.6 合理使用INCLUDE关键词创建索引2806.5.7 指定索引的排序属性2816.6 影响索引性能的相关配置2826.6.1 设置影响索引性能的配置参数2826.6.2 为索引指定不同的表空间2826.6.3 确保索引的集群度2836.6.4 使表和索引统计信息保持最新2836.6.5 重组索引2836.7 索引维护2846.7.1 异步索引清除(AIC)2856.7.2 联机索引整理碎片2876.7.3 查找使用率低下的索引2876.7.4 索引压缩2896.8 DB2 Design Advisor(db2advis)2896.9 本章小结293第7章 DB2优化器2997.1 DB2优化器介绍3007.2 SQL语句执行过程3027.3 优化器组件和工作原理3047.3.1 查询重写示例:谓词移动合并和转换3057.3.2 优化器成本评估3107.3.3 本地谓词基数(cardinality)估计3117.3.4 连接基数(cardinality)估计3137.3.5 分布统计信息3177.3.6 列组统计信息对基数的影响3217.4 扫描方式3307.4.1 全表扫描3317.4.2 索引扫描3317.4.3 RID SCAN3347.5 连接方法3357.5.1 嵌套循环连接3367.5.2 合并连接3387.5.3 哈希连接3397.5.4 选择最佳连接的策略3407.6 优化级别3407.6.1 优化级别概述3417.6.2 选择优化级别3447.6.3 设置优化级别3457.7 基于规则的优化3477.7.1 优化器概要文件概述3477.7.2 启用优化概要文件3497.7.3 优化概要文件使用示例3507.8 如何影响优化器来提高性能3577.8.1 使DB2统计信息保持最新3577.8.2 构建适当的索引3577.8.3 配置合理的数据库配置参数3587.8.4 选择合适的优化级别3597.8.5 合理的存储I/O设计3597.8.6 良好的应用程序设计和编码3607.9 本章小结363第8章 统计信息更新与碎片整理3658.1 统计信息更新3658.1.1 统计信息的重要性3658.1.2 统计信息更新示例3698.1.3 LIKE STATISTICS统计信息更新3728.1.4 列组统计信息更新3748.1.5 分布统计信息更新3838.1.6 统计信息更新策略3898.2 自动统计信息更新3918.2.1 自动RUNSTATS的基本概念3918.2.2 如何打开auto runstats3938.2.3 如何监控auto runstats3958.2.4 DB2 V10新特性——自动收集统计视图的统计信息3968.3 碎片整理3978.3.1 碎片产生机制和影响3978.3.2 确定何时重组表和索引3988.3.3 执行表、索引检查是否需要做REORG4018.3.4 REORG的用法和使用策略4028.4 重新绑定程序包4058.5 本章小结407第9章 SQL语句调优4099.1 通过监控找出最消耗资源的SQL语句4099.2 通过解释工具分析SQL语句执行计划4109.2.1 解释表4119.2.2 Visual Explain(可视化解释)4129.2.3 db2expln4199.2.4 db2exfmt4229.2.5 各种解释工具的比较4249.2.6 如何从解释信息中获取有价值的建议4249.3 理解SQL语句如何工作4259.3.1 理解谓词类型4259.3.2 排序和分组4289.3.3 连接方法4309.3.4 扫描方式4319.4 SQL调优案例4319.4.1 尽量使用单条语句完成逻辑4319.4.2 合理使用NOT IN和NOT EXISTS4329.4.3 利用子查询进行优化4349.4.4 调整表连接顺序使JOIN最优4369.4.5 数据非均匀分布时手工指定选择性4379.4.6 使用UDF代替查询中的复杂部分4389.4.7 合并多条SQL语句到单个SQL表达式4399.4.8 使用SQL一次处理一个集合语义4409.4.9 在无副作用的情况下使用SQL函数4429.4.10 小结4439.5 提高应用程序性能4439.5.1 良好的SQL编码规则4439.5.2 提高SQL编程性能4459.5.3 改进游标性能4479.5.4 根据业务逻辑选择最低粒度的隔离级别4489.5.5 通过REOPT绑定选项来提高性能4489.5.6 统计信息、碎片整理和重新绑定4499.5.7 避免不必要的排序4499.5.8 在C/S环境中利用SQL存储过程降低网络开销4509.5.9 在高并发环境下使用连接池4509.5.10 使用Design Advisor(db2advis)建议索引4509.5.11 提高批量删除、插入和更新速度4519.5.12 提高插入性能4519.5.13 高效的SELECT语句4529.6 高性能SQL语句注意事项4539.6.1 避免在搜索条件中使用复杂的表达式4539.6.2 将 OPTIMIZE FOR n ROWS子句与FETCH FIRST n ROWS ONLY子句配合使用4549.6.3 避免使用冗余的谓词4549.6.4 避免使用多个带有DISTINCT关键字的聚集操作4559.6.5 避免连接列之间数据类型不匹配4569.6.6 避免对表达式使用连接谓词4569.6.7 避免在谓词中使用空操作表达式来更改优化器估算4569.6.8 确保查询符合星型模式连接的必需条件4579.6.9 避免使用非等式连接谓词4589.6.10 避免使用不必要的外连接4599.6.11 使用参数标记来缩短动态查询的编译时间4599.6.12 使用约束来提高查询优化程度4609.7 本章小结461第10章 DB2调优案例、问题总结和技巧46310.1 调优案例1:某移动公司存储设计不当和SQL引起的I/O瓶颈46310.2 调优案例2:某银行知识库系统锁等待、锁升级引起性能瓶颈47010.3 调优案例3:某汽车制造商ERP系统通过调整统计信息提高性能47810.4 调优案例4:某农信社批量代收电费批处理慢调优案例48810.5 调优案例5:某银行系统SQL执行慢,通过跟踪信息获取调整信息49210.6 调优案例6:某银行系统字段类型定义错误导致SQL执行时间变长49510.7 调优学习案例:利用压力测试程序学习DB2调优498

编辑推荐

《DB2数据库性能调整和优化(第2版)》编辑推荐:国内最权威的DB2图书,由业界领军人物牛新庄博士执笔。针对DB2技术的最新发展和上一版的读者反馈,对全书内容和章节安排做了更新,更加贴近实用。DB2从业人员的必备案头书。

图书封面

图书标签Tags

评论、评分、阅读与下载


    DB2数据库性能调整和优化(第2版) PDF格式下载


用户评论 (总计0条)

 
 

 

250万本中文图书简介、评论、评分,PDF格式免费下载。 第一图书网 手机版

京ICP备13047387号-7