Oracle获取执行计划之10046 技术详解

Oracle 的 10046 事件是性能调优中最常用的工具之一,通过跟踪会话的 SQL 执行细节,生成包含执行计划、等待事件、绑定变量等信息的跟踪文件,帮助定位性能瓶颈。以下是技术详解:

一、10046 事件基础

10046 是 Oracle 内部事件,通过设置不同级别收集不同详细程度的信息:

  • 级别 0:关闭跟踪
  • 级别 1:基础跟踪,包含 SQL 解析、执行、提取等阶段的统计信息(等同SQL_TRACE=TRUE)
  • 级别 4:在级别 1 基础上增加绑定变量信息
  • 级别 8:在级别 1 基础上增加等待事件信息
  • 级别 12:包含级别 4 和 8 的所有信息(绑定变量 + 等待事件)

关键参数:

  • timed_statistics:必须设置为 TRUE 以收集时间相关统计信息
  • max_dump_file_size:建议设置为 UNLIMITED 以避免文件大小限制

二、启用与禁用

2.1 传统set event方式

-- 开启级别12跟踪
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';
-- 可选:设置跟踪文件标识便于查找
ALTER SESSION SET TRACEFILE_IDENTIFIER='10046_TRACE';
--执行目标SQL
。。。。
--关闭跟踪
ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT OFF';

2.2 oradebug方式

oradebug setmypid
alter session set events '10046 trace name context forever ,level 12';
--示例SQL
SELECT  /*+ use_nl(a,b) */ count(1) FROM test1 a,test2 b  WHERE a.created > sysdate-10 and a.object_id=b.object_id;
alter session set events '10046 trace name context off';
oradebug close_trace
oradebug tracefile_name

三、10046跟踪SQL执行

3.1. 定位跟踪文件

以 select count(1) from test1 a ,test2 b where a.object_name=b.object_name为示例

oradebug setmypid
alter session set events '10046 trace name context forever ,level 12';
--示例SQLselect count(1) from test1 a ,test2 b where a.owner=b.owner;
alter session set events '10046 trace name context off';
oradebug close_trace
oradebug tracefile_name

输出trc文件

/u01/app/oracle/diag/rdbms/prod1/prod1/trace/prod1_ora_2188.trc

摘取关键内容

=====================
PARSING IN CURSOR #140235505604000 len=72 dep=0 uid=0 oct=3 lid=0 tim=1748307924927003 hv=233863389 ad='894cf078' sqlid='c4j52ac6z0y6x'select count(1) from test1 a ,test2 b where a.object_name=b.object_name
END OF STMT
PARSE #140235505604000:c=26303,e=27012,p=0,cr=169,cu=0,mis=1,r=0,dep=0,og=1,plh=627240799,tim=1748307924927001
EXEC #140235505604000:c=33,e=33,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=627240799,tim=1748307924927168
WAIT #140235505604000: nam='SQL*Net message to client' ela= 3 driver id=1650815232 #bytes=1 p3=0 obj#=87363 tim=1748307924927210
FETCH #140235505604000:c=165208,e=168932,p=0,cr=1746,cu=0,mis=0,r=1,dep=0,og=1,plh=627240799,tim=1748307925096171
STAT #140235505604000 id=1 cnt=1 pid=0 pos=1 obj=0 op='SORT AGGREGATE (cr=1746 pr=0 pw=0 time=168929 us)'
STAT #140235505604000 id=2 cnt=157113 pid=1 pos=1 obj=0 op='HASH JOIN  (cr=1746 pr=0 pw=0 time=237735 us cost=1244 size=202176216 card=1531638)'
STAT #140235505604000 id=3 cnt=86259 pid=2 pos=1 obj=87360 op='INDEX FAST FULL SCAN IDX_OWNER_OBJECT (cr=510 pr=0 pw=0 time=13086 us cost=138 size=6010884 card=91074)'
STAT #140235505604000 id=4 cnt=86270 pid=2 pos=2 obj=87363 op='TABLE ACCESS FULL TEST2 (cr=1236 pr=0 pw=0 time=27424 us cost=336 size=7664184 card=116124)'
WAIT #140235505604000: nam='SQL*Net message from client' ela= 188 driver id=1650815232 #bytes=1 p3=0 obj#=87363 tim=1748307925097399
FETCH #140235505604000:c=3,e=3,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,plh=627240799,tim=1748307925097445
WAIT #140235505604000: nam='SQL*Net message to client' ela= 1 driver id=1650815232 #bytes=1 p3=0 obj#=87363 tim=1748307925097467
WAIT #140235505604000: nam='SQL*Net message from client' ela= 785 driver id=1650815232 #bytes=1 p3=0 obj#=87363 tim=1748307925098263
CLOSE #140235505604000:c=8,e=8,dep=0,type=0,tim=1748307925098323

