碰到一些SQL问题,有时常规的方式,例如执行计划,不足以给出问题的线索。因此,可能还需要跟踪这条SQL,通过Oracle提供的trace,了解它内部执行的机制,从中寻找线索。

需求:用户TEST通过dbeaver登录到数据库,需要跟踪它所执行的SQL。

(1)确定TEST用户通过dbeaver执行SQL的会话信息。

sys或者具有v$访问权限的用户,执行如下SQL,

select p.PID,p.SPID,s.SID, s.serial#, s.program, p.tracefile
from v$process p,v$session s
where s.paddr = p.addr
and s.username='TEST';

得到会话信息,根据实际情况,确认第二条记录,是需要的会话,

(2)sys或者高级别账号,执行如下语句,其中session_id是(1)的s.sid,serial_num是(1)的s.serial#,

begin
dbms_monitor.session_trace_enable(session_id =>364,serial_num =>5061,binds =>TRUE,waits =>TRUE,plan_stat =>'all_executions');
end;
/

(3)TEST用户执行语句,

SELECT * FROM t;(t表不存在)
SELECT * FROM test;

(4)如上SQL执行的数据都存储到(1)的p.tracefile。从如下的展示,仅仅是(3)的这两条简单的语句,就写了33K的内容到trace,足以见得Oracle为了执行语句,其实内部机制还是很复杂的,

[oracle@VM-24-12-centos ~]$ ls -lrht /opt/oracle/diag/rdbms/bisalcdb/BISALCDB/trace/BISALCDB_ora_12992.trc
-rw-r----- 1 oracle oinstall 33K Mar  5 22:30 /opt/oracle/diag/rdbms/bisalcdb/BISALCDB/trace/BISALCDB_ora_12992.trc

打开trace,可以看到第一条SQL提示了"PARSE ERROR",第二条SQL展示了具体执行的信息(包括执行计划、PARSE/EXEC/FETCH等语句执行阶段的消耗),可以有助于进一步对SQL进行探索,

vi /opt/oracle/diag/rdbms/bisalcdb/BISALCDB/trace/BISALCDB_ora_12992.trc
...
=====================
PARSE ERROR #140644761776904:len=15 dep=0 uid=112 oct=3 lid=112 tim=29833470188260 err=942
SELECT * FROM t
WAIT #140644761776904: nam='SQL*Net break/reset to client' ela= 6 driver id=1413697536 break?=1 p3=0 obj#=0 tim=29833470188396
WAIT #140644761776904: nam='SQL*Net break/reset to client' ela= 171292 driver id=1413697536 break?=0 p3=0 obj#=0 tim=29833470359703
WAIT #140644761776904: nam='SQL*Net message to client' ela= 3 driver id=1413697536 #bytes=1 p3=0 obj#=0 tim=29833470359777*** 2023-03-05T22:30:19.385011+08:00 (BISALPDB1(3))
WAIT #140644761776904: nam='SQL*Net message from client' ela= 7794254 driver id=1413697536 #bytes=1 p3=0 obj#=0 tim=29833478155022
CLOSE #140644761776904:c=6,e=6,dep=0,type=0,tim=29833478155121
...
=====================
PARSING IN CURSOR #140644761776904 len=18 dep=0 uid=112 oct=3 lid=112 tim=29833495043325 hv=2851490487 ad='68c943b0' sqlid='46ncd1ynzckpr'
SELECT * FROM test
END OF STMT
PARSE #140644761776904:c=12575,e=27931,p=3,cr=47,cu=0,mis=1,r=0,dep=0,og=1,plh=1357081020,tim=29833495043325
EXEC #140644761776904:c=10,e=10,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=1357081020,tim=29833495043368
WAIT #140644761776904: nam='SQL*Net message to client' ela= 2 driver id=1413697536 #bytes=1 p3=0 obj#=0 tim=29833495043420
FETCH #140644761776904:c=2,e=2,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=1357081020,tim=29833495043440
STAT #140644761776904 id=1 cnt=0 pid=0 pos=1 obj=73296 op='TABLE ACCESS FULL TEST (cr=0 pr=0 pw=0 str=1 time=1 us cost=2 size=13 card=1)'
...

(5)关闭trace跟踪,则需要执行如下这条语句,

begin
dbms_monitor.session_trace_disable(session_id =>364,serial_num =>5061);
end;
/

可以将上述过程进行封装,通过工具、脚本等形式,快速调用,丰富我们排查问题的工具箱。

除此之外,10046和10053,也是我们探究问题需要具备的武器,

《如何生成其他会话的10046?》

《PL/SQL中SQL语句10053创建方法》

《有关10053事件,你知道这两个知识点么?》

《探索索引的奥秘 - 10053事件》

像常见的ORA-00060,同样通过Oracle自动生成的trace文件,可以从中找到锁之间的关联,进而有助于判断应用设计的逻辑顺序问题,

《了解ORA-00060和trace跟踪文件》

如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发pyq,

近期更新的文章:

《MySQL唯一索引有重复值且不是bug的场景》

《《数字中国建设整体布局规划》》

《MySQL日志 - Error Log错误日志》

《MySQL日志 - General Query Log》

《最近碰到的一些问题》

近期的热文:

《推荐一篇Oracle RAC Cache Fusion的经典论文》

