IT技术博客大学习 共学习 共进步

使用Oracle正则表达式监控应用到数据库的连接情况

NinGoo.net 2009-10-19 23:26:18 浏览 4,265 次

    Oracle从10g开始支持正则表达式,在一些特殊的应用场景下,可以发挥超乎想象的便利。

    通过v$session,可以监控应用服务器到数据库的连接的情况。假设应用服务器的名字都是有规律的,典型的如字母+数字+.+后缀的格式,例如app123.idc1表示位于idc1机房的app应用的123机器。当然,机器名的规则要根据具体的场景来分析得出,本文以上述规则来演示如何利用正则表达式来得到每组不同的应用服务器到数据库的连接情况。

    对于数据库来说,可能有多组不同的应用服务器需要连接。典型的监控指标可以包括:每组应用服务器的机器数,每组应用服务器当前总的连接数,每组应用服务器中单台最大的连接数,每组应用服务器中单台最少的连接数。通过如下的sql语句,使用正则表达式,可以轻松获取上述四个指标:

以下是代码片段:

select b.machine,
         count(*) machine_nums,
         b.cnt total_sessions,
         max(a.cnt) max_sessions,
         min(a.cnt) min_sessions
from
    (select machine,count(*) cnt
       from v$session
      group by machine) a,
    (select regexp_replace(regexp_replace(machine,'[0-9]','#'),'#+','#') machine,
            count(*) cnt
       from v$session
      group by  regexp_replace(regexp_replace(machine,'[0-9]','#'),'#+','#')
     ) b
where regexp_replace(regexp_replace(a.machine,'[0-9]','#'),'#+','#')=b.machine
group by b.machine,b.cnt

以下是代码片段:

MACHINE        MACHINE_NUMS TOTAL_SESSIONS MAX_SESSIONS MIN_SESSIONS
--------------- ----------- -------------- ------------ ------------
db#.idc#                  1            22            22           22
test#.idc#                2            10             5            5
appa#.idc#               30           166            10            5
appb#.idc#               17            18             2            1

    上面的sql中,使用了正则表达式函数REGEXP_REPLACE将数字替换成#,以方便对同组应用的机器进行分组统计。只要根据相应的规则进行修改,就可以适用到不同的场景。然后利用该sql固定时间如五分钟来采集数据,就可以得到趋势展示,绘成图形,直观的分析应用服务器到数据库的连接情况。

建议继续学习

  1. Mysql监控指南 (阅读 21,102)
  2. 批量添加主机到cacti+nagios的监控报警系统中 (阅读 14,681)
  3. 我常用的主机监控shell脚本 (阅读 13,102)
  4. 7 天打造前端性能监控系统 (阅读 11,062)
  5. 如何监控HP服务器硬件状态 (阅读 10,505)
  6. Cacti 添加 Nginx 监控 (阅读 10,362)
  7. Linux下三种常用的流量监控软件对比 (阅读 9,982)
  8. Cacti 添加 Memcached 监控 (阅读 9,162)
  9. Cacti 添加 Apache 监控 (阅读 8,983)
  10. 你应该知道的16个Linux服务器监控命令 (阅读 8,407)