转:使用 Tkprof 分析 ORACLE 跟踪文件

【README】 昨天在验证oracle 数据库性能的时候,查询日志中 打出了 exec time , fetch time 不懂什么意思,所以就记录了下; 

A 表 680w, count 耗时5秒;

B表 2013w, count 耗时10秒; 

A inner join B 连表查询 100 个客户, 耗时  0.036/0.756秒 exec/fetch 返回 470条记录; 

A inner join B 连表查询 500 个客户, 耗时  0.138/3.382秒 exec/fetch 返回 2300条记录; 

 

转自: https://blog.csdn.net/tianlesoftware/article/details/5632003 

Tkprof是一个用于分析Oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是通过跟踪用户的会话并且使用Tkprof工具使用排序功能格式化输出,从而找出有问题的SQL语句。


一. TKPROF 命令语法:
TKPROF  filename1, filename2 [ SORT  = [ opion][,option] ]
  [  PRINT = integer ]
  [ AGGREGATE  = [ YES | NO ] ]
  [ INSERT = filename3 ]
  [ SYS = [ YES | NO ]  ]
  [  [ TABLE = schema.table ] | [ EXPLAIN = user/password ]  ]
  [  RECORD = filename ]

 

相关说明:
filename1  指定的输入文件,可以是多个文件联起来。
Filename2  格式化输出文件。
SORT     在输出到输出文件前,先进程排序。如果省去,则按照实际使用的顺序输出到文件中。排序选项有以下多种:
  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


PRINT        只列出输出文件的第一个integer 的SQL语句。默认为所有的SQL语句。
AGGREGATE    如果= NO ,则不对多个相同的SQL进行汇总。
INSERT       SQL 语句的一种,用于将跟踪文件的统计信息存储到数据库中。在TKPROF创建脚本后,在将结果输入到数据库中。
SYS         禁止或启用 将SYS用户所发布的SQL语句列表到输出文件中。
TABLE       在输出到输出文件前,用于存放临时表的用户名和表名。
EXPLAIN     对每条SQL 语句确定其执行规划。并将执行规划写到输出文件中。

其中比较有用的一个排序选项是fchela,即按照elapsed time fetching来对分析的结果排序(记住要设置初始化参数timed_statistics=true),生成的文件将把最消耗时间的sql放在最前面显示。另外一个有用的参数就是sys,这个参数设置为no可以阻止所有以sys用户执行的sql被显示出来,这样可以减少分析出来的文件的复杂度,便于查看。


二. 对Tkprof命令输出的解释:


首先解释输出文件中列的含义:
CALL:每次SQL语句的处理都分成三个部分
Parse:这步将SQL语句转换成执行计划,包括检查是否有正确的授权和所需要用到的表、列以及其他引用到的对象是否存在。
Execute:这步是真正的由Oracle来执行语句。对于insert、update、delete操作,这步会修改数据,对于select操作,这步就只是确定选择的记录。
Fetch:返回查询语句中所获得的记录,这步只有select语句会被执行。

COUNT:这个语句被parse、execute、fetch的次数。
CPU:这个语句对于所有的parse、execute、fetch所消耗的cpu的时间,以秒为单位。
ELAPSED:这个语句所有消耗在parse、execute、fetch的总的时间。
DISK:从磁盘上的数据文件中物理读取的块的数量。一般来说更想知道的是正在从缓存中读取的数据而不是从磁盘上读取的数据。
QUERY:在一致性读模式下,所有parse、execute、fetch所获得的buffer的数量。一致性模式的buffer是用于给一个长时间运行的事务提供一个一致性读的快照,缓存实际上在头部存储了状态。
CURRENT:在current模式下所获得的buffer的数量。一般在current模式下执行insert、update、delete操作都会获取buffer。在current模式下如果在高速缓存区发现有新的缓存足够给当前的事务使用,则这些buffer都会被读入了缓存区中。
ROWS: 所有SQL语句返回的记录数目,但是不包括子查询中返回的记录数目。对于select语句,返回记录是在fetch这步,对于insert、update、delete操作,返回记录则是在execute这步。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈大型网站之负载均衡架构

转载自 浅谈大型网站之负载均衡架构 概念 负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。 负载均衡建立…

单词拆分

作者:xiao_ben_zhu 链接:https://leetcode-cn.com/problems/word-break/solution/shou-hui-tu-jie-san-chong-fang-fa-dfs-bfs-dong-tai/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权&#xff…

centos Error: Cannot find a valid baseurl for repo: base 解决方法

参考 https://arstech.net/centos-6-error-yumrepo-error-all-mirror-urls-are-not-using-ftp-http/ 【1】报错现场; 原因, 软件镜像地址有误,需要手工录入; 2、编辑文件, /etc/yum.repos.d/CentOS-Base.repo. 找到…

精选30道Java多线程面试题

转载自 精选30道Java多线程面试题 1、线程和进程的区别 2、实现线程有哪几种方式? 3、线程有哪几种状态?它们之间如何流转的? 4、线程中的start()和run()方法有什么区别? 5、怎么终止一个线程?如何优雅地终止线程&…

Vue 媒体处理(摄像头,截图,播放本地视频)