《"红警"游戏开源代码带给我们的震撼》

文章分类和索引:

《公众号1100篇文章分类和索引》

寻找SQL执行线索的武器库相关推荐

  1. sql server varchar最大长度_来自灵魂的拷问—知道什么是SQL执行计划吗?

    面试官说:工作这么久了,应该知道sql执行计划吧,讲讲Sql的执行计划吧!看了看面试官手臂上纹的大花臂和一串看不懂的韩文,吞了吞口水,暗示自己镇定点,整理了一下思绪缓缓的对面试官说:我不会 面试官:. ...

  2. mybatis mysql 调用存储过程 多个返回值_图解MyBatis的SQL执行流程(干货)

    前言 MyBatis可能很多人都一直在用,但是MyBatis的SQL执行流程可能并不是所有人都清楚了,那么既然进来了,通读本文你将收获如下: 1.Mapper接口和映射文件是如何进行绑定的 2.MyB ...

  3. beeline执行sql文件_MyBatis的SQL执行流程不清楚?看完这一篇就够了

    前言 MyBatis可能很多人都一直在用,但是MyBatis的SQL执行流程可能并不是所有人都清楚了,那么既然进来了,通读本文你将收获如下: 1.Mapper接口和映射文件是如何进行绑定的 2.MyB ...

  4. mybatis mysql 调用存储过程 多个返回值_MyBatis的SQL执行流程不清楚?很简单!

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 作者:双子孤狼- blog.csdn.net/zwx900102/article/details/108455514 ...

  5. 查询sql执行计划_使用SQL执行计划进行查询性能调整

    查询sql执行计划 In the previous articles of this series (see the index at bottom), we went through many as ...

  6. 一万一千字!结合代码超详细讲解SQL执行流程(二)!干货到底!建议收藏!

    上文我们已经学习到查询SQL语句的执行过程中如何获取 BoundSql!接下来继续从查询SQL语句的执行过程中如何创建 StatementHandler!喜欢的朋友们可以来个一键三连哦~ 目录 查询S ...

  7. 来自灵魂的拷问——知道什么是SQL执行计划吗?

    面试官说:工作这么久了,应该知道sql执行计划吧,讲讲Sql的执行计划吧! 看了看面试官手臂上纹的大花臂和一串看不懂的韩文,吞了吞口水,暗示自己镇定点,整理了一下思绪缓缓的对面试官说:我不会 面试官: ...

  8. MySQL系列---架构与SQL执行流程详解

    文章目录 1. 背景 2. 架构体系 2.1 架构图 2.2 模块详解 2.3 架构分层 3. 查询SQL语句执行流程 3.1 连接 3.1.1 MySQL支持的通信协议 3.1.2 通信方式 3.2 ...

  9. [06][03][01] MySQL架构与SQL执行流程

    文章目录 1. 一条 SQL 语句执行步骤 1.1 通信 1.1.1 通信类型 1.1.2 连接方式 1.1.3 通信协议 1.1.4 通信方式 1.2 查询缓存 1.3 语法解析和预处理 (Pars ...

最新文章

  1. 在HTML5 localStorage中存储对象
  2. SAP SD:SAP信贷出口
  3. linux 信号 sigaction(是signal的扩展,在多线程应用中替代了signal)(除了信号值信息外,还可以附加数值信息(以及指针:不可跨进程):sigqueue()函数)
  4. java中时间入数据库格式转换_数据库中字段类型为datetime,转换成java中的Date类型...
  5. Shell程序设计 | 基本语法 :变量、I/O、算术运算、条件判断、流程控制、函数
  6. 计算机网络实验arp协议分析,计算机网络ARP地址协议解析实验报告
  7. Java框架之SpringMVC 05-拦截器-异常映射-Spring工作流程
  8. 百度 PaddlePaddle开源视频分类模型Attention Cluster,曾夺挑战赛冠军
  9. js中常见的数据加密与解密的方法
  10. 使用Bochs写Hello world
  11. xos虚拟系统 代理服务器,VMware宝典:一手缔造超级虚拟网络
  12. 查看Casio PDA 的物理地址 MAC (DT-X7系列)
  13. 大数据时代没有隐私,我们都在裸奔
  14. 怎样把PDF图片旋转90度
  15. left semi join 和 left join 区别
  16. 利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管,使8个提示灯依次一个一个闪动,闪动频率为10次每秒(8个灯亮一遍为一个周期),循环
  17. 如何使用java解析json文件并将其写入数据库
  18. 华农软件工程实验报告_华南农业大学软件工程大一课程表
  19. 每日一课 | range()函数用法
  20. 收集SEO外链资源的方法

热门文章

  1. dota2 linux文件位置,DOTA2将更新起源2引擎 载入运行有所提高
  2. 【20200705】CISA考题练习
  3. 天气转冷,注意保暖哦!
  4. 慢特征分析(Slow Feature Analysis,SFA)算法
  5. SpringMVC整合Swagger2
  6. MYSQL数据库四种索引类型的简单使用
  7. java.好友发送验证申请,微信怎样填写验证语可以提高微信加好友通过率?
  8. ECShop微信小程序,原生小程序,ecshop最新版商城小程序完整版
  9. 10GX:结构化布线的里程碑(转)
  10. Spyder上安装TensorFlow环境教程