可观测性中的TRACE是国产数据库急需加强的功能

网友投稿 284 2023-11-25

指标、告警和跟踪是可观测性的三大支柱。在数据库运维领域大家可能更加关注指标和告警,因为这些都是常规采集使用的。而第三个支柱Trace的关注度就没那么高了。很多DBA可能干了十年八年也没用上一次Trace。确实Trace不是常态化使用的方法,而且也过于专业了,让一般的数据库运维人员望而生畏。

可观测性中的TRACE是国产数据库急需加强的功能

最近看了一些国产数据库故障定位、性能优化的案例,大多数使用了令人炫目的黑科技,perf、火焰图等都已经成为十分常见的案例了。我不知道这些案例分享能怎样帮助我们的一线运维人员,作为一个用了三十年Oracle的IT人,我本身是十分排斥这些工具的,我希望能够通过数据库自身提供的工具来帮我完成这些分析。

Oracle数据库运维工作中很少需要使用这种核武器级别的分析工具,因为Oracle自身的可观测性已经十分强了,Oracle的TRACE、DUMP等能力十分强大,要分析Oracle的一些十分特殊的问题,使用自身的TRACE工具肯定比第三方操作系统层面的trace要靠谱的多。

Oracle可以通过诊断事件来对某些行为进行分析,通过设置诊断事件,可以改变Oracle数据库的执行行为,其中就会包括输出更多的诊断信息。你可以通过设置某些诊断事件让某个Oracle报错输出更多可诊断的堆栈信息,从而更加清晰的去定位一个Oracle的潜在BUG。你也可以使用诊断事件输出某些内存结构的详细信息,从而发现数据库存在的物理或者逻辑损坏。除了诊断事件,Oracle还可以对内存结构与物理结构进行DUMP,从而让我们可以分析和诊断复杂的系统故障、死锁等情况。

Oracle的TNS-12xxx是十分令人头疼的问题,有数百个BUG和这个系列的报错相关,而且还可能与网络、防火墙、操作系统等有很强的关联。要想分析此类问题,传统的方法就很难奏效了。Oracle的TRACE就可以帮你来更清晰的定位问题。在Oracle数据库中支持在服务端和客户端设置TRACE,客户端设置TRACE是最为常用的用法,一方面是因为可以避免在服务端输出大量的TRACE,影响生产系统,另外一方面是服务端主要是TRACE客户端与-的工作情况,而客户端则可以用于分析某个客户端与数据库监听和SERVER之间的所有行为。下面的案例就是一个客户通过SQL*PLUS连接数据库,十多分钟后就莫名其妙的断开了。想要分析问题在哪,最佳的方法还是做一个客户端的TRACE。

比如说上面的一个分析TNS-12571故障的TRACE文件就是通过在客户端的SQLNET.ORA里设置SUPPORT级别的TRACE参数后生成的。从上面的TRACE中可以清晰的看到19:12:58:895这个时间戳的时候SERVER和CLIENT还在FETCH数据,100毫秒后socket 512就报错了。这个错误是在nsdofls: sending NSPTDA packet时发生的。nsdofls是Oracle数据库中用来发送NSPTDA数据包的一个函数。NSPTDA数据包是一种网络服务数据包,用来传输数据和控制信息。这个动作是在网络通信过程中,将NSPTDA数据包从内存缓冲区写入到传输层的一个步骤。这个时候报错,大概率是和网络本身相关了。

我们再来看看详细的错误信息。实际上从上面的错误信息我们大体能够判断问题点了。各层错误代码的含义如下:

lns:网络服务错误的主要代码,表示在网络服务层发生的错误类型。ns=12571: TNS:packet writer failure

lns2:网络服务错误的次要代码,表示在网络服务层发生的错误的具体原因。ns2=12560: TNS:protocol adapter error

lnt:网络传输错误的主要代码,表示在网络传输层发生的错误类型。nt=530: TNS:packet receive failed

lnt2:网络传输错误的次要代码,表示在网络传输层发生的错误的具体原因。nt2=53: TNS:connection aborted

从上述情况我们可以判断是网络突然中断导致了上述故障。因此我们下一步的排查范围可以集中到防火墙、杀毒软件等问题上了。

说实在的,目前我们的很多数据库产品仅仅是把一个dbms做得相对完整了,而周边生态、工具、TRACE能力还相对很弱。对于目前尚未成熟的数据库而言,数据库自身的TRACE能力十分关键,一方面可以帮助用户分析与定位问题,另外一方面也可以为数据库厂商的售后服务,BUG分析提供强有力的支撑。构建一系列TRACE、DUMP工具,对于数据库厂商来说,难度也是不高的,大部分不需要对数据库核心代码做太多的优化和修改。TRACE、DUMP等是平时不开的,只有在需要分析诊断的时候才会临时打开,因此对数据库核心而言风险也较小。如果想为国产数据库添加TRACE能力而不知道怎么做,那也很容易,去学习下Oracle的功能就很容易设计出一套符合自己数据库产品的TRACE功能了。

来自 “ 白鳝的洞穴 ”, 原文作者:白鳝;原文链接:https://mp.weixin.qq.com/s/kJnjRgEsuPTI102tnuGAIA,如有侵权,请联系管理员删除。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mysql如何查询表的个数
下一篇:mysql如何删除唯一索引
相关文章

 发表评论

暂时没有评论,来抢沙发吧~