10046之诊断绑定变量问题

今天整的是如何用10046来判断绑定变量的问题。(剑破冰山学习笔记)

10046和10053,是两个比较常用的:
10046出来的,是整个sql的执行过程,详细到整个执行过程中每一步的用时,比如:在10046中,可以看到,在解析这一步花了多长时间,在execute多久,fetch多久等等;
10053呢,是针对优化器的,从10053中看到的,是为什么选择一个执行计划。

所做测试如下:
1,创建测试表
SQL>  create table test (sno varchar2(32));

Table created.
2.对session开启10046

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

Session altered.
不同级别的10046如下:
1 标准的sql_trace
4 level1+bind values
8 level1+等待时间跟踪
12 1+4+8
我用的是12.
同时,level越高,产生的东西越冬tkprof的时间越长,同时对全局session的10046很消耗资源。

3,对test用户开启跟踪
首先,查出test用户的sid,serial。
SQL> select serial#,sid,username from v$session ;


   SERIAL#        SID USERNAME
---------- ---------- ------------------------------
         5          1 SYS   
         3         41 TEST
   
下面针对test用户开启跟踪,下面命令sys用户执行
SQL> exec dbms_system.set_ev(41,3,10046,12,'TEST');

PL/SQL procedure successfully completed.

4,执行测试语句

我的语句如下:
SQL> begin 
  2  for i in 1 .. 100000 loop
  3  execute immediate 'insert into test values ('||i||')';
  4  end loop;
  5  end;
  6  /
PL/SQL procedure successfully completed.

5,对test关闭跟踪
SQL> exec dbms_system.set_ev(41,3,10046,0,'TEST');

PL/SQL procedure successfully completed.
6,获取跟踪文件
如下:为跟踪文件的位置,ll -t 可以按照时间倒序查看
SQL> show parameter user_dump_dest
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest                       string      /u01/diag/rdbms/ora/ora/trace

同时,为了更方便的找到追踪文件,可以执行如下命令:(我没执行)
SQL> alter session set tracefile_identifier='10046';

Session altered.

7,格式化trace文件
tkprof  tracefile  outfile [option]
参数如下:

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 按返回数据时处理的数据数量排序


我的命令如下:
tkprof  ora_ora_2689.trc  ora_ora_2689.prf sys=no 

8,查看格式化之后的trace文件

tail -n 50 +filename   可以查看文件最后50行纪录
手动删掉了一些暂时不关注的内容,要关注的如下:
[oracle@lzw trace]$ tail -n 50 ora_ora_2689.prf

OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse   100018     20.50      20.35          0          0         10           0
Execute 100115      2.29       2.38          4     100607     303539      100005
Fetch      154      0.00       0.05          5        383          0         464
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total   200287     22.80      22.78          9     100990     303549      100469


Misses in library cache during parse: 100018
Misses in library cache during execute: 19


Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  db file sequential read                         9        0.05          0.06


100003  user  SQL statements in session.
   31  internal SQL statements in session.
100034  SQL statements in session.
********************************************************************************
Trace file: ora_ora_2689.trc
Trace file compatibility: 11.1.0.7
Sort options: default


       1  session in tracefile.
  100003  user  SQL statements in trace file.
      31  internal SQL statements in trace file.
  100034  SQL statements in trace file.
  100026  unique SQL statements in trace file.
  802347  lines in trace file.
     212  elapsed seconds in trace file.
可以发现,跟踪时间段,22.35+2.38+0.05的时间中,有22.35的时间花在解析上。
同时查看trace前面的内容发现,语句如下:
insert into test values ('1');
insert into test values ('2');
insert into test values ('3');
insert into test values ('4');
insert into test values ('5');
insert into test values ('6');
.
.
.
得出结论,没有使用绑定变量,导致硬解析太高。

下一步,改造sql,以使用绑定变量的方式编码,代码如下:


SQL> truncate table test;
Table truncated.

SQL> begin 
  2  for i in 1 .. 100000 loop
  3    execute immediate 'insert into test values (:v)' using i;
  4  end loop;
  5  end;
  6  /

其余步骤同上:
新生成的10046trace内容如下:


OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        2      0.00       0.00          0          0          0           0
Execute 100003      2.76       2.83          2       1092     103575      100002
Fetch        1      0.00       0.00          0          4          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total   100006      2.76       2.83          2       1096     103575      100003


