暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库技术随想杂谈

101

这几天,重案组再次遭遇latch shared pool问题,我们团队立刻投入力量对该问题进行跟进和分析,并积极地和研发进行沟通,时刻关注代码修复的进展。

1

用户很疑惑,你们的shared pool怎么老是出问题,从19.5开始,更不要提12.2,11.2,10.2

似乎我们通过解析shared pool的数据结构,已经把这个组件,吃透了?从子池,latch,mutex, handle , bucket 都dmp出来,研究得头头是道。但是幸福曾经有,但又稍纵即逝, oracle在版本更新过程中,在不停的往shared pool加入新东西,在v$sgastat可见的shared pool的数据结构已经达到超过1400个,这个数量比之前的版本翻了数倍之多。新特性的加入,就会带来一些新的Bug。但O之所以在市场上一直处于独一无二的技术领先优势,就在于不停地创新。但这个创新,其实要付出巨大的代价和巨量的市场收入的支撑。O的代码量已经超过2500万行,这已经是超过了个体人类大脑的极限,为了维护和开发这庞大的代码库,需要无数才华横溢的工程师在精密组织下,进行迭代。

2

又有用户抱怨,你们怎么修复一个bug,一周都搞不定?一周都出不来?在混日子吗?

这里引用外网一前O研发的话:修改一个bug,为何要划分这么长时间

更改产品中的单行代码,可能涉及修改超过1000个单元测试。一代又一代的程序员编写了该代码。非常复杂的逻辑、内存管理、上下文切换等都由数千个标志位组合在一起。整个代码充满了神秘的宏,光是翻译现有的宏就可能需要一天到两天的时间。有时需要了解 20 个不同标志的值和影响,以预测代码在不同情况下的行为方式,就会花费大量的时间。

修复bug的日常

- 开始处理一个新错误。

- 花时间尝试了解以相互作用 的几十个不同标志位。

- 添加一个标志来处理新的特殊情况。添加更多代码行来检查此标志并解决有问题的情况并避免错误。

- 将更改提交到由大约 100 到 200 台服务器组成的测试场,这些服务器将编译代码、构建新的 Oracle 数据库并以分布式方式运行数百万个测试。

- 测试可能需要 20 到 30 小时才能完成。

- 第二天来检查测试结果。运气好,大约会有 100 个失败的测试。运气差的话,大约会有 1000 次失败的测试。选择其中一些测试,并尝试了解您的假设出了什么问题。也许还有大约 N个标志需要考虑才能真正理解错误的性质。

- 添加更多代码修改以尝试解决此问题。再次提交更改以进行测试。再等 20 到 30 个小时。

- 0 次测试失败。

- 为新更改添加一百多个测试,以确保下一个不幸接触这段新代码的开发人员永远不会破坏代码的修改。

- 提交最后一轮测试的工作。然后提交审核。现在继续处理下一个错误。

- 当一切都完成时,代码最终会合并到主分支中。



一个模块清晰,和其它模块交互有地限的错误,可能在 1-2个月内被搞定。对于那种5-10天就能release出的fix,其实研发早就开始了对它的研究,客户往往认为研发只需要几天就搞定整个过程。

我曾经经历了几次,发现bug,到最后release补丁,全球第一下载,每次的时间都长达30天以上。

O为了维持精密的运作,依靠的就是百万级别的单元测试,这使得一般的公开版本,不会有对业务致命的bug出现,可能系统会出现偶发的宕机和缓慢,但是O总能够在短时间内恢复正常,并且O也提供了各种HA解决方案来应对各种风险。

YES

这就是各种关键系统,尤其是和钱打交道的系统,基本

大多数都运行在Oracle上的原因。

O未来涉及的几大重大功能改进,如

  • PDB switchover, 

  • 融合数据类型,

  • 下一代RAC,TAC,Service,Cache Fusion..

  • AIOPS

都会继续引入入大量新代码和代码修正,在大量精英的研发和服务人员共同努力下,才确保Oracle在关键核心系统上始终居于No.1的角色。

现在由于政治的原因,要简单的替换,可行吗?你如果了解这种超大型软件的开发来说,就知道大型企业的关键核心系统去O,纯粹从数据库技术层面来实现,是非常困难。O的精密运行,不是完全靠技术的先进性,而且其极其庞大的代码分支,由数代精英程序员在维护开发了几十年以后的成果,并且依旧靠着全球市场数百亿的收入来维持其稳定性和先进性,同时它提供了高级原厂服务,给与了客户运行关键业务最高的承诺和信心。

其它见解

所以核心系统选择其它数据库,涉及的不仅仅是数据库软件的替代,而且是涉及从业务场景,应用软件架构,运维模式,甚至KPI考核,客户体验等的全面改造。再加上一家能够在设计理念上独辟蹊径,投入巨量资金和人才的好的数据库企业,就能够加大成功的几率。


国内某家从20年以前,就是全面仿O架构的公司,目前发展明显放缓。其原因,大概是仿O这条路,越走越难,人才市场和钱不足继续追赶,极限做到了11g的大部分功能,再继续走,基本是越来越难,O自己每年投入百亿的研发,引入几百个特性,修正上千个Bug,继续模仿走不通了,说白了,就是资源投入的巨大差异。但是,要走分布式,AIOPS,云化这条路,但基础架构难以颠覆性修改。反而另外一些,从一开始就带着先进的,新一代软件设计理念来进行研发数据库企业,在高速发展。而且开源数据库,虽然里面有很多优秀的内核代码,但是也是不可能往“宏伟”这个方向去发展的,模块界限清晰,功能独立,业务场景简单但却重要,是开源的生存之道。


拥有着同样的优势,也面临同样的挑战的,就是微软的Windows操作系统,一样的才华横溢和bug层出不穷。微软的工程师长年也在抱怨其大公司通病带来的困扰。

Google机翻的评论

Windows确实在很多场景下比其他操作系统慢,而且差距还在拉大。问题的根源在于组织。您在 Linux 世界中看到的几乎没有任何为了自身利益进行的无效的拉锯。偶尔有人会看到天真的人试图让事情变得更好。这些人几乎总是失败。初级开发人员还倾向于通过实现全新功能而不是改进旧功能来改进系统。查看最近的 Microsoft 版本:我们不修复旧功能,而是增加新功能。新功能在审查时比对旧功能的改进更有帮助。微软仍然有一些老派的硬核才华横溢的开发人员,这些人对操作系统开发的复杂性有着敏锐的认识,并且对良好、简洁的设计有着敏锐的洞察力。NT 内核在某些方面仍然比 Linux 好得多,但是我们的好人不断退休或转移到其他大型技术公司,而且很少有人新人达到取代离开的人所需的技术精湛水平。 


最后,这种闭源的宏大软件,已经是人类智慧和高度组织性的最佳体现, 但一旦缺乏持续的人才投入和资金,这种软件的发展也极可能失控,假设外星人轰炸地球,大部分内核工程师消失了,这种软件可能就无人能够阅读和重新开发了~~


文章转载自西区O记重案实录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论