为什么稳定性如此重要?
——浅谈高斯数据库的使用现状
当我们在谈论数据库的高可用及高性能特性时,其实我们说的是它的稳定性。对于商业数据库来说,由于产品的成熟度较高,应用广泛,生态完整,相比安全性、扩展性以及智能化维护等,其稳定性因素往往很容易被忽略。事实上,无论是放弃Oracle,还是替换DB2、TeraData,在国产化浪潮中影响我们取舍的最重要的原因仍然是商业价值的考量,而不是性能。
在过去的两年,国产数据库日益发展壮大,如雨后春笋,层出不穷。墨天轮社区根据市场关注度及综合使用情况做出了一个国产数据库流行度排行(见下图),截至2020年12月,排名前三的数据库分别为TiDB、DaMeng和OceanBase,其中华为的商用数据库GaussDB和开源数据库openGauss分别位列第7、8名。据墨天轮统计,当前各类国产数据库多达一百多个,华为的高斯属于后来居上,虽然发布时间较晚,但得益于大厂的加持以及多年持续的研发投入,高斯数据库显然很受市场青睐,而openGauss数据库更是被评选为2020年度数据库,目前已有7个商业版本。
面对高斯数据库日益高涨的关注度和影响力,很多从业者一方面欢欣鼓舞,一方面却又抱有一丝怀疑和焦虑。每次与华为的工程师谈起高斯数据库的前景时,这两种对立的情绪就会同时出现。其中有一个观点让我印象深刻,他们认为华为背后强大的研发力量对高斯数据库来说既是优势又是短板。
无疑这是少数人的一种看法,或许不准确,又或许失之偏颇,但绝对真实。
我们在处理高斯数据库日常问题时,可以参考的官方资料只有产品文档,除此之外,PostgreSQL开源社区的资料也能够作为部分补充。由于产品文档的局限性和缺乏深度,很多情况下,在排查问题时一线人员常常束手无策,不得不求助于研发支持,甚至有些项目要求所有的生产环境问题均需要建单跟踪。尤其是对于反复出现的bug,无法追溯的报错,不明原因的重启或者宕机等等,严重影响了产品的正常使用和体验。这样的现象在经过大量项目多年的磨合优化后已大幅减少,但产品的稳定性仍然困扰着使用者。
当然,产品问题不仅仅是国产数据库的专利,商业数据库也在不断经历优化升级,但是否能够利用现有资源顺利解决问题成为了DBA的分水岭,也决定着是否需要研发支持的介入。
稳定性不足,导致一线耗费了较多的研发力量,而强大的研发支持,又让这种依赖变得更加突出。高斯数据库在保留原生版本形态的基础上,吸收并改进了很多商业数据库优异的特性,例如WDR快照,来源于Oracle的AWR,分布式框架取材于Postgres-XC。同时,高斯数据库又实现了很多独有的功能,如AI特性:Predictor、X-Tuner、Sqldiag,借助这些工具算法,可以更好的为查询优化器提供准确的执行计划。另外MOT存储引擎的引入,成为openGauss最先进的生产级特性,它针对多核和大内存服务器进行了优化,能够为事务性工作负载提供更高的性能。GaussDB 200中向量化执行和行列混合引擎、SQL on AnyWhere、SQL自诊断、计算资源弹性伸缩等企业级特性的增强及应用,极大地提升了高斯数据库OLAP的使用性能。
尽管诸多企业级特性增加及延伸了高斯数据库的高可用和高性能,并且在较短的时间内实现了规模化应用,但影响产品稳定运行的各类故障不时偶发,仍然使其在与Oracle、TeraData等商业数据库的竞赛中缺乏足够的竞争力。
在高斯数据库的SQL优化中,执行计划里面时常会出现表的广播和重分布选择错误、子查询估算不准确、连接方式不合理等情况,即便优化器获取到了最新的统计信息,SQL语句逻辑清晰。尽管我们将此类问题统统算作查询优化器的bug,并且新版中也得到了一定解决,但作为数据库最核心的组件,我们希望这类bug永远不要出现。
从某种角度来说,数据库的所有特性几乎都建立在稳定性的基础上,不论是高可用还是高性能,均指向同一个目的:持续稳定高效运行。在国产数据库发展最好的年代,每一款产品的诞生都是一次挑战和机遇,它需要获得市场的认可和信心,就一定要在创新的前提下保证稳定性,对于最终的用户来说,持续稳定运行是数据库的最基本要求。作为墨天轮年度数据库的openGauss,摒弃了分布式架构,而采用更流行的主备模式,除了更符合OLTP应用形态以外,主备模式相对的稳定性或许也是重要的考虑因素。