关于10046的参数意义,我们会放到故障处理分析中详解。

3.2. 工具解析

由于裸数据阅读不便,建议使用tkprof工具格式化

tkprof /u01/app/oracle/diag/rdbms/prod1/prod1/trace/prod1_ora_2188.trc  output.txt   

输出

********************************************************************************SQL ID: c4j52ac6z0y6x Plan Hash: 627240799select count(1)
fromtest1 a ,test2 b where a.object_name=b.object_namecall     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.02       0.02          0        169          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2      0.16       0.16          0       1746          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.19       0.19          0       1915          0           1Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: SYS
Number of plan statistics captured: 1Rows (1st) Rows (avg) Rows (max)  Row Source Operation
---------- ---------- ----------  ---------------------------------------------------1          1          1  SORT AGGREGATE (cr=1746 pr=0 pw=0 time=168929 us)157113     157113     157113   HASH JOIN  (cr=1746 pr=0 pw=0 time=237735 us cost=1244 size=202176216 card=1531638)86259      86259      86259    INDEX FAST FULL SCAN IDX_OWNER_OBJECT (cr=510 pr=0 pw=0 time=13086 us cost=138 size=6010884 card=91074)(object id 87360)86270      86270      86270    TABLE ACCESS FULL TEST2 (cr=1236 pr=0 pw=0 time=27424 us cost=336 size=7664184 card=116124)Elapsed times include waiting on following events:Event waited on                             Times   Max. Wait  Total Waited----------------------------------------   Waited  ----------  ------------SQL*Net message to client                       2        0.00          0.00SQL*Net message from client                     2        0.00          0.00
********************************************************************************

四、总结

10046 事件是 Oracle 性能调优的核心工具,通过灵活设置跟踪级别、结合分析工具及动态视图,可深入剖析 SQL 执行细节。在生产环境中需谨慎使用,结合 AWR/ASH 等工具形成完整诊断链条,以高效定位和解决性能问题。


🚀 更多数据库干货,欢迎关注【安呀智数据坊】

如果你觉得这篇文章对你有帮助,欢迎点赞 👍、收藏 ⭐ 和留言 💬 交流,让我知道你还想了解哪些数据库知识!

📬 想系统学习更多数据库实战案例与技术指南?

📊 实战项目分享

📚 技术原理讲解

🧠 数据库架构思维

🛠 工具推荐与实用技巧

立即关注,持续更新中 👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87092.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 日志监控工具对比:从 syslog 到 ELK 实战指南

更多云服务器知识,尽在hostol.com 你有没有被 Linux 上满屏飞滚的日志整崩溃过?看着 /var/log 目录越来越肥,关键日志像大海捞针一样藏在里面,每次出故障就像拆盲盒,赌你能不能第一眼看出问题。 日志系统&#xff0c…

本地服务器部署后外网怎么访问不了?内网地址映射互联网上无法连接问题的排查

我的网站部署搭建在本地服务器上的,在内网可以正常访问,但是外网无法访问,该怎么排查?局域网内部经过路由器的,有设置了虚拟服务器转发规则,在互联网公网上还是无法访问服务器怎么办?相信很多人…

如何免费正确安装微软的office全家桶

记录一下如何正确安装微软的office全家桶 找到安装包傻瓜式安装 找到安装包 安装包在附件,大家可以自行进行下载 傻瓜式安装 操作一目了然,点你需要的就行了

论文阅读:BLIPv1 2022.2

文章目录 一、研究背景与问题现有方法的局限性研究目标 二、核心方法与创新点多模态编码器 - 解码器混合架构(MED)标题生成与过滤(CapFilt)数据自举方法 三、实验与结果数据集与训练配置关键实验发现与 state-of-the-art 方法的对…

630,百度文心大模型4.5系列开源!真香

2025年被普遍认为是AI Agent商业化的关键之年,而大模型正是Agent能力的核心支撑。 当开发成本大幅降低,我们很可能看到各种垂直领域的Agent应用如雨后春笋般涌现。 技术普惠的现实意义对于广大AI创业者和开发者来说,这无疑是个好消息。 之…

数据结构:递归:斐波那契数列(Fibonacci Sequence)

