1、SQL_Plus自动跟踪:

set autotrace on explain          // 显示执行计划

set autotrace traceonly explain // 仅显示执行计划

set autotrace on                    // 显示执行计划、和统计数字

set timing on                         // 显示已用时间

set autotrace traceonly          //显示执行计划、和统计数字;但不显示sql结果

2、还可以利用10046事件来跟踪SQL,它比SQL_TRACE提供更详细的信息.它有LEVEL 1,4,8,12四个级别.

其中Level 1 相当于 SQL_TRACE.下面是10046使用的例子

alter session set events '10046 trace name context forever, level 4'; --跟踪SQL语句并显示绑定变量

alter session set events '10046 trace name context forever, level 8'; --跟踪SQL语句并显示等待事件

10046:SQL到底是如何执行的。

10053:SQL为什么要这样执行。

SQL> alter session set events '10046 trace name context forever,level 4';

Session altered.

.... some SQL statements

SQL> alter session set events '10046 trace name context off';

Session altered.

3、SQL> alter session set sql_trace=true;

SQL>alter session set sql_trace=false;

*************************************************************************************************

系统上的某个接口提交数据经常超时(超过3秒),而我单独在后台数据库()执行insert,只需要17ms。提交数据的客户端没有任何的调试日志,只能通过跟踪后台语句记录实际调用过程中的数据库执行时间。从而发现问题耗时最多的阶段。

安装dbms_support包

SQL> @?\rdbms\admin\dbmssupp.sql

SQL> grant execute on dbms_support to test;

找到需要跟踪的会话,一个接口可能会建立多个会话,需要根据会话建立的时间来判断真正需要跟踪的会话。

SQL> alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';

SQL> select sid,serial#,logon_time from v$session where username=&name and program=&program;

输入 name 的值: 'test' 输入 program 的值: 'test.exe'

使用start_trace_in_session进行跟踪

SQL>exec dbms_support.start_trace_in_session(1157,59729,TRUE,TRUE);

开始跟踪后,在客户端进行对应的操作。

使用stop_trace_in_session结束跟踪

SQL> exec dbms_support.stop_trace_in_session(1157,59729);

使用以下的语句获得trace文件的位置。

SELECT    d.VALUE

|| '\'

|| LOWER (RTRIM (i.INSTANCE, CHR (0)))

|| '_ora_'

|| p.spid

|| '.trc' trace_file_name

