设为首页 收藏本站
查看: 619|回复: 0

[经验分享] oracle技术之tkprof程序详解

[复制链接]

尚未签到

发表于 2018-9-14 06:10:28 | 显示全部楼层 |阅读模式
  现对tkprof程序做进一步的说明:
  在打开跟踪功能后,oracle将被跟踪session中正在执行的SQL的性能状态数据都收集到一个跟踪文件中。这个跟踪文件提供了许多有用的信息,例如一个sql的解析次数、执行次数、fetch次数、物理读次数、逻辑读次数、CPU使用时间等,利用这些信息可以诊断你的sql的问题,从而用来优化你的系统。不幸的是,生成的跟踪文件中的数据是我们难以理解的,所以要用TKPROF工具对其进行转换,转换成我们易于理解格式。tkprof是oracle提供的实用工具,类似于sql*plus,在安装完oracle客户端后就自动安装到系统中,直接在命令符下用就可以了。
  当在打开跟踪功能时发生了recursive calls,则tkprof也会产生这些recursive calls的统计信息,并清楚的在格式化输出文件中标名它们为recursive calls。
  注意:recursive calls的统计数据是包含在recursive calls上的,并不包含在引起该recursive calls语句的sql语句上面。所以计算一个sql语句耗费的资源时,也要考虑该sql语句引起recursive calls语句花费的资源。通过将sys参数设为no时,我们变可以在格式化的输出文件中屏蔽掉这些recursive calls信息。
  (1)如何得到tkprof的帮助信息:
  运行tkprof时,不带任何参数,就可以得到该工具的帮助信息。
  执行计划:
  ---------------
  一个语句的执行计划是oracle执行这个sql语句的一系列指令。通过检验执行计划,你可以更好的知道oracle如何执行你的sql语句,这个信息可以帮助你决定是否你写的sql语句已经使用了索引。
  如果在tkprof中指定了EXPLAIN参数,tkprof使用EXPLAIN PLAN命令来为每个被跟踪的sql语句产生执行计划。
  使用说明:
  TKPROF工具接受一个trace文件作为输入文件,利用提供给命令的多个参数对trace文件进行分析,然后将格式化好的结果放到一个输出文件中。
  TKPROF的使用语法:
  ----------------
  TKPROF command ::=
  》-- TKPROF traced_file formatted_file ---------------------------------------------->
  |                 |
  +- SORT = ---------------------------------+
  |          |
  +--   OPTION --+
  |          |
  |  +---- , ----+   |
  |  V     |  |
  |__(  OPTION  )__|
  >----------------------------------------------------------------------------->
  |           |  |            |  |         |
  +-- PRINT = integer --+  +-- INSERT = filname3 --+  +-- SYS = ---------+
  |    |
  +- YES -+
  |    |
  +- NO --+
  >----------------------------------------------------------------------------->
  |                                    |
  +---------------------------------------- EXPLAIN = user/password ------+
  |                |
  +---- TABLE = schema.table ----+
  >----------------------------------------------------------------------------><
  |              |
  +---- RECORD = filname ----+
  各个参数的含义:
  ' traced_file '
  指定输入文件,即oracle产生的trace文件,该文件中可以只包含一个session的跟踪信息,也可以包含系统中所有session的信息(此时需要在系统级进行跟踪)
  'formatted_file'
  指定输出文件,即我们想得到的易于理解的格式化文件,我们利用该文件对会话运行的sql进行分析。
  'EXPLAIN'
  利用哪个用户对trace文件中的sql进行分析,从而得到该sql语句的执行计划,这也说明在trace file中并没有各个sql语句的执行计划,只是在运行tkprof程序时才将trace file文件中的sql语句用explian参数指定的用户连接到数据库,然后运用EXPLAIN PLAN命令生成sql的执行计划。这个用户一般是你的程序中连接数据库的用户。
  'TABLE'
  在对sql语句进行分析时,将产生的执行计划暂时存放到该表中。一般不需要该参数,这样当表不存在时,tkprof会自动创建相应的表,并在分析完之后,将创建的表自动删除。如果要指定自定义的表,该表的结构必须与utlxplan.sql文件中指定的表的结构一样。我一般不设置这个参数,让其采用默认的表名,并自动创建、删除
  'SYS'
  是否对sys用户运行的sql语句或被跟踪session产生的recursive SQL也进行分析,并将分析结果放到输出文件中。缺省值为YES。我一般设为NO,这样输出文件中只包含我发出的sql语句,而不包含系统产生的sql。
  'SORT'
  按照指定的排序选项(条件)对格式化好的sql语句进行降序排列,然后存放到输出文件中。可以将多个排序选项组合起来,如果没有指定排序选项,则按照使用sql的先后顺序。
  排序选项有:
  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'
  只列出指定数量的已排序的sql语句,排序的条件参见SORT参数。如果忽略此参数,tkprof将跟踪文件中的所有的sql语句及其相关的分析数据存放到输出文件中。
  Print与sort参数组合在一起,可以实现:
  找出某一阶段耗费cpu最多的前n个sql
  找出某一阶段读硬盘最多的前n个sql等等。
  'INSERT'
  创建一个sql脚本文件,里面包含create table 与insert语句。利用这个脚本文件创建一个表及插入数据后,可以得到跟踪文件中所有sql语句(包含recursive SQL)的统计信息。如
  ,depth,user_id,
  parse_cnt,parse_cpu,parse_elap,parse_disk,
  parse_query,parse_current,parse_miss
  ,exe_count,exe_cpu,exe_elap,exe_disk,exe_query,
  exe_current,exe_miss,exe_rows
  ,fetch_count,fetch_cpu,fetch_elap,fetch_disk,
  fetch_query,fetch_current,fetch_rows,ticks
  ,sql_statement。
  利用这些信息,也可以发现有问题的sql。即是格式化好的输出文件中有关sql性能信息数据的数据库表的形式。我一般不用该参数。
  'RECORD'
  创建一个包含客户端程序发出的所有的sql语句的脚本文件。注意,并不包含recursive SQL 。想知道它的用处吗?对了可以窥探别人程序是如何访问数据库的,从而对了解程序的访问流程。此时,最好不用sort参数,这样就可以按先后发出的顺序的到sql.
  例子1:
  将跟踪文件"dsdb2_ora_18468.trc"进行分析,并将其格式的结果放到"dsdb2_trace.out"文件中:
  TKPROF dsdb2_ora_18468.trc dsdb2_trace.out SYS=NO EXPLAIN=SCOTT/TIGER
  上面的例子中:
  EXPLAIN参数让TKPROF程序连接到SCOTT用户,然后用EXPLAIN PLAN命令给跟踪文件中的sql语句产生执行计划。SYS参数的值为NO,这样TKPROF就会忽略该跟踪文件中的recursive SQL。
  例子2:
  TKPROF DLSUN12_JANE_FG_SVRMGR_007.TRC OUTPUTA.PRF
  EXPLAIN=SCOTT/TIGER TABLE=SCOTT.TEMP_PLAN_TABLE_A
  INSERT=STOREA.SQL SYS=NO SORT=(EXECPU,FCHCPU)
  注意上面的所有命名应该都在一行中,否则需要有换行符。
  上面的例子中:
  TABLE参数使TKPROF使用scott用户下的TEMP_PLAN_TABLE_A表作为临时存放sql执行计划的表。
  INSERT参数使TKPROF产生一个名为STOREA.SQL的脚本文件,存放所有被跟踪的sql语句的统计数据。
  SORT参数使TKPROF先按照sql语句使用的cpu执行时间与该语句fetch操作使用的cpu时间进行排序,然后将其写到输出文件中。
  oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-581229-1-1.html 上篇帖子: Oracle oradim的pfile参数 下篇帖子: Linux下Oracle 11g 安装过程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表