Vue 媒体处理(摄像头,截图,播放本地视频) 一. 打开摄像头 javascriptthis.constraint {// video属性设置video: {width: 300,height: 300,},// audio属性设置audio: true,}navigator.mediaDevices.getUserMedia(this.constrain…

how to install nc on centos8及nc应用

转自: https://linuxconfig.org/install-netcat-on-redhat-8 【README】 nc 是什么? nc,全名叫netcat,它可以用来完成很多的网络功能,譬如端口扫描、建立TCP/UDP连接,数据传输、网络调试等等&#xff0c…

大型网站架构利器-CDN技术

转载自 大型网站架构利器-CDN技术概念CDN这个概念相信大家都比较耳熟,到底什么是CDN呢?CDN,全称为Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环…

centos8启动zk集群失败:zk Error contacting service. It is probably not running.

【README】在 192.168.163.201 机器上 启动zk ,并查看zk 这台; 即 集群只有2台机器, 201 202 --ZOO.cfg# The number of milliseconds of each tick tickTime2000 # The number of ticks that the initial # synchronization phase can tak…

动态调整canvas时的问题

动态调整canvas大小时必须重新获取上下文( canvas.getContext(‘2d’) )及重新设置ctx的属性,否则会导致后续的绘制操作无效 动态调整canvas: var canvas document.getElementsByTagName("canvas")[0];var ctx canvas.getConte…

Maven精选系列--标准目录结构

转载自 Maven精选系列--标准目录结构Maven的目录结构和传统的项目有所差别,下面是一个jar包通常有的目录结构。src/main/java:源代码目录 src/main/resources:资源文件目录 src/test/java:测试代码目录 src/test/resources&#x…

java本地连接zk集群

【README】基于centos8 搭建zookeeper 集群&#xff0c;refer2 https://blog.csdn.net/PacosonSWJTU/article/details/111409079 【1】创建maven项目 添加依赖后&#xff0c; pom.xml 长这个样子&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0&quo…

Java IO(BIO, NIO, AIO) 总结

文章转载自&#xff1a;JavaGuide 目录BIO,NIO,AIO 总结同步与异步阻塞和非阻塞1. BIO (Blocking I/O)1.1 传统 BIO1.2 伪异步 IO1.3 代码示例1.4 总结2. NIO (New I/O)2.1 NIO 简介2.2 NIO的特性/NIO与IO区别2.3 NIO 读数据和写数据方式2.4 NIO核心组件简单介绍2.5 代码示例3.…

Maven精选系列--介绍与安装

转载自 Maven精选系列--介绍与安装Maven介绍Maven是一个项目管理工具&#xff0c;用来管理项目的生命周期&#xff0c;如项目中各个项目之间的依赖管理&#xff0c;项目中使用到的jar包依赖管理&#xff0c;还有许多项目构建的插件等。使用Maven最大的好处就是不再需要我们手工…

java本地创建zk节点

【README】 java本地连接zk cluster, refer to https://blog.csdn.net/PacosonSWJTU/article/details/111404364; 【1】 创建zk节点 star &#xff08;明星节点&#xff09; /*** 测试 zk * author pacoson**/ public class TestZK {/*** zk server 连接串 */private Stri…

Java8 Lambda总结

什么是Lambda&#xff1f; Lambda是一个匿名函数&#xff0c;我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像参数一样进行传递&#xff0c;称为行为参数化)。Lambda允许把函数作为一个方法的参数&#xff08;函数作为参数传递进方法中&#xff09;&#xff0c;要…

本地java【动态监听】zk集群节点变化

【README】搭建zk cluster&#xff0c; refer 2 https://blog.csdn.net/PacosonSWJTU/article/details/111404364 【1】 动态监听代码&#xff0c;需要写在 建立zk 连接的watcher 实现类里&#xff0c;如下&#xff1a; public class TestZK {/*** zk server 连接串 */privat…

架构师必须搞懂DNS,一篇文章就够了。

转载自 架构师必须搞懂DNS&#xff0c;一篇文章就够了。概念DNS&#xff0c;全称Domain Name System&#xff0c;即域名系统&#xff0c;搞清楚&#xff0c;它不是DNF地下城与勇士。DNS是怎么来的&#xff0c;我们知道要访问一个服务器的资源可以通过IP的形式访问&#xff0c;但…

Java 流式编程stream

目录什么是Stream&#xff1f;怎么创建Stream?Stream的中间操作Stream的终端操作什么是Stream&#xff1f; Stream它并不是一个容器&#xff0c;它只是对容器的功能进行了增强&#xff0c;添加了很多便利的操作,例如查找、过滤、分组、排序等一系列的操作。并且有串行、并行两…

本地java判断zk节点是否存在

【README】java 本地连接zk集群&#xff0c;https://blog.csdn.net/PacosonSWJTU/article/details/111404364 【1】判断节点是否存在 /*** 测试 zk * author pacoson**/ public class TestZK {/*** zk server 连接串 */private String connectString "192.168.163.20…

架构师必须掌握的各种编码:ASCII、ISO-8859-1、GB2312

转载自 架构师必须掌握的各种编码&#xff1a;ASCII、ISO-8859-1、GB2312编码在我们日常开发过程中经常有遇到&#xff0c;常见的编码格式有ASCII、ISO-8859-1、GB2312、GBK、GB18030、UNICODE、UTF-8、UTF-16等&#xff0c;其中GB2312、GBK、GB18030、UTF-8、UTF-16都可以用来…