架构设计中关于配置项放在哪里?

来源:互联网 发布:mac怎么下载photoshop 编辑:程序博客网 时间:2024/06/09 06:09

    近期看数据库吓了一跳,负载是以前的3倍。8点到12点有一条SQL执行了两千万次,占用数据库负载30%。我看了以前的数据库报告,次数也是上千万次,不过平均执行时间是0.00s,现在变成0.01s。就是这么一点点变化导致高峰期数据库CPU从50%上升到80%,这是一个巨大隐患,这条SQL正是系统读取配置项的操作。如果这条SQL从0.01s变为0.02s,完全有可能,因为配置表是不断在增加的。

    要各开发组查找,发现完全不行,有很多代码调用,查循环调用可操作性太差,从数据库层面上可以看到一些绑定变量的信息,不过要执行很多次:

select value_string,count(1)
  from dba_hist_sqlbind s
 where sql_id = 'caxnkstk3wk65'
 group by s.value_string
 order by count(1) desc;

   经过一番努力,终于找到两个功能用了spring AOP查配置项。第一个功能是记录请求记录,每次都要读取配置项对请求过滤。第二个功能是对流程的监控,流程上报,撤回都会查一下配置项。这样的功能需求无论配置项在数据库中,还是在内存数据库(coherence或redis)中,都是不可承受之痛。

    优化建议:这两个功能非业务功能,是审计功能,完全没有必要每次都读取,配置项写到xml文件中,可以采取热加载。