白鳝
作者白鳝·2022-04-01 09:46
技术总监·南京基石数据技术有限责任公司

从两个实例看出我们国产数据库厂商与国外头部厂商的差距

字数 2498阅读 3395评论 1赞 8

这两天Oracle停止俄罗斯的数据库销售与服务的事情让国产数据库又掀起了一场狂欢。几年前拉里的Oracle跟随美国政府惩罚维瑞内拉大多数人可能都不太关注,而当这个问题落到大国头上,可能会让我们放弃掉最后一丝幻想了。在关键核心系统上数据库国产化替代的工作无论如何都是势在必行了。

去O这种利国利民的事情为什么提出了快十年了,还只是流于表面,没能像小型机替代那么摧枯拉朽呢?从大道理上大家都认为“势在必行”的事情,为什么到了实际的工作中就变成了“恐怕不行”呢?这主要还是源自我们自己的产品还不够争气,存在差距。这种差距是全方位的,在去年的一个闭门专家会上,大家都谈了很多这方面的问题。

实际上,如果知道差距,承认差距,努力去弥补差距,我们的这项工作是一定会成功的。如果真的是这样,那么在核心系统中实现数据库国产化替代就只是时间的问题了。现在就是怕我们不肯面对差距,装聋作哑的不愿意看到差距,或者说我们的水平不足,看不到差距。那样的话,我们的国产数据库追赶世界先进水平的路就会变得更长了。

说到看清差距的问题,我在去年的会上也谈了一些。这两天我遇到的一件事情,让我看到了一个更深层次的差距,而且这个差距目前我们和国外头部厂商之间相比较,就太大了,而且在越拉越大。

前两天我和一个朋友在讨论一个Oracle数据库的十分奇怪的问题,在一份100053 trace里我们看到了一个十分奇怪的现象,SQL语句被莫名其妙的做了一次谓词内推(FPD)的转换,在SQL上莫名其妙的增加了一个基于函数索引的谓词断语。这种SQL REWRITE后,甚至语义都变了,SQL的执行结果都会出错了。当时我们觉得莫名其妙,到MOS上搜索了一下,发现基本上都是BUG,而且这些BUG的最终结果都是SQL结果出现了错误。我也没有仔细去阅读这些BUG报告。两天后,Lewis大师给出了回复,这是Oracle的一个正常行为,目的是为了提高CBO的能力。看到大师的回复我才恍然大悟,仔细想想,真的让我惊出一身冷汗,一个产品居然能做的如此细致,而这个功能的出现已经是十多年前了。

其实今天我们可以十分简单的来重现这个案例。

我每次查询之前都会刷新buffer cache,从而确保数据缓冲对这两个查询之间的影响是一样的。这两个查询的差异是比较快的查询在t_date_1上有一个条件。而t_date_1上并没有索引。我们可以通过下面的SQL来验证一下。

那为什么这两个查询的执行效率为什么会不同呢?我们来对比一下这两个查询的执行计划。

从这里我们可以看出这两条语句的执行计划的差异了。第二条语句居然使用了索引。而我们前面看到了在where条件的字段上是没有索引的,而IDX_1这个索引在前面的查询中看到也和T_DATE_1无关,是一个SYS_NC00005$上的索引。这种字段实际上是一个虚拟字段,我在这张表上创建了一个SUBSTR(T_DATE_1,1,10)的索引,这个虚拟字段就是指的这个。如果这么一看,我们确实可以看出来,这个索引是有效的,可以加快此类查询的性能。

实际上,Oracle在实现这种执行策略,就采用了那个前面我说过的莫名其妙的FPD TRANSFER。通过10053 trace,我们可以看到其实现的细节。

可以看出,CBO在生成执行计划的时候,采用了一个十分巧妙的方法,首先把这条SQL改写了,让这条SQL上多了一个AND SUBSTR("TEST_A"."T_DATE_1",1,8)='20220112'的条件,这样最终生成执行计划的时候,正确的选择了上面所说的执行计划。当然最终执行SQL的时候,FILTER还是使用了WHERE条件中的过滤器。

从这个案例我们可以看出很多值得我们学习的地方。首先是Oracle在产品上下的细致的工作,这种极小概率出现的应用场景被他们捕捉到了,这需要有大量的案例,以及对每个客户的反馈的认真总结才能具有的能力。其次是他们在架构设计上的水平,这种实现方式看似笨拙,实际上十分高明,在CBO中对这种场景设计一个FPD规则(实际上这不是一种典型的FPD场景)就可以利用原来的功能实现这个功能需求,而不需要对CBO进行深度的改造。这可以看出ORACLE在这方面的老到,这些都是值得我们去学习的。

