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 count parse count应尽量接近1,如果太高的话,SQL会进行不必要的reparse。要检查Pro*C程序的MAXOPENCURSORS是不是太低了,或不适当的使用的RELEASE_CURSOR选项

rows Fetch/Fetch Fetch 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

1. query+current/rows 平均每行所需的block数,太大的话(超过20)SQL语句效率太低

2. Parse count/Execute count parse count应尽量接近1,如果太高的话,SQL会进行不必要的reparse。

要检查Pro*C程序的MAXOPENCURSORS是不是太低了,或不适当的使用的RELEASE_CURSOR选项

3. rows Fetch/Fetch Fetch Array的大小,太小的话就没有充分利用批量Fetch的功能,

增加了数据在客户端和服务器之间的往返次数。在Pro*C中可以用prefetch=NN,Java/JDBC中可调用SETROWPREFETCH,

在PL/SQL中可以用BULK COLLECT,SQLPLUS中的arraysize(缺省是15)

4. disk/query+current 磁盘IO所占逻辑IO的比例,太大的话有可能是db_buffer_size过小(也跟SQL的具体特性有关)

5. elapsed/cpu 太大表示执行过程中花费了大量的时间等待某种资源

6. cpu OR elapsed 太大表示执行时间过长,或消耗了大量的CPU时间,应该考虑优化

7. 执行计划中的Rows 表示在该处理阶段所访问的行数,要尽量

mysql sql trace_SQL_TRACE及 Tkprof用法以及问题分析相关推荐

  1. Mysql Sql查询之Limit 用法

    面试题? 你知道mysql 中limit的用法吗? 你是怎么使用的? 在一条sql语句中 limit 1 表示什么,limit 1,3 又是什么意思? 这道题本人答的很烂..... 在mysql中,l ...

  2. php mysql sql mode_Mysql之SQL Mode用法详解_MySQL

    一.Mysql SQL Mode简介 通常来说MySQL服务器能够工作在不同的SQL模式下,并能针对不同的客户端以不同的方式应用这些模式.这样,应用程序就能对服务器操作进行量身定制以满足自己的需求.这 ...

  3. mysql 实时聚合分析,mysql累积聚合原理与用法实例分析

    本文实例讲述了mysql累积聚合原理与用法.分享给大家供大家参考,具体如下: 累积聚合为聚合从序列内第一个元素到当前元素的数据,如为每个员工返回每月开始到现在累积的订单数量和平均订单数量 行号问题有两 ...

  4. mysql sql语句大全

    1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份 ...

  5. SQL语句 SELECT LIKE用法详解

    在SQL结构化查询语言中,LIKE语句有着至关重要的作用. LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用 ...

  6. oracle rds 运维服务_从运维的角度分析使用阿里云数据库RDS的必要性–你不应该在阿里云上使用自建的MySQL/SQL Server/Oracle/PostgreSQL数据库...

    开宗明义,你不应该在阿里云上使用自建的MySQL or SQL Server数据库,对了,还有Oracle or PostgreSQL数据库. 云数据库 RDS(Relational Database ...

  7. mysql sql归类_带有归类SQL强制转换SQL Server归类介绍

    mysql sql归类 SQL Server collation refers to a set of character and character encoding rules, and infl ...

  8. mysql sql长度限制_SQL限制– MySQL限制

    mysql sql长度限制 When we work with a huge amount of data there are cases when we need to restrict the n ...

  9. 详解SQL Server STUFF的用法

    GPS平台.网站建设.软件开发.系统运维,找森大网络科技! https://cnsendnet.taobao.com 来自森大科技官方博客 http://www.cnsendblog.com/inde ...

  10. Mysql coalesce()函数认识和用法

    Mysql coalesce()函数认识和用法 coalesce()解释:返回参数中的第一个非空表达式(从左向右):  鉴于在 mysql中没有nvl()函数, 我们用coalesce()来代替.   ...

最新文章

  1. Java Day02-2(字符串)
  2. linux shell expect 处理 passwd 交互
  3. php下正则替换多个br /
  4. python中循环结构关键字_Python的循环结构,也简单!
  5. java高性能序列化_Java最佳实践–高性能序列化
  6. centos mysql无法启动 sock_【零基础学云计算】MYSQL的主从复制、读写分离
  7. 这样让你的采集内容变原创seo出来的伪原创
  8. 纽迪瑞科技入选快公司FastCompany最具创新力榜单:科技与制造TOP30
  9. 当下移动互联网的6个泡沫,快要破了!
  10. 工信部,映射,映射端口,热备,磁盘,虚拟磁盘,冗余,磁盘阵列技术,廉价冗余磁盘阵列 ,RAID 0,RAID1 ,RAID 3,RAID 5,RAID 6 名词解释
  11. 解决mysql 1864 主从错误
  12. 知识管理选石墨、语雀 or Baklib
  13. 钢琴家软件里曲谱的数据为什么更新不了_王者荣耀安卓与IOS互通?IOS恐怕得到不少利益,不然这事成不了...
  14. vb-pcode程序破解常用的三个操作码
  15. 团队管理:新业务团队如何结合绩效来度量开发目标
  16. Learning and Meta-Learning of Stochastic Advection-Diffusion-Reaction Systems from Sparse Measuremen
  17. 悟空crm客户管理,KSOA系统集成呼叫中心系统融合
  18. 条码打印四 - 1.打印管理库函数Winspool.drv
  19. Tomcat的安装和启动
  20. Symfony学习笔记之翻译组件-----translation总结

热门文章

  1. 算法导论 斐波那契堆
  2. awr报告分析 mysql_mysql-awr报告
  3. 计算机课程教学调查问卷,计算机基础课程调查问卷
  4. 十折交叉验证和混淆矩阵
  5. python怎么下载numpy?
  6. android applock 源码,AppLock | F-Droid - Free and Open Source Android App Repository
  7. 脚本工具之下载M3U8文件类型的完整视频
  8. 使用librdkafka
  9. h5/uni-app打开手机app,没有则跳转到商店下载
  10. XCT学习笔记_X射线