Misses in library cache during parse: 1
Misses in library cache during execute: 1


Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  db file sequential read                         2        0.00          0.00


    2  user  SQL statements in session.
    3  internal SQL statements in session.
    5  SQL statements in session.
********************************************************************************
Trace file: ora_ora_4704_10046.trc
Trace file compatibility: 11.1.0.7
Sort options: default


       1  session in tracefile.
       2  user  SQL statements in trace file.
       3  internal SQL statements in trace file.
       5  SQL statements in trace file.
       5  unique SQL statements in trace file.
  800315  lines in trace file.
     120  elapsed seconds in trace file.


至此,感谢剑破冰山各位大拿。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30123160/viewspace-2051322/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30123160/viewspace-2051322/

手把手教你用CCS v7.3调试TI DSP28377:从连接仿真器到看懂Flash里的秘密 本文详细介绍了使用CCS v7.3调试TI DSP28377的全过程,从连接仿真器到解析Flash启动机制。通过实战演示和关键配置要点,帮助工程师快速掌握DSP调试技巧,并深入探讨bootloader设计与在线升级的实现方法,提升开发效率。 阅读详情

相关推荐

绝对旋转编码器学习笔记(基本原理,与PC通信等,不定期更新中)

前言 最近开始学习编码器相关内容,目的在于搞清楚编码器的原理,与上位机的联系等问题。笔记资料来源为网络,整理的同时也会有一些总结和感悟。由于研究方向需求,主要研究数字旋转编码器。 1.编码器的定义 编码器(encoder)是将信号(如比特流)或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。——摘自《百度百科》 通常来说,编码器可以将角度位移、直线位移、转速等物理量转换为电信号。这里的电信号根据不同原理的编码器输出脉冲、二进制数码等不同的类型,下面会提到。 2.编码器的分类 编.

黑化咸鱼的博客 1万+

SQL_TRACE/10046事件如何使用,详细分析

这是oracle提供用来进行SQL跟踪的强有力的工具,可跟踪解析过程,执行计划,绑定变量,递归调用等等 先执行SQL的TRACE命令,生成TRACE文件,TKPROF格式化,分析文件 alter session set sql_trace=true,启动sql_trace功能。 alter session set events '10046 trace name context fo

三也_攻城狮 1616

腾讯会议视频过期了怎么办?亲测可用:用这个免费插件抢救你的会议录制与回放

本文提供了三种亲测有效的腾讯会议视频过期恢复方案,包括浏览器缓存提取、专业工具组合及预防性措施。特别推荐使用免费插件抢救过期会议录制与回放,帮助职场人解决重要视频资料丢失的难题。

weixin_33686714的博客 264

oracle 10046事件

10046 事件     Oracle 10046是一个Oracle内部事件。最常用的是在Session级别设置sql_trace(alter session set sql_trace=true)即是开启了级别为1 的10046调试事件。当设置了10046事件之后,Oracle 将产生一个dump文件。通过得到的dump文件进行进一步分析,可以得到Oracle 内部执行系统解析、调用、等待、

Vincent的专栏 972

运放偏置电路设计:如何精准计算差分放大器的电压偏移量

本文深入解析了差分放大器偏置电路的设计原理与精准计算方法,重点阐述了如何通过引入参考电压实现信号电压偏移,以适应单电源ADC的输入范围。文章结合实战案例,详细推导了偏移电压公式,并强调了电阻匹配、运放选型及PCB布局对精度和共模抑制比的关键影响,帮助硬件工程师避免常见设计陷阱。

weixin_29288313的博客 634

GAN实战:用Python和TensorFlow打造你的第一个生成对抗网络(附完整代码)

本文是一份详细的GAN实战指南,指导读者使用Python和TensorFlow框架从零开始构建并训练一个生成对抗网络。文章涵盖了环境搭建、MNIST数据预处理、生成器与判别器模型构建、对抗性损失函数定义、训练循环编写以及关键的调试技巧,旨在帮助开发者通过动手实践深入理解GAN的核心原理与实现过程。

php55的博客 480

SQL优化及性能诊断(10046事件/tkprof)

<br />1.与之上次使用到的SQL_TRACE功能相比,我们这次将使用更高级的trace命令(10046)来做演示。我们先启用“高级”的10046事件生成一份待格式化的trace文件<br />1)连接到普通用户sec<br />sys@ora10g> conn sec/sec<br />Connected.<br /><br />2)先将timed_statistics参数设置为true,这样可以使TKPROF工具能提供更多的有意义的信息,方便性能诊断<br />sec@ora10g> alter s

