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

出版社:清华大学出版社
出版日期:2013-7
ISBN:9787302325260
作者:牛新庄
页数:528页

前言

序一自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用户协会(CDUG)理事长、亚洲金融合作联盟信息科技委员会主任。2008年曾以217万年薪受聘于中国建设银行总行特聘技术顾问,2009年受邀加入中国民生银行总行科技部,现任总行科技部总经理。
牛新庄博士拥有20多项国际厂商认证(包括DB2 V5~V9的全部认证),获得过国内数据库领域最高荣誉的“2006年中国首届杰出数据库工程师奖”、“首届IBM杰出软件专家奖”、“2006年IT168技术卓越奖”等奖项。

书籍目录

第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.3 minpout和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 RAID 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 logprimary、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_parallel_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_page_
container_tag
173
4.4.6 db2_selectivity
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 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 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

编辑推荐

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

作者简介

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


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



发布书评

 
 


 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024