目录 什么是斐波那契数列? 用递归推导Fibonacci 复杂度分析 用迭代推导Fibonacci 复杂度分析 递归优化:记忆化递归(Memoized Recursion) 复杂度分析 什么是斐波那契数列? 斐波那契数列(Fibonacci Seq…

ArcGIS Pro利用擦除工具,矢量要素消除另一矢量部分区域

选择“System Toolboxes”→“Analysis Tools.tbx”→“Overlay”→“Erase(擦除)”。 原始 擦除后

Linux: network: 性能 pause

最近看到一个问题,是关于网卡的throughput的性能问题,后来在ethtool-S里看到有pause的counter,这个也是网络性能问题的一个分析方向。算是学到了新的知识点。 $ grep -i -e 2025- -e pause ethtool*ens2f1np1 | grep -v -e ": 0\$" | headtail 4====

目标检测系列(五)已标注数据集(yolo格式)导入labelstudio继续标注

目录 1、labelstudio安装 2、yolo(txt)转json 3、COCO转yolo(仅针对coco格式标注信息) 4、设置环境变量并启动labelstudio 5、进入label studio创建工程并设置任务标签 6、安装http-server并启动文件映射服务 7、进入label studio导入json文件即可 1、labelstudio安装 …

pytorch底层原理学习--Libtorch

libtorch libtorch 是 PyTorch 的 C 实现版本,可以认为所有的pytorch底层都是由c实现,而pytorch的所有C实现就叫libtorch,也就是我们在pytorch官网getstart页面下载的cpytorch版本。我们用python写的pytorch神经网络代码都会通过pybind11将p…

TCP 三次握手协商 MSS 前,如何确定 MSS 值(附 Linux 内核源码)

文章目录 一、SYN总结影响 SYN MSS 的因素 二、SYNACK总结影响 SYNACK MSS 的因素 结合 Linux 内核源码 一、SYN 总结影响 SYN MSS 的因素 套接字选项 TCP_MAXSEG路由选项 advmss出口 MTU 减去 40(TCP 和 IP 的固定首部大小)IPV4_MAX_PMTU - 40(同上) 二、SYNACK 总结影响 SY…

扫描电子显微镜(SEM)夏令营面试基础题及答案

第二期表征问题SEM,后续会陆续更新其他表征 SEM和XRD一样,都是表征里面很常见的手段,基本上看论文这两个都是必不可少的 对于这部分内容,理解记忆>死记硬背,到时会问起来回答个大概就行, 像上…

Leetcode力扣解题记录--第49题(map)

题目链接:49. 字母异位词分组 - 力扣(LeetCode) 题目描述 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 示例 1: 输入: strs ["eat", "tea", "tan", &quo…

AI赋能智慧餐饮:Spring Boot+大模型实战指南

⚡ 餐饮行业三大痛点 高峰期点餐拥堵:300人餐厅,15个服务员仍排长队 后厨浪费严重:食材损耗率高达25%,成本失控 顾客体验同质化:复购率不足30% 🚀 智慧餐饮解决方案架构 🔥 核心模块代码实现…

用鸿蒙打造真正的跨设备数据库:从零实现分布式存储

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…

【Docker基础】Docker数据卷:数据卷的作用与使用场景

目录 1 Docker数据卷概述 1.1 什么是数据卷 1.2 数据卷的核心特性 3 数据卷与绑定挂载的对比 2.1 技术对比 2.2 选择建议 3 数据卷的核心作用 3.1 数据持久化 3.2 数据共享 3.3 备份与迁移 4 数据卷使用场景详解 4.1 数据库应用 4.2 日志集中管理 5 数据卷操作全…

安装GPU版本的Pytorch

前言 Pytorch是深度学习框架,在工作中我们一般是使用GPU版本的Pytorch,提高运行效率 安装GPU版本的Pytorch需要先安装CUDA和CUANN这两个GPU环境 如果准备安装GPU版本的Pytorch安装同志没有安装CUDA和CUANN,请看我上一篇文章 RTX5070显卡安装CUDA和CUDNN-CSDN博客 目录 安装…

微信小程序学习笔记

微信小程序学习笔记 一、文件和目录结构介绍 小程序包括:主体文件、页面文件 主体文件: app.js:小程序入口文件app.json:小程序的全局配置文件app.wxss:小程序的全局样式 页面文件:是每个页面所需的文…

抓包之通过wireshark抓ping包

写在前面 本文看下如何抓ping包。 1:正文 因为ping使用的是icmp协议,所以这里我们可以通过过滤icmp协议来进行抓包: 其中对于icmp请求报文状态码是8,如下: 响应状态码是0: 如下图是一个局域网环境中…

大文件分片上传 — nodejs

上传文件路由: var express require(express); var router express.Router(); const multer require(multer); const fs require(fs); const path require(path);// 确保上传目录存在 const uploadDir path.join(__dirname, ../backend/uploads); const temp…