系统性能事务监控(监控数据库耗时等)

来源:互联网 发布:linux退出for循环 编辑:程序博客网 时间:2024/06/08 17:31

系统性能事务监控(监控数据库耗时等)

很多原因都可能导致系统、接口、网站运行缓慢,比较常见的就是在数据库操作(查询、修改、统计等)耗时太多。一些不必要的或者没有优化好的查询会影响系统访问的速度。

如果我们的系统比较复杂,比如涉及到第三方接口、文件服务器、数据库,以及分布式的各个特性,那么最好对单独的事务进行时间统计,以便发现问题的时候可以迅速定位。

通过对各个不同事务的定向耗时监控,我可以及时的看到是否数据库原因导致了系统缓慢、还是因为第三方接口的响应导致了系统缓慢。在生产环境查找问题的时候非常有效,因为很多的应用在生产环境和开发环境中的表现完全不同。

 

1、影响性能的数据库情况

  查询的数据根本没有被使用,比如一张表中有60个字段,通常习惯用select* 将所有字段查出,而实际使用的的字段可能只有10个;

  查询时未使用索引;

  单次查询可以实现的功能却做了多次查询;

慢且复杂的查询;

频繁修改有大索引的数据;

 

2、事务监控的方式

根据项目的事情情况,可以将各个事务的监控放到页面的前台,也可以放在系统的后端,比如数据库中。

放在前端的场景一般适用于撇清楚责任,比如我们对外提供的很多搜索引擎接口,都明确标注了搜索耗时,这样当第三方平台响应变慢的时候,能够清楚的查看是否是我们的搜索引擎原因导致的;

    放在后端的一般是内部监控或者使用的,可以通过记录log或者存放在数据库中,放在log文件中一般是临时性的,比如系统刚上线,可能需要监控一段时间;放在数据库中的一般是要长期监控的,而且可能要横向比较系统的耗时,适用于在复杂环境下的监控。

    有一次,我们的支付校验平台的效率下降到了正常情况下的30%,虽然用户还没有感觉出问题,但是我们马上展开了技术排除。花费了大约1周才解决问题(底层硬件导致),用户大概第四天才感觉系统变慢。因此系统内部事务监控对提前发现问题有一定的效果;

3、事务耗时记录的方法

    记录一下我用过的事务时间记录方法

1、 面向切面的记录方法

如果系统中有使用spring,可以很方便的使用拦截器实现这个事务的耗时;

2、 标准模块套用

利用JAVA动态代理技术,自己开发模块,把需要运行的事务放到代理中运行,能够很方便的记录耗时的数据,这个思想也是面向切面的记录方法;只是一个利用spring的现成的方法,一个是自己开发的模块;

3、 模块的运行时间记录(打桩)

这个事我最早接触的一种方法,非常简单,也很粗暴。在需要监控的模块中,编写大量的时间运算代码,使用一些相对比较小的平台,能够对一些模块进行非常细致的监控。一般情况不推荐时间,但是如果确实只是小平台,那就用一用吧。

4、 利用btrace进行第三方记录

Btrace这个工具,可以作为插件使用,也可以编写代码使用,能够作为代码热替换技术使用,一般是系统有了状况再使用。

    从个人的使用情况来看,我一般倾向于使用1、2中方法;第3种方法在单位测试的时候可以用用;第4种方法一般用在接收别人移交过来的老系统上;

这些方法,不是特别高深的技术,但是他们能够让我们指导开发的时候,多一些关于效率和性能方面的思考,如果是交互式平台,能够在复杂的跨部门口水战中,占据天然的优势;对开发人员开始,一开始就能关注效率;能够避免系统一上线就崩溃;从长期来看,能够让我们的系统运行的又快又好!

 

0 0
原创粉丝点击