使用DBMS_HPROF评测PL/SQL代码性能(下)

 

Dbms_hprofOracle11g推出的新特性,作用是分析pl/sql代码执行过程中性能评测分析。在本系列的前篇(http://space.itpub.net/17203031/viewspace-702694)中,我们已经介绍如何使用dbms_hprof进行性能测定以及结果分析。

 

 

使用dbms_hprof进行分析的结果数据可以以两种方式进行展现。一种是dbmshp_*数据系列表中,而另一种是生成html格式的报表文件。本篇中我们一起来尝试分析结果。

 

 

1、  跟踪文件trace file中结果分析

 

上篇中已经介绍过,对执行过程进行记录的文件是跟踪文件。其中保存了执行的所有原始过程信息。但是,我们称这种跟踪文件为原始结果文件,是不易进行阅读的。下面是一个跟踪文件片段。

 

 

P#V PLSHPROF Internal Version 1.0

P#! PL/SQL Timer Started

P#C PLSQL."".""."__plsql_vm"

P#X 5

P#C PLSQL."".""."__anonymous_block"

P#X 24

P#C PLSQL."SYS"."DBMS_TRANSACTION"::11."LOCAL_TRANSACTION_ID"#5e9fb91efaec8f19

(篇幅原因,省略…….

 

Trace文件格式是一种符号记录方式,P#??类似于一种操作类型,后面跟着的就是操作的参数。下面是一些常用的操作类型。

 

指示符

含义

P#V

PLSHPROF版本信息显示,通常出现在文件头;

P#C

调用子程序,子过程;

P#R

从调用子程序中返回;

P#X

前后事件之间的时间延迟消耗;

P#

注释信息;

 

每种指示符类型对应不同的参数显示方式。P#CP#R通常是配对出现的。这些语句中,只有P#C的参数类型比较复杂,如下所示:

 

ü        Namespace:对应调用子程序的名字空间;

ü        PL/SQL代码的Module名称;

ü        PL/SQL代码的类型;

ü        调用子程序的名称;

ü        调用子程序的16进制hash计算值;

ü        调用子程序的行号;

 

例如我们trace文件中的最后一条P#C的含义:

 

 

P#C PLSQL."SYS"."DBMS_TRANSACTION"::11."LOCAL_TRANSACTION_ID"#5e9fb91efaec8f19

 

 

调用PLSQL命名空间下的sys.dbms_transaction模块。该模块的的内部类型编号为11。要调用方法LOCAL_TRANSACTION_ID子程序。该子程序的MD5内部哈希值16进制表示为“#5e9fb91efaec8f19

 

各种语句中,P#C的参数是最多的,其他都可以方便的进行猜测。

 

 

2、常见内部方法名称

 

所有的程序都不是独立运行的。PL/SQL是建立在Oracle PL/SQL引擎和SQL引擎基础上的一种程序语言。

 

所以,我们在调用PL/SQL代码块或者存储过程时候,就会遇到内部的方法和机制。在我们实验的程序中,也是遇到过的。

 

 

SQL> select module, type, function from dbmshp_function_info;

 

MODULE               TYPE                 FUNCTION

-------------------- -------------------- ------------------------------

                                          __anonymous_block

                                          __plsql_vm

DBMS_HPROF           PACKAGE BODY         STOP_PROFILING

DBMS_TRANSACTION     PACKAGE BODY         LOCAL_TRANSACTION_ID

P_PROF_TEST          PROCEDURE            P_PROF_TEST

P_PROF_TEST          PROCEDURE            P_PROF_TEST.P1

P_PROF_TEST          PROCEDURE            P_PROF_TEST.P2

P_PROF_TEST          PROCEDURE            __static_sql_exec_line13

P_PROF_TEST          PROCEDURE            __static_sql_exec_line6

 

9 rows selected

 

 

标注为红色的都是内部执行的代码和函数。下面介绍一些特殊的函数名称方法。

 

Tracked Operation

Function Name

Namespace

调用PL/SQL虚拟机

_plsql_vm

PL/SQL

PL/SQL匿名块

_anonymous_block

PL/SQL

package初始化块

_pkg_block

PL/SQL

在第n行调用的静态sql代码

_static_sql_exec_lineline#

SQL

在第n行调用的动态sql代码

_dyn_sql_exec_lineline#

SQL

SQL Fetch操作

_sql_fetch_lineline#

SQL

 

 

3、常见报告结构分析

 

此处我们以生成的html格式报表为例进行分析。首先我们打开实验生成m.html格式报告。可以看到生成一共若干个报告链接,分别从不同角度进行性能排序。

 

17203031_201107212059591.jpg

 

各种类型的分析报告中,我们可以看出主要进行排序的依据就是消耗时间的多少。不同报表分别从不同的SubtreeFunctionModualFunction Call等方面进行排序。

 

进入报告“Function Elapsed Time (microsecs) Data sorted by Total Function Elapsed Time (microsecs)”,可以看到不同函数的调用过程测试和执行时间。

 

17203031_201107212100091.jpg

 

明显可见,是两个静态sql执行代码执行次数和消耗时间最多。进入line6的记录,可以看出该sql语句的详细上下文对应关系。

 

17203031_201107212100161.jpg

 

对一个代码方法,报告会列出该方法的调用方法和被调用方法,并且依次列出相互之间的时间消耗情况比例。

 

 

4、结论

 

本篇我们着重分析了DBMS_HPROF程序包的结果集合。Oracle PL/SQL代码是我们经常使用的工具,使用dbms_hprof可以一定程度上帮助我们进行性能调试。不过,笔者个人感觉该包的方法集中在消耗时间上,过于偏颇。如果能够将CPU和各类型空间消耗一并加入,应该会是一个很成熟的产品。

 

fj.png1.JPG

fj.png2.JPG

fj.png3.JPG

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-702785/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/17203031/viewspace-702785/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值