tkprof

 

首先,这篇文章分三部分进行总结,第一部分是对一些系统参数的查看,第二部分是对oracle trace的介绍,第三部分是讲解如何使用tkprof工具来对oracle trace文件进行分析。

1、查看系统参数

由于我个人比较喜欢使用pl/sql developer作为开发工具,哪怕是使用命令窗口,我也是直接使用的pl/sql developer的命令窗口,而不是使用oracle自带的sql*plus,所以下面的介绍都会是以pl/sql developer作为开发工具。下面都是进入命令窗口的操作:

Connected to Oracle Database 11g Enterprise Edition Release 11.1.0.7.0

Connected as apps

 

SQL> show parameter timed_statistics;

 

NAME                                 TYPE        VALUE

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

timed_statistics                     boolean     TRUE

 

SQL> show parameter sql_trace;

 

NAME                                 TYPE        VALUE

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

sql_trace                            boolean     FALSE

 

SQL> show parameter user_dump_dest;

 

NAME                                 TYPE        VALUE

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

user_dump_dest                       string      /d01/oracle/VIS/db/tech_st/11.1.0/admin/VIS_syfdemo/diag/rdbms/vis/VIS/trace

其实,想要查看系统参数情况,可以直接使用show parameter来查看全部,但是这里不需要,这里大概只要知道上面这三个就OK了。

2oracle trace讲解

oracle中的sql_trace主要是oracle提供的用于进行SQL跟踪的一种方法,是一个有效的辅助诊断工具。SQL_TRACE可以作为初始化参数在全局启用,也可以通过命令行在具体的session中启用。全局启用sql_trace这里暂且不论,下面介绍如何在session级启用sql_tracesession级启用命令如下:alter session set sql_trace = true;

很多时候,需要跟踪的不是当前用户的进程,而是其他用户,这时候可以通过系统提供的dbms_system.set_sql_trace_in_session来实现。set_sql_trace_in_session方法有三个参数,分别是sidserial#以及true(false),当为true时,表示启用跟踪,当为false时,表示跟踪关闭。sidserial#可以通过查找v$session视图找到,也可以参照下v$process视图。示例如下,在命令窗口执行:

SQL> exec dbms_system.set_sql_trace_in_session(10, 223, true) -- 启用

SQL> exec dbms_system.set_sql_trace_in_session(10. 223, false) -- 停止

还有一种称为“10046事件”的玩意,也是和sql_trace相关,本文不做介绍,可在网上查找相关资料。

以上跟踪生成的文件都位于user_dump_dest目录中,本文的前面已经介绍了找到该路径的方法,下面提供查找相应的跟踪文件名的代码:

SELECT d.value || '/' || lower(rtrim(i.instance,

                                     chr(0))) || '_ora_' || p.spid || '.trc' trace_file_name

  FROM (SELECT p.spid

          FROM sys.v$mystat  m,

               sys.v$session s,

               sys.v$process p

         WHERE m.statistic# = 1

           AND s.sid = m.sid

           AND p.addr = s.paddr) p,

       (SELECT t.instance

          FROM sys.v$thread    t,

               sys.v$parameter v

         WHERE v.name = 'thread'

           AND (v.value = 0 OR t.thread# = to_number(v.value))) i,

       (SELECT VALUE

          FROM sys.v$parameter

         WHERE NAME = 'user_dump_dest') d

3tkprof工具

tkprof是一个用于分析oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。tkprof的使用步骤如下(简易版,复杂的这里不做介绍):

1)在数据库级别上设置timed_statisticstrue,如果已经设置为true了,这里就不用设置,前文已经介绍了查看方法。至于这么设置,可能不同版本的oracle有点不一样,我在网上找到的有9i的设置可以执行:alter system set timed_statistics=true scope=both

2)启用sql_trace,这里可直接参考上面第二部分的内容,这里只介绍session级别的sql_trace。根据第二部分的操作,启用跟踪,并且找到跟踪文件。

3)找到跟踪文件以后,可以直接对文件进行处理,示例图如下图1

1tkprof示例图

进入跟踪文件所在的目录,然后执行tkprof命令,然后就可以查看生成的txt文件(文件自定义,我定义成txt)来分析,至于如何分析,以及tkprof命令的高级应用,这里不展开,因为我目前也不太熟悉,待到以后有经验了再来总结,网上有一篇总结的比较详细,可以参考:http://www.cnblogs.com/songdavid/articles/2075798.html

下面列出一些tkprof生成文件中常看到的几个性能方面的数字:

count:表示执行的数据库调用数量。

cpu:表示处理数据调用花去的CPU时间,以秒为单位。

elapsed:表示处理数据库调用花费的总时间,以秒为单位。

disk:表示物理读的数据块数量。

query:表示在consistent mode下从高速缓存逻辑读取的块数量。

current:表示在当前模式下从高速缓存逻辑读取的块数量。

rows:表示处理的数据行数量。

2tnsnames.ora配置出错

另外,题外话一下,我在本机装了一个oracle数据库,刚刚才第一次使用pl/sql develper连接,结果出现“ORA-12154 TNS无法解析指定的连接标识符 ”,由于对这方面的配置我还是有点了解的,仔细都检查了一边,并且如上图1所示,我也通过tnsping了一下,发现没啥问题,应该是tnsnames.ora配置文件配置有错,果然,打开一看,如上图2所示,居然在前面多了个空格,这是在赋值配置信息的时候直接复制进来,也没有太做注意,后来删除空格以后,问题解决了

请使用浏览器的分享功能分享到微信等