打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ORACLE中SQL TRACE和TKPROF的使用
ORACLE中SQL TRACE和TKPROF的使用
SQL TRACE 和 tkprof sql语句分析工具
一 SQL TRACE 使用方法:
1.初始化sql trace
参数:
timed_statistics=true  允许sql trace 和其他的一些动态性能视图收集与时间有关的参数、
SQL>alter session set titimed_statistics=true
max_dump_file_size=500 指定跟踪文件的大小
SQL> alter system set max_dump_file_size=500;
user_dump_dest  指定跟踪文件的路径
SQL> alter system set user_dump_dest=/oracle/oracle/diag/rdbms/orcl/orcl/trace;
2.为一个session 启动sql trace
2.1命令方式
alter session set sql_trace=true
2.2 通过存储过程启动sqltrace
select sid,serial#,osuser from v$session;
SID    SERIAL# OSUSER
168         1  oracle
execute rdbms_system.set_sql_trace_in_session (168 ,1,true);
3.停止一个sql trace 会话
3.1 命令方式
alter session set sql_trace=false
3.2 储存过程的方式
execute rdbms_system.set_sql_trace_in_session (168 ,1,false);
4. 为整个实例启动SQL trace (一般消耗系统性能较高,不会用)
alter system set sql_trace=true scope=spfile
从新启动数据库
5. 停止一个实例的sql trace
alter system set sql_trace=flase scope=spfile
启动sql trace 之后收集的信息包括
1.解析、执行、返回数据的次数
2.cpu和执行命令的时间
3.物理读和逻辑读的次数
4.系统处理的记录数
5.库缓冲区错误
二 TKPROF的使用
tkprof 的目的是将sql trace 生成的跟踪文件转换成用户可以理解的格式
1. 格式
tkprof inputfile outputfile [optional | parameters ]
参数和选项:
explain=user/password 执行explain命令将结果放在SQL trace的输出文件中
table=schema.table 指定tkprof处理sql trace文件时临时表的模式名和表名
insert=scriptfile 创建一个文件名为scriptfile的文件,包含了tkprof存放的输出sql语句
sys=[yes/no] 确定系统是否列出由sys用户产生或重调的sql语句
print=number 将仅生成排序后的第一条sql语句的输出结果
record=recordfile 这个选项创建一个名为recorderfile的文件,包含了所有重调用的sql语句
sort=sort_option 按照指定的方法对sql trace的输出文件进行降序排序
sort_option 选项
prscnt  按解析次数排序
prscpu  按解析所花cpu时间排序
prsela  按解析所经历的时间排序
prsdsk  按解析时物理的读操作的次数排序
prsqry  按解析时以一致模式读取数据块的次数排序
prscu   按解析时以当前读取数据块的次数进行排序
execnt  按执行次数排序
execpu  按执行时花的cpu时间排序
exeela  按执行所经历的时间排序
exedsk  按执行时物理读操作的次数排序
exeqry  按执行时以一致模式读取数据块的次数排序
execu   按执行时以当前模式读取数据块的次数排序
exerow  按执行时处理的记录的次数进行排序
exemis  按执行时库缓冲区的错误排序
fchcnt  按返回数据的次数进行排序
fchcpu  按返回数据cpu所花时间排序
fchela  按返回数据所经历的时间排序
fchdsk  按返回数据时的物理读操作的次数排序
fchqry  按返回数据时一致模式读取数据块的次数排序
fchcu   按返回数据时当前模式读取数据块的次数排序
fchrow  按返回数据时处理的数据数量排序
三 sql trace 的输出结果
count:提供OCI过程的执行次数
CPU:  提供执行CPU所花的时间单位是秒
Elapsed:提供了执行时所花的时间。单位是秒。这个参数值等于用户响应时间
Disk:提供缓存区从磁盘读取的次数
Query:以一致性模式从缓存区获得数据的次数
Current:以当前模式从缓存区获得数据的次数
ROWs: 返回调用或执行调用时,处理的数据行的数量。
在report.txt文件头有各个数据的解释,根据以下一些指标可以分析一下SQL的执行性能: query+current/rows平均每行所需的block数,太大的话(超过20)SQL语句效率太低
Parse count/Execute countparse count应尽量接近1,如果太高的话,SQL会进行不必要的reparse。要检查Pro*C程序的MAXOPENCURSORS是不是太低了,或不适当的使用的RELEASE_CURSOR选项
rows Fetch/FetchFetch Array的大小,太小的话就没有充分利用批量Fetch的功能,增加了数据在客户端和服务器之间的往返次数。在Pro*C中可以用prefetch=NN,Java/JDBC中可调用SETROWPREFETCH,在PL/SQL中可以用BULK COLLECT,SQLPLUS中的arraysize(缺省是15)
disk/query+current磁盘IO所占逻辑IO的比例,太大的话有可能是db_buffer_size过小(也跟SQL的具体特性有关)
elapsed/cpu太大表示执行过程中花费了大量的时间等待某种资源
cpu  OR  elapsed太大表示执行时间过长,或消耗了大量的CPU时间,应该考虑优化
执行计划中的Rows表示在该处理阶段所访问的行数,要尽量减少
四:举例:
sql>alter session set sql_trace=true
SQL>select * from dba_users;
SQL>show parameter user_dump_dest
user_dump_dest     string  /oracle/oracle/diag/rdbms/orcl/orcl/trace
SQL>exit
cd /oracle/oracle/diag/rdbms/orcl/orcl/trace
tkprof orcl_ora_11066.trc /oracle/oracle/trace1.out sys=yes
vi trace.out
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
sql trace基础
使用SQL TRACE 实用工具和TKPROF
Oracle 10046跟踪事件使用方法
SQL_TRACE的基本用法
如何做trace 每一步 每一行
【深度长文】循序渐进解读Oracle AWR性能分析报告
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服