性能诊断:并发请求

Posted on June 17, 2009

当我面对一个并发请求优化的需求时,常常先问自己,为什么我又要面对这个情况?我们为什么不能在设计时就避免出现今天这种情况?我深刻理解优化是持续的过程,但是问题关键常常在于,程序在设计时并不考虑将来是否需要优化,或者就是留了一个很小的余地。

大家已经知道,Oracle Apps对各组件都可以进行相应的Trace(具体方式可自行搜索本站归档文章),即跟踪SQL执行情况。对于并发请求的跟踪方式曾经在《跟踪(Trace)并发请求》介绍过,操作方式很简单,就是在运行并发请求前先设置为“启用跟踪”。此处介绍一个实际的并发请求诊断案例。

操作步骤:

  1. 启用跟踪(并发 -> 方案 -> 定义)。在并发程序定义界面,找到目标并发程序,选上“启用跟踪”选项。
  2. 提交并发请求。
  3. 在UDUMP目录下找到对应的trace输出文件。

此时生成的trc文件有很多工具可以分析,根据目标不同选择适用的工具。这里介绍四种常用工具和方式:

  1. 使用tkprof。这是Oracle官方工具,简单、有效而强大。
    tkprof test_ora_1239_XZB_CR7665696.trc xzb.txt sort=fchela

    关键是这里的排序参数sort,比较常用的排序方式是按照消耗时间倒序。通常,查到消耗时间最大的那句SQL,基本上就找到了问题所在。

     
    这是第一句SQL的统计数据,看上去,解决了它,问题就基本解决了。

  2. 使用TVD$XTAT。由《TOP》作者开发,在性能诊断方面非常著名、实用的工具。具体使用可以参考工具说明文档,或者《TOP》一书中的介绍。

     
    这是一个概览界面,可以再深入分析各部分数据。

  3. 使用SwingBench Trace Analyzer。这是我所见的最傻瓜化的有GUI界面的trc分析工具,只要打开trc文件,你就可以知道问题出在哪里了。当然,傻瓜式自然有傻瓜式的局限,该工具的强大在于方便,也仅仅在于方便,强烈推荐给初级用户使用。

    本站以前推荐过这个工具,请参考文章:《Trace分析工具:SwingBench Trace Analyzer》。

  4. 使用Oracle Trace Analyzer。这个工具实际上是tkprof的另一个版本,以一种更简单、直观的方式来分析trc文件,同样的,也推荐给初级用户使用。

    本站以前推荐过这个工具,请参考文章:《Trace Analyzer》。

到此,你基本上已经找到了问题所在,至于如何让你的程序更有效率,则是另外更深的领域了。

在这个案例中,将运行时间从3小时降到6分钟,而所有修改的代码加起来不到20个字符。事实上,分析trc文件的工具本身并不是最重要的,重要的是找到问题症结所在,然后是你所采取的优化手段。有些时候,优化一句SQL就可以了,但是很多时候,可能需要重新设计你的程序,尤其是那些超大的SQL,它们真的有必要这样设计吗?

我一直说,优化是系统工程,大处从业务着手(如何设计功能和数据流直接关系到后面的优化余地),小处从架构着手(2-tier?N-tier?),微处从程序着手。业务(功能)顾问、技术顾问和DBA,都应该参与进来。当然,目前国内,这样具备各角色充分协作能力的团队很少,但是必须首先培养这样的意识。

Related Posts

  1. 跟踪(Trace) SSA (Self Service Applications)
  2. 跟踪(Trace)并发请求

» Filed Under E-Business Suite Print This Post Print This Post

Comments

Leave a Reply