Oracle实时慢日志收集和展示

Oracle怎样实时收集展示慢查询?

当网上搜相关问题或问一个身边的OracleDBA ,通常会有两种类型的答案

类似于MySQL的慢日志方案:Slowlog--logstash-->es-->MySQL-->web页

但Oracle没有现成的slowlog可以用。

所以我们先后采用尝试了以下三种方法。

方法一:定时收集awr报告

我们去年和黄老师一起尝试了定时生成awr报告,获取topSQL入库后,再收集展示的方法,这个方案需要对OracleAWR的缓存表理解得很深入,黄老师哼哼哧哧花了一个月时间,最终完成了统一收集,并通过web页展示,但总体效果不好。 主要缺点在于

方法二:Oracle中间件记录慢查询

去年年底的时候我们在写一个Oracle中件间,业务访问Oracle数据库需要连接到Proxy上,然后在Proxy上记录查询日志,这种方法理论上是完全可以的,但是当我去尝试去实现这个功能的时候发现很困难,因为我们采用了端口中转的方式,可以抓到客户端和服务端的通信包,但是不能对应上这些通信包的对应关系。这就导致计算SQL执行时间这一步没法实现。 然后我们架构组也在做jdbc层的中件间,这个是100%可以轻松实现的,但只适用于java程序,对于非java代码访问数据库就无能为力了 总结:收集得很准,但开发工作量大,需要很长的时间

方法三:定时直接读取正在执行的SQL

这个方案是我们年前做了一个Oracle长时间无响应SQL的报警功能(超过60秒没执行完的SQL会发钉钉报警),然后一次故障处理时,法爷说这个功能改一下刚好可以做慢查询收集整理。

于是我们快速的试了下这个方案(代价很小,花了半个小时就完成了,任务配置和报表展示)

  1. 新建存放慢SQL信息的表一个字典表/一个慢SQL表(5分钟)
  2. 配置一个每分钟去所有Oracle实例上收集的任务(15分钟)
  3. 配合已有CMDB信息,完成慢SQL和研发负责人的对应,写一个SQL (5分钟)
  4. 用这个SQL配置出来一张可展示的报表,设置成全体研发可见(5分钟) 总结:零开发工作,只要建个表,配置一个定时job和报表,就可以完成,效果不错

得到这样的一张这样的:实时展示Oracle慢查询的报表 Oracle慢查询的报表

– done

>> Home

51ak

2022/02/11

Categories: oracle slowlog dashboard Tags: 原创 精品

《数据库工作笔记》公众号
扫描上面的二维码,关注我的《数据库工作笔记》公众号