Oracle SQL跟踪方法_Oracle数据库SQL语句跟踪与tkprof trace分析
Oracle SQL跟踪方法_Oracle数据库SQL语句跟踪与tkprof trace分析
[color=navy]在日常数据库维护中,经常会对SQL进行分析与跟踪,现在介绍oracle数据库常用sql跟踪方法与tkprof trace的分析,附件有PDF版的下载。
[color=#333399]1[color=#333399]、10046[color=#333399]事件跟踪
10046 事件主要用来跟踪SQL语句,它并不是ORACLE 官方提供给用户的命令,在官方文档上也找不到事件的说明信息。 但是用的却比较多,因为10046事件获取SQL的信息比SQL_TRACE 更多。 更有利于我们对SQL的判断。
[color=#333399]1)[color=#333399]10046跟踪[color=#333399]级别介绍
Level 0 停用SQL跟踪,相当于SQL_TRACE=FALSE
Level 1 标准SQL跟踪,相当于SQL_TRACE=TRUE
Level 4 在level 1的基础上增加绑定变量的信息
Level 8 在level 1的基础上增加等待事件的信息
Level 12 在level 1的基础上增加绑定变量和等待事件的信息
[color=#333399]2)[color=#333399]打开10046跟踪
GRANT ALTER SESSION TO USER; --必须具有alter session权限
alter session set events '10046 trace name context forever,level 12';--当前用户设置
或者
在init.ora文件中插入下面的行:
event = 10046 trace name context forever,level 12;
--为全局设置
[color=#333399]3)[color=#333399]关闭10046跟踪:
alter session set events '10046 trace name context off';--关闭用户跟踪
该事件收集的信息也是放在trace文件中,查看trace文件的方法可以使用TKPROF 工具。
注:sql_trace和10046设置代码跟踪只能针对本会话或者系统级进行会话跟踪,具体设置某个非本会话的跟踪需要采用oradebug或者dbms_system.set_ev或者dbms_monitor.session_trace_enable。下面举例说明
详细请下载PDF格式:Oracle SQL跟踪方法_Oracle数据库SQL语句跟踪与tkprof trace分析
293
[color=#333399]4)[color=#333399]使用oradebug 生成10046 事件
[color=#333399]2、SQL语句[color=#333399]跟踪[color=#333399]sql_trace
[color=#333399]3、使用oradebug[color=#333399]跟踪SQL
[color=#333399]4、dbms_system(必须用sys用户执行)
[color=#333399]5、dbms_monitor
[color=#333399]6、dbms_support
[color=#333399]7、获得跟踪文件
[color=#333399]8、查看跟踪级别
[color=#333399]9、[color=#333399]TKPROF 工具[color=#333399]的使用方法
Tkprof是一个用于分析Oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具
如果一个系统的执行效率比较低,一个比较好的方法是通过跟踪用户的会话并且使用Tkprof工具使用排序功能格式化输出,从而找出有问题的SQL语句。
[color=#333399]9.1)Tkprof工具常用参数介绍:
filename1 指定的输入文件,可以是多个文件联起来。
Filename2 格式化输出文件。
SORT 在输出到输出文件前,先进程排序。如果省去,则按照实际使用的顺序输出到文件中。一般使用fchela elapsed time fetching。
PRINT 只列出输出文件的第一个integer 的SQL语句。默认为所有的SQL语句。
SYS 禁止或启用 将SYS用户所发布的SQL语句列表到输出文件中。
TABLE 在输出到输出文件前,用于存放临时表的用户名和表名。
EXPLAIN 对每条SQL 语句确定其执行规划。并将执行规划写到输出文件中。
AGGREGATE 如果= NO ,则不对多个相同的SQL进行汇总。
INSERT SQL 语句的一种,用于将跟踪文件的统计信息存储到数据库中。在TKPROF创建脚本后,在将结果输入到数据库中。
其中比较有用的一个排序选项是fchela,即按照elapsed time fetching来对分析的结果排序(记住要设置初始化参数timed_statistics=true),生成的文件将把最消耗时间的sql放在最前面显示。另外一个有用的参数就是sys,这个参数设置为no可以阻止所有以sys用户执行的sql被显示出来,这样可以减少分析出来的文件的复杂度,便于查看。
[color=#333399]9.2)Tkprof命令输出的相关参数说明:
首先解释输出文件中列的含义:
CALL:每次SQL语句的处理都分成三个部分
Parse:这步将SQL语句转换成执行计划,包括检查是否有正确的授权和所需要用到的表、列以及其他引用到的对象是否存在。
Execute:这步是真正的由Oracle来执行语句。对于insert、update、delete操作,这步会修改数据,对于select操作,这步就只是确定选择的记录。
Fetch:返回查询语句中所获得的记录,这步只有select语句会被执行。
CPU:这个语句对于所有的parse、execute、fetch所消耗的cpu的时间,以秒为单位。
ELAPSED:这个语句所有消耗在parse、execute、fetch的总的时间。
DISK:从磁盘上的数据文件中物理读取的块的数量。一般来说更想知道的是正在从缓存中读取的数据而不是从磁盘上读取的数据。
QUERY:在一致性读模式下,所有parse、execute、fetch所获得的buffer的数量。一致性模式的buffer是用于给一个长时间运行的事务提供一个一致性读的快照,缓存实际上在头部存储了状态。
COUNT:这个语句被parse、execute、fetch的次数。
CURRENT:在current模式下所获得的buffer的数量。一般在current模式下执行insert、update、delete操作都会获取buffer。在current模式下如果在高速缓存区发现有新的缓存足够给当前的事务使用,则这些buffer都会被读入了缓存区中。
ROWS: 所有SQL语句返回的记录数目,但是不包括子查询中返回的记录数目。对于select语句,返回记录是在fetch这步,对于insert、update、delete操作,返回记录则是在execute这步。
[color=#333399]9.3)Tkprof使用介绍
--使用tkprof分析trace文件
tkprof /oracle/admin/trace/orcdb_ora_1380.trc /oracle/orcdb_ora_1380.trc aggregate=yes sys=no waits=yes sort=fchela
这样,格式化的后就输出到/oracle/orcdb_ora_1380.trc中。
[color=#333399]9.4)Tkprof与SQL_TRACE结合分析CPU占用比较高的SQL
[color=#333399]9.5)tkprof参数介绍
C:\Users\Administrator.ZGC-20120424GFY>tkprof
Usage: tkprof tracefile outputfile [explain= ] [table= ]
[print= ] [insert= ] [sys= ] [sort= ]
table=schema.tablename Use 'schema.tablename' with 'explain=' option.
explain=user/password Connect to ORACLE and issue EXPLAIN PLAN.
print=integer List only the first 'integer' SQL statements.
aggregate=yes|no
insert=filename List SQL statements and data inside INSERT statements.
sys=no TKPROF does not list SQL statements run as user SYS.
record=filename Record non-recursive statements found in the trace file.
waits=yes|no Record summary for any wait events found in the trace file.
sort=option Set of zero or more of the following sort options:
prscnt number of times parse was called
prscpu cpu time parsing
prsela elapsed time parsing
prsdsk number of disk reads during parse
prsqry number of buffers for consistent read during parse
prscu number of buffers for current read during parse
prsmis number of misses in library cache during parse
execnt number of execute was called
execpu cpu time spent executing
exeela elapsed time executing
exedsk number of disk reads during execute
exeqry number of buffers for consistent read during execute
execu number of buffers for current read during execute
exerow number of rows processed during execute
exemis number of library cache misses during execute
fchcnt number of times fetch was called
fchcpu cpu time spent fetching
fchela elapsed time fetching
fchdsk number of disk reads during fetch
fchqry number of buffers for consistent read during fetch
fchcu number of buffers for current read during fetch
fchrow number of rows fetched
userid userid of user that parsed the cursor
详细请下载PDF格式:Oracle SQL跟踪方法_Oracle数据库SQL语句跟踪与tkprof trace分析