Db2 高可用及优化 7 个难题解析
目前Db2数据库的高可用方案主要有以下几种:
· Db2 HADR实现本地数据库高可用
· Db2 GDPC(PureScale集群)+HADR实现两地三中心灾备
· Db2 PureScale 集群实现双活
· Db2 HADR+备库只读,实现高可用和AQ的双活
从社区调研的企业数据库用户来看,对于不同技术路线的高可用架构设计、具体产品和技术应用落地过程中都面临不同问题。 除此之外,对于相当一部分数据库架构师和管理员,面临的数据库难题还有数据库升级方面。尤其是对现有的数据库进行高可用改造,要求更高、需要解决的问题更难、更多。企业信息系统复杂、数据量大,在其系统升级改造过程中, 往往又涉及到Db2前后版本、新旧摸块的升级、衔接与切换等问题。
为了帮助大家更深入的了解Db2高可用方案,从而选择适合自己需求的方案,更顺利的进行Db2的升级和优化,twt社区3月15日在上海举办了交流活动,特别邀请了某证券、某商业银行、IBM的Db2专家来分享先进经验,解答大家的疑难问题。为使读者也能够获得相关参考,现将交流中探讨到的7个难题及其解答总结于此:
Q1:Db2 版本升级,数据库端、应用端需要做哪些测试?有哪些停机时间短且能支持回退的方案?有什么升级前后SQL性能对比的手段?
解答1:
为避免风险,做全部应用的测试,高并发的还需要做压力测试;
停机时间短的方案有cdc,hadr和追日志,使用cdc可以进行回退;
通过Db2batch或者dsm捕捉一些常用交易的执行时间,但dsm不支持9.7的一些低版本以及9.7之前的版本。
解答2:
方案一般是根据停机时间和系统重要程度来做的。
如果时间要最短,可以使用复制软件把数据库复制到新版本数据库中,这样停机时间短,可以回退。
如果用本机直接升级的话,一般时间也是很快的,备份时间+升级时间。但是如果回退,时间会比较长。
SQL语句性能这个要在测试环境做好比对,一般不会有啥问题。
生产上就按照正常的监控处理就好了。
Q2:Db2 SQL执行计划影响的因素有哪些?
解答1:
Db2 SQL执行计划影响因素主要包括:
1) 数据库统计信息:表和索引的统计信息,列分布统计信息等。
2) 数据库设计信息:表空间、表分区、索引等。
3) 系统和数据库配置信息:CPU速度、存储I/O速度等硬件配置,缓冲池、排序堆大小等内存配置等。
4) 优化参数信息:并行模式、优化级别、寄存器等。
5) 给定查询SQL:SQL写法也很重要。
解答2:
记录数,索引,列的数据分布,optimizer guideline
Q3:SQL概要文件相关问题:概要文件如何编写?由开发还是运维负责?
解答1:
Db2 SQL优化概要文件有关说明:
1) 使用优化概要(optimize profile)的目的是定制执行计划(access plan)。
2) 优化概要文件分为两类:嵌入式、独立式。
3) 嵌入式的优化概要是将优化概要嵌入到查询SQL中。这种方式需要开发人员来负责。
4) 独立式的优化概要文件是把优化概要文件发布到Db2元数据表OPT_PROFILE中。这种方式可以由运维人员来负责。
5) 优化概要文件编写,要点就是为查询SQL指定特定的表访问方式、表连接方式和连接顺序等,按照优化概要文件XML格式编制即可。
解答2:
Db2 的概要文件不大好写。我的经验是通过修改统计信息,来改变访问计划。统计信息的维护建议运维负责。
解答3:
SQL概要文件的编写请参考Db2信息中心或者developerworks上下面的文章,编写概要文件需要熟悉optimizer guideline:
https://www.ibm.com/developerworks/cn/data/library/techarticles/dm-1008pengxq/
如果执行计划不是最优时,可以先考虑使用OPTGUIDELINES,它和 概要文件的使用相比较会简单些。
通常在具有了一定的Db2使用经验之后,才会了解到概要文件,一般的开发人员基本上不接触概要文件,因此概要文件的编写建议是由有经验的使用者来编写,可能是开发人员,也可能是调优的DBA。
Q4:Db2分库的标准是怎么样的?最大单库有多大?
解答:
主要按照业务特性来分库,当然还要考虑数据量、访问效率等因素。
1) 以业务特性(业务领域)为主要因素来考虑数据库划分(即分库)。
2) 按照业务特性分库之后,如果数据量还是很大,可以考虑按照当前数据、历史数据来划分数据库(分库)。
3) 也可以结合访问效率考虑进一步分库,例如划分为读写库、只读库等。
4) 单库大小实际上没有标准,只要满足业务系统读写效率就可以。
5) 与MySQL相比,Db2是强大的商业数据库,Db2单库规模可以很大。
Q5:单库后台对应几个存储?
解答:
一般来说,核心数据库都是挂接SAN高端存储,而且存储划分需要离散化。
1) 现在存储都是SAN存储,通过存储虚拟化来集中管理大量物理存储。
2) 一般思路都物理盘=>RAID=>LUN=>HDISK=>VG这种模式。
3) 尽量离散化存储访问,提高存储I/O并行性。
Q6:如何比对发布前后数据库语句执行计划的?遇到问题的回退方案是怎么样的?
解答:
在升级前把数据库package的执行计划取出来,等升级后在把package的执行计划取出来,利用compare工具作对比,由于证券的业务特殊性,测试\升级都是在周六做,周六并没有业务数据,所以在遇到问题需要回退时,直接用升级前的备份,做数据库恢复。
Q7:数据表lob字段reorg速度很慢,有什么办法可以加速吗?
解答:
可以从下面几个方面尝试解决:
1)使用32k的页面大小,lob字段使用inline length,这样和小的页面比较,可以将更多的大对象和其他列存放在同一个页面里;
2)如果打对象的长度没有超过32k,建议使用varchar数据类型代替lob字段;
3)增加util_heap_sz配置参数的值;
4)使用离线重组;
5)将long tablespace和数据表空间存放在不同的磁盘上;
在重组过程中,收集iostat的信息,看看IO主要在哪些盘上,IO能不能调整的均衡些。
推荐资料:
Db2数据库高可用及灾备概述
http://www.talkwithtrend.com/Document/detail/tid/423115
某银行DB2数据库日常管理及性能优化案例分享
http://www.talkwithtrend.com/Document/detail/tid/403367
点击阅读原文关注社区 "Db2" 技术主题 ,将会不断更新优质资料、文章,您也可以前往提出疑难问题,与同行切磋交流:
下载 twt 社区客户端 APP
与更多同行在一起
高手随时解答你的疑难问题
轻松订阅各领域技术主题
浏览下载最新文章资料
长按识别二维码即可下载
或到应用商店搜索“twt”