本文分享自华为云社区《DTCC 2023专家解读丨GaussDB技术解读系列之数据库迁移创新实践》,作者:GaussDB 数据库。
近日,以“数智赋能 共筑未来”为主题的第14届中国数据库技术大会(DTCC 2023)在北京举行,在GaussDB“五高两易”核心技术,给世界一个更优选择的专场,华为云数据库生态工具研发总监窦德明分享了GaussDB数据库的迁移创新实践。
以下是演讲实录:
各位同仁,我是华为云数据库生态工具研发总监窦德明,我分享的是GaussDB数据库迁移的创新实践。
易迁移能力是企业数据库替换选型的关键考量
数据库的选型除了要看数据库本身的能力外,能否很平滑地从其他数据库迁移到GaussDB,也是很多企业考量的关键因素。而数据库能否平滑迁移有两个非常核心的要素,一个是数据库本身,比如能否很好地兼容主流数据库的语法,让应用少改或者不改;另外一个是在数据库外围能否提供一些好用、易用的迁移工具,把应用中内嵌的SQL、数据库中的对象以及全量和增量数据,在业务近乎零停机的情况下从其他数据库平滑地迁移过来。这两点是企业做数据库选型时考量的两个迁移关键要素。
结构(UGO)+ 数据(DRS)一站式迁移解决方案
在2021年的DTCC大会上,我们发布了华为云结构+数据一站式迁移解决方案,其中有两个核心工具。一个工具是UGO,主要做结构和应用的语法兼容性评估和转换,比如将数据库上层应用中内嵌的SQL捕获出来进行评估,对数据库内部对象的DDL进行评估,并输出一个报告,清晰地展示哪些是数据库本身兼容的、哪些是通过UGO转换可以兼容的、哪些不能转换需要人工介入进行改造等。另外一个工具是DRS,大家都知道,异构数据库替换过程中的数据迁移问题非常非常多,DRS要解决的就是怎么在业务近乎不停机的情况下快速把客户的存量数据和增量数据迁移过来,并保证数据在任何情况下不丢、不错、不乱,同时提供灵活、多样的数据比对和修复能力。
UGO+DRS一体化解决方案在实际项目中得到验证
UGO+DRS一站式迁移解决方案近两年在很多项目中都得到了验证和应用,这里举几个实际的例子。第一个是我们公司自己内部的MetaERP项目,使用UGO自动转换了近7亿行的O数据库SQL脚本,转换成功率接近100%,同时GaussDB实现了并行逻辑解码,性能高达近300MB/秒,可以让DRS轻松应对MetaERP在月结、季结和年结时10~20倍的流量洪峰,保证数据同步
第二个是某银行的数据库替换,这个项目迁移复杂度比较高,面临应用多、数据库对象多、存储过程和package深度依赖等困难,截至目前通过我们的一站式迁移解决方案,完成了近1.3亿行SQL脚本(包含近8000万存储过程)的UGO自动转换,转换成功率超过96%,采用DRS迁移了近300套左右的O数据库实例,实现了O数据库与GaussDB数据库的长时间并机稳定运行,正反向低时延数据同步。
项目实施过程中遇到新的困难与挑战
在大量的项目实施过程中,我们UGO+DRS一站式迁移解决方案也遇到了一些新的困难和挑战,这些挑战相信大家也都会遇到,在此给大家做个分享。
挑战1:在做异构数据库替换时,如何快速识别异构数据库语法不兼容点,识别数据相同的情况下相同SQL在不同数据库中执行的性能差异,以及低版本向高版本升级时是否会存在不兼容或性能劣化,再有就是如何模拟业务流量洪峰时的数据库行为表现。
挑战2:当前很多企业的开发人员和DBA对GaussDB熟悉程度还不高,SQL编写水平参差不齐,而且在做应用开发时缺乏统一的SQL编程规范和有效的SQL审核机制,很多烂SQL都流入了生产环境,进而引发大量的应用性能问题,影响生产业务和客户体验。
挑战3:很多数据库当前的字符集在标准字符集的基础上做了很多扩展或者定制,导致数据迁移时相同字符集的不兼容,或者就没有对等的字符集,更有甚者,历史数据里已经存在了各种各样的乱码数据,这些特殊场景都会影响迁移的平滑性。
当然,困难和挑战还有很多,但这三个是会阻塞或拖慢数据库迁移进程的,那么针对这三个挑战,我们都做了哪些探索和创新呢?再给大家分享一下。
应对挑战1:孵化数据库流量录制与回放能力
流量录制与回放的概念相信大家都不陌生,在数据库领域,有些数据库厂商也提供了相应的工具,GaussDB面临的业务场景比较多,所以需要的技术也因场景而异。如果源数据库是公有云服务,而且提供了全量SQL,那么直接获取全量SQL并进行回放即可;如果源数据库开启了审计日志,也可以直接下载并解析审计日志,当然开启审计日志会对数据库的性能有一定的影响;如果源端是自建数据库,而且未开启审计日志,那就需要部署一个agent,通过捕获网络数据包,结合数据库本身的通信协议来解析出应用下发的所有SQL。基本上这三种方案可以涵盖所有的场景,这里面还要注意几个点,首先是要研究透不同数据库的通信协议,其次是实现异构数据库替换场景下的SQL自动转换,另外是要具备SQL回放的流量控制能力,能加速或者放慢等,当然在解析、回放等出现异常的情况下,要做好记录。
接下来就是在源数据库的镜像库和GaussDB数据库同时进行流量回放,而且保证镜像库和目标数据库的数据完全一致,回放的SQL也完全一样,最终输出一个分析报告,比对每一条SQL的执行耗时、资源消耗、甚至是执行结果,很容易看出来哪些SQL的性能GaussDB比源数据库好、哪些出现了劣化、哪些是基本持平的。
我们正在和某银行进行数据库流量录制与回放的联合创新,从实际应用效果来看,通过agent方式捕获流量包,SQL抓取成功率可以做到97%以上,解析成功率和回放成功率可以达到95%,在此过程中,还可以识别到语法不兼容、语义不兼容的异常情况。
应对挑战2:孵化GaussDB数据库SQL审核能力
SQL审核大家更为熟悉,很多大的企业都会进行探索和实践,但对于GaussDB来说,由于是纯自主创新的分布式数据库,很多企业的开发人员和DBA还不熟悉GaussDB的SQL语法,也没有制定较为完善的SQL编程规范,很多第三方SQL审核工具也没有针对GaussDB的审核能力,这种情况下,我们结合UGO成熟的SQL解析器,以及多个项目中的SQL调优实践,孵化出了GaussDB数据库的SQL审核能力。
我们SQL审核的输入可以有多种类型,可以是代码仓,也可以是一个SQL文件,还可以是通过流量录制获取的动态SQL等等,可以审核直接获取到的原生SQL,也可以审核通过UGO转换后的SQL。
截至目前,我们已经沉淀了81条审核规则,并在公司内部的两个项目以及外部的多个银行进行了应用,效果超出预期。
应对挑战3:孵化字符集兼容性分析评估能力
针对数据迁移,大家最担心的莫过于正式割接时出现各种各样的问题导致割接失败,除了迁移工具本身的功能之外,最常见的可能就是字符集不兼容、数据乱码、生僻字等等。举个例子,O数据库对GBK字符集做了扩充,可以存储UTF-8字符,而GaussDB数据库的GBK字符集非常规范,从O数据库向GaussDB迁移数据时,这些UTF-8字符根本无法写入,迁移必然失败。更有甚者,很多客户的海量历史数据中有大量的乱码数据,无法确定这些数据是什么时候写入的,哪些应用写入的,或者后续会不会再用到,但客户要求必须迁移过来。那么,面对这些挑战,我们尝试通过孵化字符集兼容性分析评估工具来提前识别。
这个工具的原理很简单,首先是建立一个可以分析的字符集基线,比如GB系、Unicode系列等,其次是获取源数据库的元数据,包括字符集、索引信息、表结构信息(列类型、列长度)等,然后基于源数据库和目标数据库的字符集做好映射,最后再对数据库进行数据扫描和分析,输出多维度的分服务器托管网析评估报告。目前这个工具正在和某银行进行联创,从前期的试用效果来看,确实能发现很多问题,比如ZHS16GBK和AL32UTF8两种字符集混编、直接写入二进制格式导致数据乱码服务器托管网、ZHS16GBK字符集使用了大量生僻字等。
对UGO+DRS一站式迁移方案的演进思考
以上是我们在使用UGO+DRS一站式迁移解决方案过程中遇到的三个大的挑战,以及应对这三个挑战做的一些创新实践。现在GaussDB的迁移场景越来越多,也越来越复杂,所以我们会不断地进行探索和创新,让我们的方案更完善,迁移过程更平滑,比如流量回放、SQL审核、字符集兼容性评估会支持更多的数据库,推出非常详细和全面的应用、结构、数据迁移可行性分析报告,实现SQL捕获、转换、审核、优化全流程一体化管理等等,也希望能和客户、伙伴以及各位同行进行合作。
以上就是我分享的GaussDB数据库在迁移方面的一些创新实践,谢谢大家。
号外!
华为将于2023年9月20-22日,在上海世博展览馆和上海世博中心举办第八届华为全联接大会(HUAWEICONNECT 2023)。本次大会以“加速行业智能化”为主题,邀请思想领袖、商业精英、技术专家、合作伙伴、开发者等业界同仁,从商业、产业、生态等方面探讨如何加速行业智能化。
我们诚邀您莅临现场,分享智能化的机遇和挑战,共商智能化的关键举措,体验智能化技术的创新和应用。您可以:
- 在100+场主题演讲、峰会、论坛中,碰撞加速行业智能化的观点
- 参观17000平米展区,近距离感受智能化技术在行业中的创新和应用
- 与技术专家面对面交流,了解最新的解决方案、开发工具并动手实践
- 与客户和伙伴共寻商机
感谢您一如既往的支持和信赖,我们热忱期待与您在上海见面。
大会官网:https://www.huawei.com/cn/events/huaweiconnect
欢迎关注“华为云开发者联盟”公众号,获取大会议程、精彩活动和前沿干货。
点击关注,第一时间了解华为云新鲜技术~
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 【python基础】复杂数据类型-列表类型(列表切片)
1.列表切片 前面学习的是如何处理列表的所有数据元素。python还可以处理列表的部分元素,python称之为切片。 1.1创建切片 创建切片,可指定要使用的第一个数据元素的索引和最后一个数据元素的索引。与range函数一样,python在到达指定的第二个索引…