Oracle性能分析3:TKPROF介绍

tkprof是Oracle自带的一个命令行工具,主要作用是将原始的跟踪文件转换为格式化的文本文件,最简单的使用方式如下:

tkprof ly_ora_128636.trc ly_ora_128636.txt

tkprof带有很多参数,在多数情况下,使用这些参数对你的分析将很有帮助。

tkprof参数

如果不带任何参数运行tkprof,它将打印出完整的参数列表,并带有简单的描述。下面是对参数的说明:

explain

为每个SQL语句提供一个执行计划。该参数需要指定用户、密码,也可以指定数据库连接串,如:explain=user/[email protected]_string或者explain=user/password。

table

纸盒explain参数一起使用,用于指定生成执行计划使用的表,通常不需要指定,只有当用户不能创建表时才需要(如缺少create table权限)。

print

用于限制输出文件生成的SQL语句的数量,例如:print=10.

aggregate

指定是否单独处理同样内容的SQL语句,默认不单独处理。指定为aggregate=no,看单独的每个SQL语句。

insert

生成SQL脚本,SQL脚本可以用来存储信息到数据库中,SQL脚本的名字由参数指定,如:insert=load.sql。

sys

指定sys用户运行的SQL语句是否也写入到输出文件中,默认yes。

record

生成SQL脚本,里面包含在trace文件中找到的所有非递归语句,脚本名通过参数本身来指定,例如:record=replay.sql。

waits

是否添加等待事件的信息,默认添加。

sort

指定写入输出文件中的SQL语句的顺序。默认是trace文件中发现的SQL顺序。

下面是一个例子:

tkprof {input trace file} {output file} sys=no sort=prsela,exeela,fchela

prsela:第一个游标解析耗费的时间

exeela:针对游标执行花费的时间

fchela:游标获取数据行所花费的时间

tkprof输出

输出文件带有一个头,其中有对参数的说明,如下:

**********************************************************************
count    = number of times OCI procedure was executed
cpu      = cpu time in seconds executing
elapsed  = elapsed time in seconds executing
disk     = number of physical reads of buffers from disk
query    = number of buffers gotten for consistent read
current  = number of buffers gotten in current mode (usually for update)
rows     = number of rows processed by the fetch or execute call
**********************************************************************

count:执行的数据库调用次数

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

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

disk:物理读的数据块数量,如果大于逻辑读的数量(disk>query+current),表示使用了临时表空间。

query:在一致性模式下从高速缓存逻辑读取的快数量,用作查询。

current:在当前模式下从高速缓存逻辑读取的块数量,用于insert、delete、merge以及update等操作。

rows:处理的数据行数量。查询表示获取的行数量,而insert、delete、merge以及update等则表示影响的行数量。

下面看一个具体的例子:

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch      501      0.03       0.15          0       1465          0       50001
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total      503      0.03       0.15          0       1465          0       50001

上面分别对应了parse、execute和fetch这3个阶段,在fetch阶段执行了501次fetch,获取了50001行数据,每次fetch获取100行数据。

接下来是:

Misses in library cache during parse: 1
Misses in library cache during execute: 1
Optimizer mode: ALL_ROWS
Parsing user id: 5 

前两行表示发生在解析和执行调用阶段的硬解析数量,如果没有硬解析,则不存在。

“Optimizer mode”表示优化器模式。

“Parsing user id”是解析SQL语句的用户。

在这之后可以看到执行计划,这里只做一个简单讲解:

Rows     Row Source Operation
-------  ---------------------------------------------------
  50001  COUNT STOPKEY (cr=1465 pr=0 pw=0 time=300125 us)
  50001   VIEW  (cr=1465 pr=0 pw=0 time=200088 us)
  50001    INDEX FULL SCAN IDX_HISTORYALARM$CLEAR (cr=1465 pr=0 pw=0 time=100049 us)(object id 53743)

cr:一致性模式下逻辑读出的数据块数

pr:从磁盘物理读出的数据块数

pw:物理写入磁盘的数据块数

time:以微妙表示的总的耗费时间,注意数据不精确

cost:操作的评估开销(仅11g才提供)

size:操作返回的预估计数据量(字节数)(仅11g才提供)

card:操作返回的预估计行数(仅11g才提供)

接下来就是等待事件:

  Event waited on                             Times Waited   Max. Wait  Total Waited
  ----------------------------------------------------------------------------------
  SQL*Net message to client                        502           0.00          0.00
  SQL*Net message from client                      502           0.08         15.42
  SQL*Net more data to client                      500           0.00          0.01

Times Waited:等待时间占用时间

Max. Wait:单个等待事件最大等待时间,单位为秒

Total Waited:针对一个等待事件总的等待秒数,不精确

这里你可以看到执行中遇到的等待事件,通过对这些等待事件的分析,有助于你了解在等待什么样的资源,查询的瓶颈,有针对的做出优化。可以在Oracle Database Reference手册的附录中找到关于多数常见等待事件的简短描述。

Oracle性能分析3:TKPROF介绍

时间: 2024-11-05 12:14:14

Oracle性能分析3:TKPROF介绍的相关文章

Oracle性能分析工具介绍及使用

