把数据库该干的活交给OS可行吗

​这两天在思考前几天一个朋友提到的一个问题,现在的OS越来越强大了,能不能把一些数据库该干的事情交给OS去做,这样数据库的内核可以大大的简化。这个观点让我想起了十多年前Linux是否需要提供o_direct这个文件IO选项给开发者的讨论。当时Linus Torvalds说了那句十分著名的话—“In short, the whole “let’s bypass the OS” notion is just fundamentally broken. It sounds simple, but it sounds simple only to an idiot who writes databases and doesn’t even UNDERSTAND what an OS is meant to do”。他甚至认为绕过OS强大的VMM设计去处理IO是傻瓜才会干的事情,因为Linux已经为数据库类的应用提供了强大的能力。

实际上早期的数据库也是十分依赖于操作系统的,我大学毕业后使用过的第一个数据库RMS就是一个基于openVMS的记录管理系统,其底层依赖于操作系统的基础IPC能力构建。后来随着数据库变得越来越复杂,需要支持的底层OS平台越来越多,数据库产品逐渐把一些以前OS干的事情由自己独立来干。2012年的一次测试,让我对数据库与OS融合后的能力有了深刻的体会。当时在一台Oracle公司的T4-8上,服务器+Solaris操作系统+Oracle 11g的组合跑出了惊人的高性能。不用做复杂的调优,仅仅装好数据库,简单调整一下数据库参数,就取得了那次测试最佳的成绩。后来我和参加测试的老外聊了聊,他说在这个组合里,Oracle的一些并发控制相关底层调用得到了全面优化,操作系统帮助Oracle的闩锁与锁操作的并发能力得到了极大的提升。

实际上开头提的这个问题应该不是问题了,现在的Linux与90年代刚刚进入我们视野的时候已经不可同日而语了,那时候的Linux可以很好的支撑WEB应用,但是对数据库的底层支持还比较弱。而现在Linux的能力已经得到了巨大的强化,无论是Redis,MongoDB还是ClickHose,这些新生代的数据库产品无一例外的充分利用了操作系统底层的能力,从而简化了很多传统数据库自己要做的复杂控制。外加在存储引擎上使用了大量的开源技术,使得数据库研发的门槛大大降低了。包括我们耳熟能详的开源数据库MySQL和Postgresql,它们在存储引擎上也充分利用了操作系统的能力。充分利用OS FILE CACHE的能力来缓冲数据,从而提升IO性能,通过使用带日志的文件系统来消除数据库double write的开销,这一切都是数据库向OS能力借力的有效例证。

不过通用关系型数据库面临的场景十分复杂,在某些特殊的高负载场景下,OS的自动优化能力还是无法满足数据库的需求。2007年引发的关于o_direct的讨论就是一个十分典型的例证。当时数据库厂商需要自己来控制IO,而不是使用OS提供的能力。

在一个DBA的眼里,Linus的言论似乎是有些武断了,针对复杂的通用关系型数据库来说,数据库自己管理自己的缓冲,在有些时候比完全依赖于OS提供的文件缓冲能力,要高效的多。数据库有自己的一些更为复杂的判断热数据的方法,因此在shared buffer中合适AGEOUT页面,清理哪些页面,数据库管理系统可能更清楚。

不过对于大多数业务应用来说,OS提供的FILE CACHE已经能够很好的帮助我们提升性能了。在目前的Postgresql的官方文档中,还是建议shared buffer只使用20-30%,剩下的内存交给OS。有些PG用户认为这个建议十分好,他们的数据库按照这个建议设置后性能十分稳定。不过也有些用户认为把物理内存尽可能交给shared buffer具有更好的性能。这是因为业务应用场景的复杂性,导致两种策略可能在某些场景下会出现相反的效果。

对于一个数据库应用系统来说,其优化是从上到下的。

对于一个复杂的应用系统来说,越往上的优化器效果就越好,只不过越往上的优化对于前期建设队伍的能力要求也越高,前期的投入也越大。对于一些较小的,不太复杂的应用系统来说,只需要从下层做好优化就可以了,其实施成本也很低。而负载越高,越复杂的系统就越需要更上层的优化。对于有些系统来说,仅仅依赖操作系统提供的优化能力就不足够了。就像是开手动挡的车和自动挡的车,在一般路况下,自动挡车就足够用了,但是在一些特殊的户外陡坡上,手动挡车可能可以胜任,自动挡车就完全不胜任了。因为自动化的处理能力还是有限的。

不过随着操作系统的不断发展,其能力也越来越强,操作系统对数据库的支撑能力也在不断增强。有些以前需要依靠数据库核心代码去优化的工作依然可以由操作系统来承担。一些专用场景的数据库产品会首先从中受益,有时候数据库不用做升级,升级一下OS,数据库性能自然就提升了。不过针对某种数据库去定制与优化操作系统也是一种思路,在一些云原生的数据库或者公有云RDS上,可能更容易实现。​

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/228994.html<

(0)
运维的头像运维
上一篇2025-04-18 13:45
下一篇 2025-04-18 13:46

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注