《商业银行数据库管理实践》共12 章,第1~3 章讲解在金融科技大潮下,商业银行数据库架构转型的新思路,随后阐述集中式 到分布式数据库实践,以及从小型机迁移到x86 平台的实践;第4~6 章讲述商业银行Db2、MySQL、GoldenDB 等数据库新系统上线以及数据库版本升级等重要内容;第7~9 章讲述Db2、MySQL、GoldenDB 等数据库故 障诊断理论及实战案例;第10、11 章分别讲述Db2 和MySQL 数据库的性能优化;第12 章主要讲述笔者对 商业银行数据库管理方面的思考。 《商业银行数据库管理实 践》主要面向企业(尤其是商业银行)的数据库架构师、数据库管理员、应用开发人员和数据库技术决 策人员,也适合大学生学习数据库使用。
提出商业银行数据库管理的新思路和新方法
分享金融级数据库的建设和运维实战案例
提升商业银行数据库的自主掌控能力
感悟和反思商业银行数据库管理实践
一路走来,心怀感恩
西风烈,
长空雁叫霜晨月。
霜晨月,
马蹄声碎,
喇叭声咽。
雄关漫道真如铁,
而今迈步从头越。
从头越,
苍山如海,
残阳如血。
这首《忆秦娥·娄山关》是主席的经典之作,写于红军取得娄山关战斗胜利之后。娄山关战斗是红军长征以来打的个大胜仗,这场胜利彻底粉碎了敌人围堵红军的企图,极大地鼓舞了全军的士气,抒写了人民的胜利信心。这首词是我喜欢的,所以和广大读者首先通过这首词重温峥嵘岁月,感悟初心力量。
回想起10年前,我还在IBM中国实验室从事数据库研发工作,当时出于为广大读者献上数据库著作的情怀,出版了本数据库著作《DB2设计、管理与性能优化艺术》(2019年,IBM公司将DB2改名为Db2,故本书正文中统一用Db2),接下来的3年间又陆续出版了《从Oracle到DB2开发从容转身》《运筹帷幄DB2从Oracle运维转型》《DB2设计、管理与性能优化艺术》,这就是舞动DB2系列,这个系列在中国内地和台湾省获得了很多读者的喜爱。
完成舞动DB2序列后,我于2014年4月加入中信银行,开始带领技术团队负责全行的数据库运维管理工作。在繁忙的日常工作之余,我和同事王宁、张聪、马学涛共同完成了《商业银行数据库管理实践》的写作。
谈起这本书的写作初衷,还有个故事。在2019年五一劳动节期间,我阅读了《大唐西域记》一书,整本书文笔简洁流畅,记述主次分明、详略得当,记录了玄奘法师西行的所见所闻。看完这本书后,我查阅相关资料得知玄奘法师西行五万余里,历时近19年,行经当时138个国家,鲁迅称赞他为民族的脊梁,梁启超称他为千古一人,我也被他九死一生舍身求法的精神所感动、所激励。回想起自己从2002年开始接触数据库到今年也有19年了,随着理论的积累和实践的深入,对商业银行如何做好数据库管理有了更加深入的理解。在玄奘精神的驱使下,我们从2019年5月1日开始动笔到2021年5月1日封笔,期间批阅9遍、增删10次,花费了两年时间终完成本书的写作。
在向广大读者介绍本书之前,首先讲讲我的数据库研发和运维经历,期间也会带有我自己的学业和职业规划,希望能启发广大读者。
学业规划进入信息技术的黄埔军校
人生是一趟心灵的伟大旅程,择高处立,向宽处行,那就要顺势而为。回想自己的成长经历,生长于一个传统文化发祥地早叫中国的地方,那里有巍巍的高山,滔滔的大河。唐朝宰相李吉甫曾经如此评价:河中之地,左右王都;黄河北来,太华南依;总水陆之形势,壮关河之气色。在这片具有浓厚历史文化底蕴的地方,我将知识就是力量知识改变命运当作的人生信念,这就需要走出去证明自己的价值。
出于成为一名电厂工人的目标,我在1997年成功考取了中国电力行业的学府华北电力大学,我是多年以来,我所在家乡小镇上的个大学生。但入学以后,我曾经过相当长时间的迷茫,失去过奋斗的方向。2001年,在即将毕业的大四,我注意到电力行业早就进入了稳定期,这个时候如果继续坚持并不是选择,于是我对自己将来要走的路进行了再次规划。
2001年,中国信息技术的发展正处于技术爆发的前夜,我预感到这个行业即将快速发展;但自身所掌握的计算机知识和技术还很有限,还需要进一步学习。经过思考后,我对自己的学业和职业进行了规划:首先考取计算机方向的研究生,毕业后进入大型研发企业进行锻炼以提升自己的能力。
有了规划后,我进行了不打折扣的执行,每天坚持学习12小时,过着苦行僧一般的生活,暑去寒来,终在2002年考取了信息技术的黄埔军校北京邮电大学计算机学院国家重点实验室。在国家重点实验室,我系统地学习了计算机经典理论,参与了各种项目,开阔了眼界,积累了软件开发经验,C/C 和Java语言的运用已非常娴熟。也是从那时起开始接触Oracle、MySQL等数据库。
从研究生开始,我正式建立了自己计算机科班出身的优势,至此完成了学业规划的步。一路走来,感谢师友,在北邮读书的时候幸运地遇到了孔祥泽、薛海强、赵文峰、李兴才等同学,感恩遇到的每个人和每件事。
必然选择加入IBM软件开发实验室
毕业以后,我通过校园招聘于2005年进入了信息技术的摇篮IBM中国开发实验室(IBM CDL),这些都是自己职业规划的必然选择。
那时候的IBM中国开发实验室高手云集,清一色的高学历,一个部门毕业于清华、北大的同事占到了三分之一,平时沟通邮件都是英文,和硅谷等海外实验室的电话会议也都是英文,这些对当时的我来说都是非常新奇的。
刚加入的时候,从事过较短时间的语音产品(IBM Via Voice)开发,这个技术现在看起来仍然高深,但在2005年的时候IBM就已经做出产品了。后来换到了信息管理产品研发部门,机缘巧合进入了Db2数据库研发和客户支持领域,从此确立了自己的专业方向。在实验室的那些年,自己如饥似渴地钻研,并不断向周围优秀的同事学习,建立了自己的数据库开发和支持所需知识体系。印象中深的一次,在Db2里面独立设计开发了一个新功能,并发布给某日本客户使用,解决了困扰这个客户长期以来的难题。这个经历让我获得了成就感,那就是用技术和产品帮助客户解决问题,这就是技术人员的价值。
在IBM从事Db2数据库开发和客户支持期间,收获是沉甸甸的:深刻理解和学习了国际化大公司数据库研发体系;获得了坚实的数据库理论、开发和支持经验;作为作者,出版舞动DB2系列专著四部;发表技术专利,获得了对知识产权的保护意识;提升了英文水平,通过工作体验了西方企业的工作文化,等等。
在IBM期间,感谢干毅民、孙冰江兄长般的关怀和支持;感谢Claire洪给予我的指导,让我理解了IBM的全球研发和支持体系。再次感谢张建鑫、朱志辉、朱彬、彭晓强、李越、李玉明、王富国、杨小华、陈诗然、郭锐、李海峰、马镭、孙岳等实验室同事,我们有一段十分愉快的共事时光。
回想起来,IBM中国实验室的Db2开发人员很可能是中国早从事数据库引擎研发的,这些人员目前已经在互联网以及各大商业银行承担数据库开发或者运维重任。
机缘巧合加入中信银行数据中心
如果说考取北邮计算机学院和进入IBM中国实验室是自己有意识的规划,那么2014年加入中信银行却是机缘巧合,这个机缘还是在Db2数据库上。
刚加入中信银行时,我进入了Db2的海洋,生产环境所用数据库几乎全是Db2。我也从一名多年从事Db2开发的人员逐渐转型到了数据库运维上,后来成为团队负责人,开始带领团队承担全行数据库、中间件以及集中备份相关工作,所运维的数据库种类也从单纯的Db2扩展到了中信银行自研的GoldenDB分布式数据库。
谈起GoldenDB分布式数据库,其实中信银行早在2014年就正式启动了研发工作,当时可谓大势所趋,生逢其时。首先,安全可控的国家战略要求银行IT从传统封闭式架构向开源、开放、自主可控的架构转型;其次,高并发交易的出现要求银行IT架构支持纵向扩展;后,银行经营环境的变化要求银行IT基础设施从昂贵的IOE设施向x86服务器、本地磁盘等低成本设施转型。
在中信银行工作时,我作为数据中心分布式数据库技术牵头人,在上线前使用高可用测试场景进行了充分测试,协助开发中心修订了数据库产品缺陷;作为牵头人设计了中信银行分布式数据库技术规范、应急手册、切换演练方案、自动化巡检方案等,这些技术规范发挥了指南针的作用,真正使得分布式数据库运维做到了有据可凭,从而和其他银行同业技术对标提供了基础。
我非常荣幸地深度参与了凌云工程,实现了中信银行总行核心系统从AS400下移到x86平台,已于2020年5月3日成功实施;深度参与长征项目,实现了网上银行系统从小型机Db2下移到x86平台GoldenDB分布式数据库,该项目已于2019年9月10日成功 实施。
这些工作提升了我的技术深度和广度,也为本书的写作奠定了坚实基础。
感谢数据中心领导迟鲲对我工作的精心指导,以及班孝明、黄湘武、陈让宽等领导对我工作上的帮助;感谢王湛、刘小娜、李永忠、胡彦魁、刘明、刘文涛、卫东、邓琼等的关怀和鼓励,他们使我充满前进的力量;很高兴认识了周渤、周海鹏、王培发、刘鹏飞、马超、陈建锋、张兴强、张占越等同事,和他们的交流让我受益匪浅,真心感恩遇到的每个人和每件事。
学业再规划进入管理学的黄埔军校
从2016年2月开始负责数据库团队开始,我主要从实践上不断摸索管理经验,从刚开始的彷徨到2018年逐渐进入角色,团队多次获得优秀团队称号。但是,管理实践的摸索到了一定阶段会遇到瓶颈,还需要对管理学进行系统化的学习。
经过认真准备,我在2018年考取了中国人民大学工商管理研究生,系统学习了管理学理论,并向多位教授学习,积极和同学交流,不断提升自己,终于2020年12月20日获得管理学硕士学位。通过学习和总结,我现在有信心有能力带好团队并创造佳绩。
难忘的是在论文开题阶段,我选择了《商业银行IT基础设施数字化转型研究》,这是一个很大的挑战。写作过程是充实并快乐的。我通过调研以及各种交流,终完成了论文的写作并通过答辩,也让我对金融科技有了更深入的理解。
在中国人民大学,遇到了好老师、好同学,建立了管理学思维。我经常反思一个人的价值不是用名利来衡量的,而是取决于对社会的贡献。知识创造财富,更让社会进步。知识,既让我们拥有科技创新的能力,也让我们拥有文化传承的自信。
在中国人民大学读书期间,我想把我真挚的感谢献给我的导师王刊良教授,他把他的管理学理论以潜移默化的方式传授给我,让我从一名计算机科学毕业的学生开始踏入工商管理学的大门。在我写作遇到迷茫时,他给予我思路上的启发,使我茅塞顿开。他的博学和平易近人更是让我如沐春风,也是我做人和做学问的榜样。感谢我的同学蓝雪松、武晓燕和刘文龙,在平时的学习中他们的指点让我受益匪浅。
数据库学习之路致商业银行数据库从业人员
目前,各大商业银行都在不断加大科技人员投入,对于当下银行业而言已经成为标配,金融科技也进一步推动了银行业务的进一步发展。对各大商业银行数据库从业人员来说,在传统数据库向分布式数据库转型阶段,应抓住机遇顺势而为,正所谓站在台风口,猪都能飞上天。
从数据库运维的发展趋势来看,将来必然是走向自动化和智能化,这对广大数据库从业者来说,机遇远大于挑战。在智能化时代,数据库从业者绝大部分工作是开发平台化工具,通过平台化工具将DBA从事务性工作中完全解脱出来,这样DBA能将部分精力放在数据库架构、数据模型设计、应用开发指导、运维规范、优化指南等更需要智慧的地方。
在这个时代,广大数据库从业人员需要身体力行去证明,人生重要的不是事后的荣誉或财富,而是过程中获得的历练和成长。不在荣誉面前停留,不为失败辩解,一直在路上,风雨兼程。三分天注定七分靠打拼,爱拼才会赢。
只有数据库从业人员保持对学习、锻炼和工作的热情,心态才能永远年轻;只有拥有旺盛的精力和强大的内心,才能经得起世事的磨练。那些未能打败你的,都将使你更强大。哪有什么优秀,不过是更专注、更勤奋、更热爱。所谓的伟大,不过是简单、正直、目标远大和坚忍不拔。
我们很幸运赶上金融科技时代发展的大潮,只有为社会、为他人创造价值,才能实现自身价值。带着梦想去奋斗,感恩时代,贡献社会!
本书内容
本书内容严谨精细、生动活泼,全书共12章。第1~3章提出在金融科技大潮下,商业银行数据库架构转型新思路,随后深入阐述从集中式到分布式数据库实践,以及从小型机迁移到x86平台实践;第4~6章讲述商业银行Db2、MySQL、GoldenDB等数据库新系统上线以及数据库版本升级等重要内容;第7~9章讲述Db2、MySQL、GoldenDB等数据库故障诊断理论,并分享实战案例;第10、11章分别讲述Db2和MySQL数据库性能优化;第12章分享笔者对商业银行数据库管理方面的思考,这是全书的总结部分,以启发读者管理好所在银行的生产数据库。
为了方便读者,在书中加入了注意小技巧和比较这样的提示性文字。其中,注意的内容是需要读者在工作中重点留意的;小技巧的内容是重点向读者分享的实战技巧;比较的内容是一些容易混淆的概念,是向读者解释和澄清的。
后,在文中的一些脚本片段采用灰底形式,这样就非常明显地和正文区别开了,同时加黑处理了脚本中的一些重点内容以示强调。
本书读者
本书主要面向企业(尤其是商业银行)的数据库架构师、数据库管理员、应用开发人员和数据库技术决策人员,可为他们提供业内先进、富有技术深度和实践意义的重要技术参考。
致谢
首先感谢清华大学出版社在本书的出版过程中给予的大力支持和帮助!感谢中信银行数据库专家骆晓瑞,他审核了大部分章节并提出了很多宝贵建议;感谢IBM中国实验室资深工程师李越,他仔细审核了部分章节并给出了修订建议;感谢民生银行资深DBA朱彬,我和他在商业银行数据库运维实践上有充分的交流,让我获益良多;感谢阿里云数据库研发总监彭晓强,他在数据库研发上技术深厚,在和他的经常性探讨中颇受启迪;感谢蚂蚁集团OceanBase数据库专家李玉明,他在分布式数据库理论和实践方面具有很深的造诣,帮助我审核了分布式数据库相关章节。
王飞鹏
2021年7月18日
于北京
第1章 商业银行数据库架构转型 1
1.1 商业银行信息科技发展环境 1
1.1.1 十四五规划 2
1.1.2 金融科技发展规划 2
1.1.3 银保监会监管新趋势 3
1.2 商业银行信息科技体系 3
1.2.1 组织架构 4
1.2.2 制度流程 4
1.2.3 IT基础设施 5
1.2.4 运维支撑 6
1.2.5 容灾体系 7
1.2.6 信息安全 8
1.3 基于ITIL规范的运维体系 9
1.3.1 事件处理 9
1.3.2 问题处理 9
1.3.3 变更实施 9
1.3.4 应急处置 9
1.3.5 安全配置基线 10
1.4 数据库架构转型 10
1.4.1 关系数据库起源 11
1.4.2 从商业数据库到开源数据库转型 11
1.4.3 从集中式到分布式数据库转型 12
1.4.4 国产数据库发展 13
1.4.5 数据库选型策略 15
1.5 转型对DBA团队的挑战 15
1.5.1 组织结构 16
1.5.2 文化建设 16
1.5.3 人才梯队建设 16
1.6 新技术运用和输出 17
1.6.1 NoSQL数据库 17
1.6.2 NewSQL数据库 18
1.6.3 数据库网格 19
1.6.4 新技术运用建议 20
1.6.5 新技术输出建议 21
小结 21
第2章 从集中式到分布式数据库 23
2.1 从某商业银行电商管家系统谈起 24
2.1.1 物理部署架构 24
2.1.2 应用服务器性能瓶颈及解决方案 25
2.2 从集中式到分布式数据库电商管家系统演进之路 25
2.2.1 硬件扩容方案摩尔定律失效导致效果有限 26
2.2.2 Redis缓存方案解决高并发性能问题 27
2.2.3 MySQL读写分离方案解决高读写比性能问题 28
2.2.4 分库分表方案解决性能和容量瓶颈问题 29
2.2.5 分布式数据库中间件方案通过中间件透明访问数据库 31
2.2.6 分布式数据库方案通过数据库解决所有问题 34
2.3 GoldenDB数据库的前世今生 35
2.3.1 GoldenDB数据库的研发和运用历程 36
2.3.2 GoldenDB数据库逻辑架构 37
2.3.3 GoldenDB数据库部署架构 38
2.3.4 GoldenDB数据库关键创新技术 39
2.3.5 GoldenDB数据库事务的ACID特性 41
2.4 GoldenDB数据库与CAP理论 43
2.4.1 什么是CAP理论 43
2.4.2 GoldenDB保证一致性 44
2.4.3 GoldenDB程度保证可用性 45
2.4.4 GoldenDB保证分区容错性 45
2.5 GoldenDB数据库应用开发和运维实践 46
2.5.1 分布式数据库带来的挑战 46
2.5.2 应用开发方面的应对措施 47
2.5.3 生产运维方面的应对措施 48
2.5.4 技术规范的制定和落实 49
小结 50
第3章 从小型机迁移到x86服务器 51
3.1 迁移项目概述 51
3.1.1 商业汇票系统下移背景与目标 52
3.1.2 迁移计划 52
3.1.3 数据迁移原理 53
3.1.4 迁移难点分析 54
3.2 小型机与x86服务器大比拼 54
3.2.1 计算资源对比分析 55
3.2.2 存储资源对比分析 56
3.2.3 可扩展性对比分析 57
3.2.4 可靠性对比分析 57
3.2.5 小型机与x86服务器计算资源实测对比分析 58
3.3 小型机下移x86服务器的资源转换方案 59
3.3.1 x86服务器资源转换原则 59
3.3.2 x86服务器资源转换方案 59
3.3.3 商业汇票系统资源转换结果 61
3.4 基础软件版本升级与架构优化 61
3.4.1 升级策略 62
3.4.2 不同版本差异性对比 63
3.4.3 软件架构优化 65
3.4.4 商业汇票系统软件升级和架构优化结果 66
3.5 小型机下移x86服务器系统测试方案 67
3.5.1 传统测试方法 67
3.5.2 高仿真测试方法 68
3.5.3 性能测试评估原则 70
3.5.4 测试方法选择策略 71
3.5.5 商业汇票系统测试方案选择结果 72
3.6 小型机下移x86服务器实施 72
3.6.1 Java程序迁移 72
3.6.2 C/C 程序迁移 74
3.6.3 数据库离线迁移 75
3.6.4 数据库平滑迁移 82
3.6.5 数据库迁移方案的选择策略 91
3.6.6 商业汇票系统数据库平滑迁移步骤 92
小结 101
第4章 集中式数据库上线部署 102
4.1 部署需求 102
4.1.1 逻辑架构 103
4.1.2 功能性需求 104
4.1.3 非功能性需求 105
4.1.4 容灾需求 106
4.1.5 某银行网络贷款系统部署需求结论 107
4.2 数据库部署环境规划 108
4.2.1 计算资源规划 108
4.2.2 存储资源规划 109
4.2.3 网络资源规划 110
4.2.4 数据库选型 111
4.2.5 灾备规划 112
4.2.6 某银行网络贷款系统规划结论 113
4.3 Db2数据库部署 113
4.3.1 高可用架构选择 114
4.3.2 软件安装 115
4.3.3 用户创建 116
4.3.4 实例创建 117
4.3.5 数据库创建 117
4.3.6 按照规范配置参数 117
4.3.7 灾备方案实施 120
4.3.8 某银行网络贷款系统数据库部署方案 123
4.4 MySQL数据库部署 123
4.4.1 高可用架构选择 124
4.4.2 软件安装 127
4.4.3 用户创建 127
4.4.4 数据库创建 128
4.4.5 按照规范配置参数 129
4.4.6 灾备搭建 130
4.5 监控、巡检和应急脚本部署 132
4.5.1 监控脚本部署 132
4.5.2 巡检脚本部署 133
4.5.3 应急脚本部署 134
4.6 集中备份方案的制订与实施 134
4.6.1 备份方案 135
4.6.2 备份策略 136
4.6.3 备份实施 137
4.6.4 某银行网络贷款系统备份方案 137
小结 138
第5章 分布式数据库上线部署 139
5.1 部署需求分析 140
5.1.1 某商业银行对私业务平台简介 140
5.1.2 功能性需求 140
5.1.3 非功能性需求 141
5.1.4 灾备需求 142
5.1.5 部署需求分析结论 143
5.2 基础软硬件环境规划 144
5.2.1 总体部署规划 144
5.2.2 计算资源规划 145
5.2.3 存储资源规划 147
5.2.4 网络资源规划 148
5.2.5 对私BP系统规划结论 149
5.3 GoldenDB分布式数据库部署 149
5.3.1 按照规范配置操作系统 150
5.3.2 安装管理节点双机软件 151
5.3.3 安装GoldenDB集群软件 154
5.3.4 创建GoldenDB集群 158
5.3.5 向集群中添加GTM节点 159
5.3.6 向集群中添加数据分片 160
5.3.7 向集群中添加DBProxy节点 161
5.3.8 创建DBProxy连接实例 161
5.3.9 按照规范配置数据库参数 164
5.3.10 数据迁移方案 167
5.4 监控、巡检和应急脚本部署 170
5.4.1 监控脚本部署 170
5.4.2 深度巡检工具部署 171
5.4.3 自动化应急脚本部署 173
5.5 集中备份方案的制订与实施 174
5.5.1 备份方案 175
5.5.2 备份策略 175
5.5.3 备份实施 175
小结 177
第6章 商业银行数据库升级 178
6.1 商业银行数据库升级概述 178
6.1.1 为什么要升级数据库 178
6.1.2 数据库升级策略 179
6.2 规划数据库升级 180
6.2.1 数据库升级前评估 180
6.2.2 规划数据库服务器升级 181
6.2.3 规划数据库客户端升级 183
6.2.4 规划数据库应用程序升级 184
6.3 测试方案的选择 186
6.3.1 传统测试方案 186
6.3.2 高仿真测试方案 187
6.3.3 机器人流程自动化测试方案 188
6.3.4 各种测试方案对比 189
6.4 制订数据库升级方案 190
6.4.1 数据库版本升级 190
6.4.2 数据库升级回退方案 197
6.4.3 方案制订方面的建议 200
6.5 数据库升级实战某商业银行理财平台数据库升级 202
6.5.1 理财平台系统数据库升级规划 202
6.5.2 使用原地升级方案升级理财平台数据库 204
6.5.3 使用原地回退方案对理财平台数据库逆向升级 212
6.5.4 使用备份恢复升级方案升级理财平台数据库 215
6.5.5 使用备份恢复回退方案对理财平台数据库逆向升级 221
小结 222
第7章 Db2常用工具和诊断案例 223
7.1 碎片整理工具 223
7.1.1 碎片整理工具reorg 223
7.1.2 案例分享 225
7.2 统计信息收集 226
7.2.1 统计信息收集runstats 227
7.2.2 案例分享 228
7.3 重新绑定 228
7.3.1 重新绑定rebind 228
7.3.2 案例分享 229
7.4 常规数据移动工具 234
7.4.1 导出数据export 234
7.4.2 导入数据import 235
7.4.3 ingest性能和可用性间平衡的使者 238
7.4.4 导出导入数据db2move 242
7.4.5 特殊对象的移动序列和IDENTITY字段 244
7.4.6 案例分享迁移带有IDENTITY字段的表 246
7.5 海量数据移动工具load 248
7.5.1 load导入大数据的核武器 248
7.5.2 LOAD FROM CURSOR轻松移动数据 258
7.5.3 案例分享load失败导致数据库目录文件系统满 258
7.5.4 案例分享load性能问题诊断 259
7.6 移形换位工具db2relocatedb 261
7.6.1 工具说明 261
7.6.2 案例分享 262
7.7 常用运维工具的调速 263
7.7.1 调速参数 264
7.7.2 案例分享 265
小结 266
第8章 MySQL数据库故障诊断 267
8.1 MySQL故障诊断方法 268
8.1.1 MySQL基础知识 268
8.1.2 MySQL故障诊断思路 271
8.2 MySQL常用诊断工具 272
8.2.1 操作系统诊断命令和工具 272
8.2.2 数据库诊断命令和工具 275
8.2.3 命令和工具使用建议 283
8.3 问题诊断实战案例集一单机数据库故障诊断 283
8.3.1 一次数据库异常宕机问题诊断 284
8.3.2 一次mysqldump备份异常问题诊断 289
8.3.3 一次binlog无法清理问题诊断 293
8.3.4 一次ibtmp1临时文件巨大问题诊断 296
8.3.5 一次数据库文件系统权限异常问题诊断 299
8.4 问题诊断实战案例集二主从复制故障诊断 300
8.4.1 一次从库表记录不存在问题诊断 301
8.4.2 一次从库事务执行失败问题诊断 303
8.4.3 一次从库无法创建连接问题诊断 306
8.4.4 一次从库无法清理表记录问题诊断 307
8.4.5 一次主从复制延迟问题诊断 311
小结 316
第9章 分布式数据库故障诊断与性能优化 317
9.1 故障诊断与优化方法 317
9.1.1 GoldenDB分布式数据库特点 317
9.1.2 基于平台工具诊断和优化 318
9.1.3 自动化应急处置 319
9.2 平台工具介绍 319
9.2.1 交易监控平台 319
9.2.2 日志分析平台 320
9.2.3 普罗米修斯监控平台 321
9.2.4 dbtool工具 323
9.2.5 深度巡检工具 325
9.3 某银行核心系统数据倾斜问题诊断 328
9.3.1 故障概述 328
9.3.2 分析过程 329
9.3.3 结论和建议 331
9.4 某银行分布式数据库元数据库恢复案例 333
9.4.1 故障概述 333
9.4.2 分析过程 333
9.4.3 结论和建议 335
9.5 某银行理财平台CPU繁忙调优 335
9.5.1 故障概述 335
9.5.2 分析过程 335
9.5.3 结论和建议 340
9.6 某银行网银系统内存调优 341
9.6.1 故障概述 341
9.6.2 分析过程 341
9.6.3 结论和建议 344
9.7 某银行电商管家系统响应慢调优 345
9.7.1 故障概述 345
9.7.2 分析过程 345
9.7.3 结论和建议 346
9.8 分布式数据库切换与数据紧急恢复 346
9.8.1 故障切换与计划性切换 346
9.8.2 紧急数据恢复 350
9.9 故障诊断和性能优化建议 353
9.9.1 技术规范应前置到设计开发阶段 353
9.9.2 高效SQL语句开发建议 354
9.9.3 平台工具运用建议 355
9.9.4 应急处置建议 356
小结 356
第?10?章 Db2数据库性能优化 357
10.1 理解Db2优化器 358
10.1.1 SQL语句的编译过程 358
10.1.2 Db2优化器的核心作用 359
10.1.3 SQL语句优化过程 360
10.2 SQL优化关键:分析访问计划 360
10.2.1 解释工具 360
10.2.2 解读访问计划 364
10.2.3 表扫描与索引扫描 371
10.2.4 嵌套循环连接、归并连接和哈希连接 374
10.2.5 基数估计和统计信息 380
10.3 性能问题诊断过程 388
10.3.1 分析思路 389
10.3.2 捕获低效SQL语句 389
10.3.3 分析低效SQL语句 389
10.3.4 优化低效SQL语句 390
10.4 实战案例集锦 390
10.4.1 案例1:理财平台系统案例高消耗应用态CPU问题 390
10.4.2 案例2:电子渠道系统案例SQL语句运行时间超长问题 398
10.4.3 案例3:自动调度平台系统案例存储过程运行时间超长问题 402
10.5 编写高效SQL语句 407
10.5.1 尽量避免排序 407
10.5.2 OR/IN或OR/UNION ALL等价转换 407
10.5.3 不要检索多余的数据 408
10.5.4 模糊查询优化 408
10.5.5 避免在连接谓词中使用复杂表达式 408
10.5.6 将复杂表达式放在常量上 409
10.5.7 使用Db2提供的日期类型 409
10.5.8 谨慎对待隐式类型转换 410
10.5.9 外连接的顺序 411
10.5.10 IN和EXISTS子查询 412
10.5.11 OFNR和FFNR子句 417
10.5.12 动态SQL VS. 静态SQL 417
10.5.13 事务结束后及时COMMIT 418
小结 419
第?11?章 MySQL数据库性能优化 420
11.1 MySQL性能优化方法论 420
11.1.1 MySQL逻辑架构基础知识 421
11.1.2 MySQL优化方法简介 421
11.1.3 MySQL优化实践 421
11.2 MySQL优化基础知识 423
11.2.1 聚集索引和二级索引 423
11.2.2 主键索引和索引 425
11.2.3 多列索引 426
11.2.4 前缀索引 426
11.2.5 索引使用策略 427
11.2.6 索引条件下推 428
11.2.7 多范围读 429
11.2.8 特定场景优化策略 431
11.3 收集性能数据 432
11.3.1 收集操作系统性能数据 433
11.3.2 收集数据库性能数据 433
11.3.3 性能数据收集建议 439
11.4 捕获问题SQL语句 439
11.4.1 使用快照命令捕获问题SQL语句 439
11.4.2 通过pt-query-digest定位问题SQL语句 440
11.5 分析问题SQL语句执行计划 444
11.5.1 Explain输出字段说明 446
11.5.2 语句标识 447
11.5.3 查询类型(select_type) 449
11.5.4 访问类型(type) 451
11.5.5 索引长度(key_len) 453
11.5.6 额外信息(Extra) 454
11.5.7 Explain重点关注项 455
11.5.8 不同版本下Explain的注意事项 456
11.6 MySQL性能优化实战集锦 456
11.6.1 案例1:一次客服语音系统数据库服务器CPU负载高的优化案例 457
11.6.2 案例2:一次业务档案系统数据库缓慢批处理优化案例 460
11.6.3 案例3:一次员工渠道系统用户登录缓慢优化案例 465
11.7 MySQL性能优化实践配置参数优化 471
11.7.1 硬件配置优化建议 472
11.7.2 操作系统配置优化建议 472
11.7.3 数据库配置优化建议 473
小结 474
第?12?章 商业银行数据库管理思考 475
12.1 商业银行数据库管理演化阶段 475
12.1.1 奴隶社会手工运维阶段 476
12.1.2 封建社会工具化阶段 477
12.1.3 资本主义社会云化管理阶段 478
12.1.4 共产主义社会智能化阶段 480
12.2 新系统上线方面的思考 480
12.2.1 流程的优化 481
12.2.2 安装自动化 483
12.2.3 高效服务化部署 484
12.3 数据库事件管理思考 485
12.3.1 事件管理优化 485
12.3.2 事件自动化统计与分析 486
12.4 问题处理方面的思考 487
12.4.1 深挖问题根本原因 488
12.4.2 问题总结与沉淀 489
12.5 数据库变更方面的思考 490
12.5.1 数据库变更的标准化 490
12.5.2 数据库变更的自动化 491
12.6 数据库应急方面的思考 492
12.6.1 数据库应急预案的制订 492
12.6.2 一键式数据库应急处置平台 493
12.6.3 数据库自愈方面的思考 494
12.7 数据库安全方面的思考 496
12.7.1 安全的流程化管控 496
12.7.2 打造坚不可摧的数据库安全体系 498
12.8 开发运维一体化(DevOps)的思考 499
12.8.1 什么是开发运维一体化 500
12.8.2 构建部落式团队 501
12.8.3 智能化运维(AIOps)的思考 502
12.8.4 数据库管理员(DBA)的转型 502
小结 503
参考文献 504
缩略语 505
后记捕鱼 509