FROM (SELECT p.spid

FROM v$mystat m, v$session s, v$process p

WHERE m.statistic# = 1 AND s.SID = &SID AND p.addr = s.paddr) p,

(SELECT t.INSTANCE

FROM v$thread t, v$parameter v

WHERE v.NAME = 'thread'

AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,

(SELECT VALUE

FROM v$parameter

WHERE NAME = 'user_dump_dest') d

用文本编辑器可以直接打开trace文件

图中的这一段就是对一个语句的从解析到返回数据的整个过程,如果统计从开始请求到消息返回客户端的时间,直接将红框中的两个tim相减就可以了,11592216806504-11592199796058=17010446,其单位是1/1000000秒。若要单独获取执行时间,可以EXEC的TIM减掉PARSE的TIM,差值即为执行的时间。其它字段的说明可以参照这个文档。

另外也可以使用TKPROF将trace文件转换成为执行计划解析的文本。

D:\app\oracle\diag\rdbms\wxmesdb\wxmesdb\trace>tkprof wxmesdb_ora_6520.trc trace_1.txt

TKPROF: Release 12.1.0.1.0 - Development on 星期三 1月 6 08:30:11 2016 Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.

如上图所示,可以得到执行时间为17秒,与上一步中通过TIM相减的差值一致。

--EOF--

cs oracle语句跟踪,Oracle执行语句跟踪 使用sql trace实现语句追踪相关推荐

  1. matlab if语句多个执行举例,初学Matlab,有两个语句,if语句和switch语句,有两个例子哪位大神能帮我讲讲...

    问题描述: 初学Matlab,有两个语句,if语句和switch语句,有两个例子哪位大神能帮我讲讲 if logical_expression statements elseif logical_ex ...

  2. java登录的sql语句,如何获取执行过的所有sql语句

    怎么获取执行过的所有sql语句 我有一个java程序,我想获取 我登录网站执行过的所有sql语句,我的配置ibaties 有什么方法,最好有例子. 怎么获取执行过的所有sql语句 SQL Java - ...

  3. Oracle执行语句跟踪(1)——使用sql trace实现语句追踪

    1.安装dbms_support包 SQL> @?/rdbms/admin/dbmssupp.sqlPackage created.Package body created.SQL> gr ...

  4. 【DB笔试面试597】在Oracle中,获取执行计划有哪几种方法?

    ♣题目部分 在Oracle中,获取执行计划有哪几种方法? ♣答案部分 一般来说,有如下几种获取执行计划的方式: 1.AUTOTRACE方式 AUTOTRACE是Oracle自带的客户端工具SQL*Pl ...

  5. 一条SQL查询语句是如何执行的? MySql杂谈

    在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天.每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不 ...

  6. oracle+连接格式,oracle外连接符号(+)的用法

    我们都知道,PL/SQL中实现外连接,除了可以用关键词OUTER JOIN外,还可以用Oracle的外连接符号(+).对于这个外连接符号(+),虽然看到书上说:使用(+)进行外连接时,where条件中 ...

  7. oracle awr书籍,Oracle AWR介绍

    1AWR报告介绍 AWR是Oracle  10g版本 推出的新特性, 全称叫Automatic Workload Repository-自动负载信息库, AWR是通过对比两次快照(snapshot)收 ...

  8. 跟踪oracle中sql语句运行过程及相关知识拓展

    select * from v$sqlarea; select * from v$sqlarea where first_load_time>'2010-11-27/09:30:00'; 这种方 ...

  9. oracle的sql执行计划语句,最权威Oracle获取SQL语句执行计划大全

    该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅 ...

最新文章

  1. 一分钟学会看k线图_看K线图:阴跌如钝刀
  2. mysql6.5 操作日志
  3. java z+_Java Z 字形变换
  4. Spring框架注入注解与拦截器浅谈
  5. c语言printf输出中文报错,printf输出中文后还带有数字是怎么回事?
  6. 肝火旺的人,哪些食物打死都不要碰?
  7. Delphi 的绘图功能[5] - 获取 Canvas 对象
  8. java打印jsp_在java中实现对FORM的打印功能
  9. Mybatis之select元素
  10. 关系型数据库之MySQL8——由内而外的深化全面学习
  11. PID LSim PT3这个仿真模块 S7-1200 S7-1500 CPU下载
  12. excel打不开html格式的文件,excel扩展名,教您解决Excel无法打开文件因为文件或文件扩展名无效...
  13. MySQL索引(漂亮简洁的思维导图)
  14. PDF编辑方法,怎么删除PDF中的一页
  15. 微软正打造全新 Edge“Phoenix”浏览器?网友:画蛇添足?
  16. 解决:给 VSCode 手动添加(解压压缩包)相关插件的问题
  17. jQuery(入门)
  18. 银河麒麟V10 SP2 搭建tftp服务
  19. Meta-SR: A Magnification-Arbitrary Network for Super-Resolution
  20. GPG error: NVIDIA NO_PUBKEY A4B469963BF863CC

热门文章

  1. Android布局优化之include、merge、ViewStub
  2. 2021年大数据常用语言Scala(八):基础语法学习 循环
  3. 2021年大数据Flink(二十六):​​​​​​​State代码示例
  4. 深度学习进阶:多分类与TensorFlow
  5. Django 布署6.5
  6. Kafka入门教程与详解
  7. DOS命令大全 黑客必知的DOS命令集合
  8. python 运算符 is 与 is not 的理解
  9. App is not indexable by Google Search; consider adding at least one Activity with an ACTION-VIEW int
  10. 微信小程序设置字体上下左右居中