浪缘的专栏 1111

ACM算法模板 · 一些常用的算法模板-模板合集(打比赛专用)

萌新常用的都在这了,本萌新的模板集。

张天枭の博客 5万+

Oracle SQL Trace 和 10046 事件及oradebug 命令

一. SQL_TRACE 当SQL语句出现性能问题时,我们可以用SQL_TRACE来跟踪SQL的执行情况,通过跟踪,我们可以了解一条SQL或者PL/SQL包的运行情况,SQL_TRACE命令会将SQL执行的整个过程输出到一个trace文件中,我们可以读这个trace 文件来了解在这个SQL执行过程中Oracle 都做了哪些操作。   可以通过sql命令启动SQL_TRACE,或者在初始化参数

南山南的Python和大数据学习笔记 733

树莓派4B+红外传感器:手把手教你DIY一个能走黑线的智能小车(Python代码全解析)

本文详细介绍了如何使用树莓派4B和红外传感器DIY一个智能循迹小车,包括硬件配置、GPIO连接、Python代码实现及优化算法。通过动态PWM调速、状态机设计和赛道记忆算法,提升小车的循迹性能和稳定性。适合初学者和电子爱好者动手实践。

weixin_29188043的博客 269

告别手绘!用Aseprite+Unity Tilemap,从AI生成到2D游戏地图的保姆级搭建流程

本文详细介绍了如何利用Aseprite和Unity Tilemap从AI生成素材到搭建2D游戏地图的完整流程。涵盖AI生成素材的预处理、图层管理、动画制作,以及Unity中的Tilemap系统配置和性能优化技巧,帮助开发者高效创建像素风游戏地图。

weixin_29015483的博客 583

10046入门:使用10046查看执行计划并读懂trace文件

1.开启10046 *************************************************************     SQL&gt; oradebug setmypid  Statement processed.      // 激活 10046 事件  SQL&gt; oradebug...

qq_39081511的博客 1833

工具变量法入门:解决因果分析中的内生性问题

想知道如何在复杂的数据中精确揭示因果关系?你是否遇到过自变量与误差项相关导致的困惑?工具变量法将为你拨开迷雾,帮助你剖析数据背后的因果链条。这篇文章不仅详细讲解了工具变量法的原理,还结合实际案例,让你轻松掌握这一关键研究工具。点击阅读,开启你的因果分析新篇章!

theskylife的博客 1953

深入理解Oracle调试事件:10046事件详解

之前也写过一篇10046的文章:10046简介       今天,Think想和大家一起共同深入去理解一下Oracle的这些调试事件            10046事件是SQL_TRACE的扩展,被戏称为"吃了兴奋剂的SQL_TRACE"       有效的追踪级别:              ① 0级:SQL_TRACE=FASLE       ② 1级:SQL_TRACE=TRUE,这是缺省

记录创业路上的一些想法 4246

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

oracle之10046事件

10046事件 按照信息收集的内容可以分为4个级别: 1、level 1等同于SQL_TRACE 2、level 4在level 1 的基础上增加了收集绑定变量的信息 3、level 8在level 1 的基础上增加了等待事件的信息 4、level 12等同于level4 + level 8同时收集绑定变量的信息和等待事件的信息。 因为level 12是level 4与level 8的

金色阳光-Oracle Linux技术交流 601

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

oracle 读懂10046视频,深入理解Oracle调试事件:10046事件详解

之前也写过一篇10046的文章:10046简介今天,Think想和大家一起共同深入去理解一下Oracle的这些调试事件10046事件是SQL_TRACE的扩展,被戏称为"吃了兴奋剂的SQL_TRACE"有效的追踪级别:① 0级:SQL_TRACE=FASLE② 1级:SQL_TRACE=TRUE,这是缺省级别③ 4级:1级+绑定变量④ 8级:4级+等待事件⑤ 12级:4级+8级对于4级的10046...

weixin_39607474的博客 221

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

10046级别12跟踪详解:完整实例演示

通过这个实例,我们可以看到10046级别12跟踪如何揭示常规工具无法捕获的关键细节精确的绑定变量值:看到优化器实际使用的值(90 vs 60)微秒级时间分解:35ms中25.5ms是I/O等待I/O模式识别:225次单块读,每次8.5ms执行计划稳定性:相同SQL使用相同计划(3254684123)资源消耗量化:475逻辑读返回28行何时必须使用10046 Level 12当AWR/ASH显示高"db file sequential read"等待当相同SQL在不同时间性能差异巨大。