oracle数据库级别优化分析工具介绍 当我们对数据库优化诊断时,需要收集相应的信息以供参考,从个人的使用经验来说,这种统计数据分为两大类 一类是数据库级别的统计信息二类是os级别的统计信息 下面就分别介绍在不同的级别下,常用什么工具来收集信息帮助优化诊断 首先是oracle数据库级别优化分析工具介绍 目录: 1.statspack2.ASH3.AWR4.ORACLE EXPLAIN PLAN的总结(查询sql的执行计划)   a.autotrace   b.explain的使用 1.stats

Oracle性能分析7:索引的使用

这一节主要讲述索引的使用,首先介绍怎么在查询中避免使用索引,然后介绍优化器怎么判断是否使用索引,并介绍了强制使用索引的方法,最后介绍了Oracle的并行处理方法. 避免使用索引 虽然你创建了索引,但有些查询你可能需要避免使用这些索引,或者你为了做一些测试,希望看看各种情况下查询的情况,也希望能够避免使用一些索引或者索引扫描方式.Oracle提供了方式来达到这些目地,就是在查询中使用hint信息,具体情况如下. 避免使用某个索引 如果索引的选择性很差,那么也许使用其它索引或者使用全表扫描的效率会更

Oracle性能分析4:数据访问方法之全扫描

SQL语句执行时,Oracle的优化器会根据统计信息确定表的访问方式,一般来说,有两种基本的数据访问方式:1)全扫描.在全扫描(全表扫描或者快速全索引扫描)中,多个块被读入到一个IO运算中.2)索引扫描.索引扫描首先扫描索引叶子块以取得特定的行id(rowid),然后利用这些行id来访问父表取得实际的行数据,访问通过单块读取来完成.这里主要讲解全扫描方式,后面将介绍索引扫描. 使用全扫描 当对一个表进行全扫描时,会将表中所有数据块(block)取出并进行处理,筛选出符合条件的数据.注意Oracl

Oracle性能分析2:trace文件解读

下面是trace文件中的一个片段,表示一个SQL执行的过程,一个trace文件由很多这样的片段组成: PARSING IN CURSOR #4 len=135 dep=1 uid=0 oct=3 lid=0 tim=777069789359 hv=1115215392 ad='33e7e384' select /*+ index(idl_char$ i_idl_char1) +*/ piece#,length,piece from idl_char$ where obj#=:1 and part

Oracle性能分析1:开启SQL跟踪和获取trace文件

当Oracle查询出现效率问题时,我们往往需要了解问题所在,这样才能针对问题给出解决方案.Oracle提供了SQL执行的trace信息,其中包含了SQL语句的文本信息,一些执行统计,处理过程中的等待,以及解析阶段(如生成执行计划)产生的信息.这些信息有助于你分解sql语句的服务时间和等待时间,并了解所用资源和同步点的详细信息,从而帮助你诊断存在的性能问题. 这篇文章介绍了怎么开启SQL跟踪和获取trace文件,详细信息如下. 开启SQL跟踪 从内部技术细节看,SQL跟踪是基于10046调试事件的

Oracle性能分析12:对象统计信息

对象统计信息描述数据是如何在数据库中存储的,查询优化器使用这些统计信息来做出正确的决定.Oracle中有三种类型的对象统计信息:表统计.列统计和索引统计.而在每种类型中,有细分为:表或索引级别的统计.分区级别统计和子分区级别的统计,后面两种只有在对象被分区和具有子分区的情况下才可用. 统计信息相关视图 表统计信息 表/索引级别的统计 user_tab_statistics user_tables 分区级别的统计 user_tab_statistics user_tab_partitions 子分

Oracle性能分析3:TKPROF简介

tkprof它是Oracle它配备了一个命令直插式工具,其主要作用是将原始跟踪文件格文本文件的类型,例如,最简单的方法,使用下面的: tkprof ly_ora_128636.trc ly_ora_128636.txt tkprof带有非常多參数,在多数情况下,使用这些參数对你的分析将非常有帮助. tkprof參数 假设不带不论什么參数执行tkprof,它将打印出完整的參数列表,并带有简单的描写叙述.以下是对參数的说明: explain 为每一个SQL语句提供一个运行计划. 该參数须要指定用户.

Oracle性能分析5:数据访问方式之索引结构和扫描方式介绍

上篇文章讲述了全扫描,这篇文章将介绍索引的结构和扫描方式,在后面将开始讲述每一种扫描方式. 当Oracle通过索引检索具体的一列或多列的列值时,就会执行索引扫描.首先我们来看看索引节点包含的数据. 索引节点包含的数据 索引可以被创建在表的单列或者多列上,索引中包含了这些列的值.rowid和一些其它信息,我们关心的只有列值和rowid.由于索引带有列值,应此如果你的SQL语句只涉及到索引的列,那么Oracle就只从索引本身检索列值,而不需要访问表.如果查询涉及到索引列以外的列,Oracle就需要使

Oracle性能分析6:数据访问方式之索引扫描

这节将介绍各种索引扫描方式,在了解了各种索引扫描方式的特点后,你就可以判断你的执行计划中使用的扫描方式是否正确,并可以针对获取的信息作出改进. 索引唯一扫描 在下面的场景中使用相等条件时,数据库使用索引唯一扫描. 1)查询条件中包含唯一索引中的所有列时: 2)查询条件使用主键约束列时. 下面是一个实际的例子,在表historyalarm中创建如下唯一索引: create unique index idx_historyalarm$queryid on historyalarm(queryid)