另外一个例子是昨天发生的,我们的一个客户数据库遇到一个BUG,出现了HANG死的情况。我通过MOS很快就找到了一个类似的案例,为了进一步确认,让Oracle的朋友帮我下载一下完整的SR报告。过了一会儿朋友问我,怎么给我这份报告。我说发微信不就行了。他说不行,整个SR下载下来200多M。我拿到这份沉甸甸的报告一看,实际上分析定位问题只占了报告的前面不到10%的内容,后面都是后续内部各个部门分析诊断,以及讨论如何更好的解决这个问题的内容。从这份严谨的态度,我们也能看出成功是如何得到得了。

如果说目前我们国产数据库厂商得研发只能说差强人意,与国外大厂之间还存在较大的差距,那么如果比比售后,这种差距可能比月亮要遥远的多了。实际上售后并不是成本,对于一个数据库这样复杂的产品来说,能把售后服务变成促进产品成长的生产力,这方面,我们和国际大厂比,差距就更大了。

只有充分重视产品在实际客户中的使用体验,不断的通过努力去改善客户体验,我们的产品才会越做越好。Oracle的这种从客户的故障中获得产品改善的需求的做法绝对是我们必须学习的。比较一下Oracle的产品经理,再回头看看我们的产品,差距可能会越看越大。前者子我们的一个国产数据库的系统账号密码忘记了,找厂家问一个找回的方法,厂家说如果是用我们的图形化工具安装的,那么就可以用工具重置,否则就只能重建数据库了。似乎这也给出了一个合理的解决方案,不过如果和Oracle来对比,那就是天差地别了。这实际上是一种对产品不负责的态度。如果客户有一个关键系统,确实忘记了超级管理员密码,而恰恰没有按照你建议的方法去按照部署,那么就只能重建数据库了吗?好的产品肯定会去满足客户的各种需要,而不是让客户必须按照你的玩法来玩。

希望我今天说的两个小故事,能给我们的国产数据库厂商一些启示。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

8

添加新评论1 条评论

zhmwangzhmwangPDOceanBase
2022-04-17 10:08
赞同您的说法。目前国内大部分数据库厂商在数据库核心研发,交付支持,文档沉淀甚至产品宣传上都远远不如IBM,Oracle这种国际大厂。当然这也与发展时间的长短正相关,国内老牌的数据库厂商空有产品,但是很有有核心场景的磨炼,而新兴的数据库厂商,大部分只能解决部分场景的部分问题,在别人的产品基础上魔改一下,就自说自话,根本无法达到通用数据库的水准。但从历史的长河里,这个也算正常现象,当年Oracle也不是假大空做宣传,引导风潮。单论DB2/Oracle两种产品,其实仔细想想,DB2的db2top不比oracle任何监控产品都香,db2pd不比Oracle任何工具都实用,TSA+HADR吊打Dataguard, DPF更是无可比拟,优化器更是独步天下(惊奇于Oracle提供那么多的Hint语法,如果你的优化器足够强大,哪需要这个,当然对于特殊情况,这个也是必然需要的),但现实情况是 Oracle在市场表现上是吊打DB2的,Oracle的成功之处 个人理解在于:1 认真听取客户意见,贴近开发者,不仅仅是PLSQL, 同时提供更多场景化的语法;2 特殊的产品设计:尤其是undo,乐观锁等;3 受众广泛(当然,这个是先行者优势);4 善于宣传造势和产品引导。不谈Oracle/DB2, 对于国产化,个人理解不能执着于用单一产品解决所有问题(非国产数据库推脱的理由,还是要打磨产品,尽量追赶),这个是不现实的(即使Oracle/DB2也搞不定特殊场景,要不哪来OceanBase/TIDB/Mongo/Hadoop呢),而是使用组合拳,对于大中型企业,也可以摆脱单一产品依赖(术业有专攻),有利于后续的发展(小型企业不再讨论之列,开源数据库能满足大部分需求)。但对于国产数据库,目前个人认为最迫切的是 宣传以及数据库的培训,让大家懂你:你的能力以及你的限制,这样大家才能更好的使用你,如同当年大家是如何适应Oracle/DB2的“多种死板限制”。
Ctrl+Enter 发表

本文隶属于专栏

最佳实践
不同的领域,都有先行者,实践者,用他们的最佳实践来加速更多企业的建设项目落地。

作者其他文章

相关文章

相关问题

相关资料

X社区推广