今天闲暇之余看到某vx群聊得很火热,这个群聚集了国内不少数据库大咖,其中大家聊到国产数据库遥遥领先了。 最开始主要是一个朋友提到目前很多企业拍板的人并不懂数据库,甚至很多知名数据库都没听过。
然后大家就开始聊到国产数据库了,接着就开始出现一些遥遥领先的库了。
当然对于如何领先,领先多少,实际上实际用过或者测过的一些数据库专家们有一些心得体会,我们来看看大家的真实反馈。
某老牌历史悠久数据库1
据网友反馈是从oracle导入了几个大表到国产上进行了测试,跑相同的SQL,看上去前后性能差了100倍!
当然,我认为去跟Oracle一体机比,确实有点过分了,虽然是一个不懂技术的领导提出来的!
某老牌数据库2
某开源系数据库
当然,这里我不是为了贬低国产数据库,我尝试来解读一下国产数据库的实际情况,毕竟我们也是数据库厂商嘛。 1、有没有有可能,有些业务跑比Oracle快?
答:完全有可能,实际上我们近期一个客户改造国产中,经过我司优化专家调优改写,很多SQL比客户的Oracle原始环境跑的快。 当然,这样比,确实不公平! 如果要非常严谨,那么应该相同硬件,相同(类似)参数配置、数据量以及相同的执行计划,这样比较才有意义。
2、国产数据库跟Oracle的差距在哪里?
答:实际上之前我就写过一些文章提到过,Oracle的强大之处除了很多强大功能如多租户、丰富的观测能力等等之外,实际上我们认为,最厉害的一点还是在于Oracle 强大的CBO优化器。
简单的讲,就是你很多写法不佳的低效SQL,那么经过Oracle 的查询转换之后,那么都能很快跑出结果,而如果放到国产数据库,那么可能就完全跑不动。
就会出现前面提到的oracle 跑了几分钟,某国产跑了6小时的情况。
这个时候如果对SQL 进行适当改写优化,那么应该也能高效跑出结果。
3、基础算子能力
这方面我认为差距也是比较大的,比如全表扫描能力,IRS、IFFS,hash join等能力。
我们曾经对比过,相同数量,分别把几个表导入到不同的国产数据库上进行测试(大概测试了国内主流的6-7种),实际上差别非常大。
就比如最为简单的全表扫,实际上Oracle是可以进行多块读的,每次扫128个Block;而过程数据库几乎均不支持多块读,那么大家可以想想这个差距有多大?
再比如大家常见的hash join,Oracle里面很多时候执行计划不佳,Oracle就倾向于走Hash,但是其效率还是非常高的。
我曾经测试过集中主流国产数据库,再不经过特殊优化,比如使用向量化等操作之前,那么国产数据库的hash join性能普遍比Oracle慢2-3倍。
当然,写这么多,不是说国产数据库都一无是处;相反,我反而希望国产能发展的更好,早日能够真正的,全方位的和Oracle进行pk,且不会败下阵来!
---------------------------------------------------------------------------------------------------------------------------------
喜欢本文的朋友,欢迎关注公众号 Roger的数据库专栏,收看更多精彩内容