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
英文地址,請注明出處:http://en.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…