绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
谈几个客户需要的数据库可观测性接口
2022-12-16 17:24:20
关于可观测性,我以前也写过一篇文章。前几天和一个DBA交流的时候,他说目前上了一个国产数据库,遇到头痛的事情是,有时候SQL语句跑了半天还没出来,又不知道跑了多少了,还不敢轻易杀了重跑。实际上这个问题是一直困扰我们的,我刚刚工作的时候,安装一个大型软件,安装程序自动跑的时候要做大量的编译,可能要跑上半天才能完成。有时候遇到客户的机器配置比较低,出去吃个饭回来还没装完,又不敢轻易干掉重来,这种感觉和那个朋友说的情况十分类似。
不可知带来的恐慌是十分巨大的,业务部门说系统慢,但是从服务器,存储,操作系统上看不出任何异常。而从有限的数据库监控指标上能够看到的都是正常的数据,这恐怕是运维人员遇到的为恐怖的事情了。一旦这种情况出现,往往意味着一个棘手的难题出现了。
昨天下午我和搞数据库研发的朋友交流的时候也提到这一点,加强数据库可观测性是降低数据库使用成本的一个十分重要的手段,在数据库的其他功能都差不多的情况下,内卷的国产数据库市场上,如果你的可观测性比别人好,就会意味着你的数据库产品比别人更好用,就会有更多的客户愿意使用你的数据库产品。
现在很多国产数据库厂商都在自己的数据库里提供类似Oracle AWR报告的功能,不过这些国产AWR报告的质量也是良莠不齐的。报告中列出的指标并不能让运维人员获得对数据库内部健康状态的准确评价。就好像我们在WINDOWS上安装软件的进度条,数字总是在增长的,不过显示在屏幕上的百分比并不让我们感到很安心,有可能5分钟就达到了99%,但是在99%上可能会停留几十分钟,我们甚至都有干掉这个安装进程的冲动。这种可观测性虽然存在但是不让人信任,实际上用途也就大打折扣了
不过如果在进度条下面再显示一下我们正在干的工作,比如正在拷贝的文件,或者正在写入的注册表数据。这样就会让人安心很多,我们知道程序还在正常的工作着,并没有死掉。
实际上这个例子还说了可观测性的两个粒度,百分比的进度条是一个粗粒度的,宏观的可观测性指标,有点类似于ORACLE 的AWR报告。一些比较严重的问题通过AWR报告很容易定位,不过针对一些细微一些的问题,AWR报告的粒度就有点粗了,这时候使用ASH可能更容易定位问题。ASH就好像是在进度条下面显示的详细操作一样。
实际上,大多数国产数据库和开源数据库在可观测性方面都与Oracle有着较大的差距,在宏观的统计数据、等待事件等方面的数据并不能满足问题深度分析的需要。为我们的国产数据库提供ASH是十分必要的。当然开放ASH接口是有一定的成本的,如果代码优化的不好,会影响数据库的整体性能。幸运的是,现在的硬件已经足够强大,拿出一部分内存来存储ASH数据,并定期将抽样过的ASH数据写入磁盘,应该是完全可以做得到的。
除了ASH之外,我们对数据库可观测性的需求来自于SQL。一些相对简单的数据库的运维工作中,SQL优化永远是重头戏。在开源数据库和绝大多数国产数据库中,从内存中直接获取某条SQL的执行计划是比较困难的。与Oracle不同,大多数开源和国产数据库都没有全局共享CURSOR和执行计划,执行计划仅在会话内共享。因此在内存中收集执行计划变得比较困难了。实际上这个问题也不难实现,哪怕是我们的SQL不共享全局执行计划,根据本地执行计划的指纹产生一个PLAN ID,定期将活跃SQL的PLAN ID推送到共享内存中,供运维监控软件获取其实也可以低开销的实现。能够不使用EXPLAIN,就能抓到SQL在内存中实际使用的执行计划,对于更准确的掌握SQL的执行时相当有帮助的。这个实现实际上对于大多数的多线程的数据库产品来说,实现起来成本较低,而对于全局共享执行计划的多进程数据库来说,稍微难做一些你。有朋友可能会说,做全局执行计划不就行了,又提高CURSOR共享能力,又节约解析成本。说实在的,全局执行计划和CURSOR共享在复杂的高并发环境中并不容易做好,ORACLE也是花了很多年才逐步解决掉成千上万个共享池的BUG的,二十年前,这个地方是DBA的噩梦。
对于SQL的可观测性的另外一个需求是能够掌握长时间运行的SQL的执行时间,已经运行了多长时间,还剩多少没有执行。对于ORACLE数据库来说,V$SESSION_LONGOPS视图是一个十分有用的监控接口。自从Oracle有了这个视图,我们在做一些长时间运行的操作的时候,就放心了很多,某个操作大约要扫描多少数据,运行多长时间,还剩多少没有完成就一目了然了。不过Oracle只提供会话当前在做的操作的预计时间,一条SQL在执行过程中可能有很多个执行步骤,Oracle并没有给出一共有多少个步骤,本步骤是第几个步骤这样的数据。如果能有这样的数据输出,那就更完美了。
现在国产数据库有好几百种,光是交易型关系型数据库就有上百种,在这个内卷的世界里,我们的数据库厂商其实没必要去追求打破TPMC的记录,如果能把一些可观测性的问题做好,实际上对用户来说,也是十分有吸引力的。
分享好友

分享这个小栈给你的朋友们,一起进步吧。

数据库开发
创建时间:2020-06-17 14:33:07
数据库开发是数据库管理系统(DBMS)和数据库应用软件设计研发的总称,主要是数据运维、参与数据库生产环境的问题优化和解决等方面的事宜
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 小雨滴
    专家
戳我,来吐槽~