m0_59021776的博客 584

使用Oracle SQL trace时需要注意的问题

经常使用Sql Trace和10046 event来诊断Oracle数据库性能问题。而level超过1的10046事件通常称为extended sql trace,通常用于诊断确定的单个SQL、存储过程或会话的性能问题,具有如下的几个优点:   可以得到SQL执行时实际的执行计

砳缝的渴望 588

oracle Database Event trace 设置

通常设置那些 oracle Database Event? 下面的Event 经常被DBA 和Oracle support 用来诊断问题: • 10046 trace name context fore...

cuanxiu7017的博客 155

oracle SQL_TRACE和10046事件

一、SQL_TRACE/10046事件是什么         SQL_TRACE/10046事件是Oracle提供的用来进行SQL跟踪的强有力工具,可跟踪到SQL的解析过程、执行计划、绑定变量、递归调用等详细信息,从而能更好地分析和解决问题。         首先是在数据库层面执行SQL的TRACE命令,执行后生成TRACE文件,由于TRACE文件格式比较难以阅读,所以通过TKPROF工具进行

xile99的专栏 829

数据库性能问题诊断与分析

1.SQL_TRACE及10046事件的基础介绍SQL_TRACE/10046事件是oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具。当在数据库中启用SQL_TRACE或者设置10046事件后,Oracle将会启动内核跟踪程序,持续记录会话的相关信息,并写入到相应的trace文件中。跟踪记录的内容包括SQL的解析过程、SQL的执行计划、绑定变量的使用以及会话中发生的等待事件等。1.

咖啡豆的专栏 1078

使用sql_trace/10046事件进行数据库诊断

sql_trace/10046事件是oracle提供的用于进行sql跟踪的手段,其内容包括sql的解析过程、sql的执行计划、绑定变量的使用、会话发生的等待事件。         在使用sql_trace/10046事件前,有两个参数需要注意: sys@ORCL> show parameter max_dump_file_size --对trace文件的大小限制 NA

记录创业路上的一些想法 3962

oracle 10046详解,10046事件详解

10046事件详解一、10046事件概述10046是一个Oracle的内部事件(event),通过设置这个事件可以得到Oracle内部执行系统解析、调用、等待、绑定变量等详细的trace信息,即帮助我们解析一条/多条SQL、PL/SQL语句的运行状态,这些状态包括:Parse/Fetch/Execute三个阶段中遇到的等待事件、消耗的物理和逻辑读、CPU时间、执行计划等。它不仅为我们揭示了一条、多...

weixin_28811757的博客 3997

Oracle 10046事件详解

Oracle的10046事件,可以跟踪应用程序所执行的SQL语句,并且得到其解析次数.执行次数,CPU使用时间等信息。这对我们分析、定位数据库性能问题是非常有用的。 10046event是oracle用于系统性能分析时的一个最重要的事件。当激活这个事件后,将通知oracle kernel追踪会话的相关即时信息,并写入到相应trace文件中。这些有用的信息主要包括sql是如何进行解析,绑定变量的使

jlds123的专栏 8418

59-Oracle 10046事件-知识准备

上一篇说到了autotrace,SQL调试时候的获取性能和参数数据,直接用上trace,还有个更全能的工具10046。是不是很多小伙伴会对这么个数字,觉得起名很奇怪,数字起名任性。“10046”本质是Oracle内核事件的随机性技术编号,类似于软件中的错误代码,Oracle开发团队设计,数字本身并无特殊含义,而是用于在代码层唯一标识特定功能模块或诊断事件。Oracle使用5位数字作为内部事件的标识符(如10046、10053)。这些数字是开发团队预定义的常量,用于在数据库内核中触发特定诊断行为。

远方的专栏 1385

【DB笔试面试687】在Oracle中,常用的10046及10053诊断事件的区别是什么?

♣题目部分在Oracle中,常用的10046及10053诊断事件的区别是什么? ♣答案部分最为常用的诊断事件是10046和10053事件。10046事件是Orac...

小麦苗DBA宝典 1241
上一篇: 杀掉一个正在执行的sql
下一篇: 趣味题sql,1-9,三个数字一组,前两组之后等于第三组
cmodnsbs880547
博客等级 码龄11年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值