Oracle 执行计划查看方法汇总及优劣对比
在 Oracle 数据库中,查看执行计划是优化 SQL 语句性能的重要工具。以下是几种常用的查看执行计划的方法及其优劣比较:
1. 使用 EXPLAIN PLAN FOR 和 DBMS_XPLAN.DISPLAY
方法
-
执行
EXPLAIN PLAN FOR语句:EXPLAIN PLAN FOR SELECT * FROM your_table WHERE your_column = 'some_value'; -
查看执行计划:
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
优点
- 简单易用:适用于大多数情况,操作简单。
- 详细信息:可以提供详细的执行计划信息,包括操作类型、成本、行数等。
缺点
- 不反映实际执行:
EXPLAIN PLAN只是模拟执行计划,不一定反映实际执行情况。 - 需要权限:需要
EXPLAIN PLAN权限。
2. 使用 DBMS_XPLAN.DISPLAY_CURSOR
方法
-
执行 SQL 语句:
SELECT * FROM your_table WHERE your_column = 'some_value'; -
查看执行计划:
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'ALLSTATS LAST'));
优点
- 反映实际执行:查看的是实际执行的计划,更能反映真实的性能情况。
- 详细统计信息:可以提供实际的执行统计信息,如 I/O 次数、CPU 时间等。
缺点
- 需要执行 SQL:必须先执行 SQL 语句,才能查看执行计划。
- 依赖共享池:只能查看在共享池中的 SQL 语句的执行计划。
3. 使用 AUTOTRACE(仅限 SQL*Plus)
方法
-
启用 AUTOTRACE:
SET AUTOTRACE ON EXPLAIN; -
执行 SQL 语句:
SELECT * FROM your_table WHERE your_column = 'some_value'; -
禁用 AUTOTRACE:
SET AUTOTRACE OFF;
优点
- 集成在 SQL*Plus:适用于 SQL*Plus 用户,操作简便。
- 即时反馈:执行 SQL 语句时立即显示执行计划。
缺点
- 仅限 SQL*Plus:只能在 SQL*Plus 中使用。
- 功能有限:不如
DBMS_XPLAN.DISPLAY提供的信息详细。
4. 使用 V$SQL_PLAN 视图
方法
-
找到 SQL 语句的 SQL_ID:
SELECT sql_id, sql_text FROM v$sql WHERE sql_text LIKE '%your_sql_statement%'; -
查询执行计划:
SELECT * FROM v$sql_plan WHERE sql_id = 'your_sql_id';
优点
- 灵活性高:可以直接查询视图,灵活度高。
- 实时信息:可以查看当前正在执行的 SQL 语句的执行计划。
缺点
- 复杂性:需要手动查询视图,操作相对复杂。
- 信息冗余:返回的信息较多,需要筛选有用的部分。
5. 使用 Oracle Enterprise Manager (OEM)
方法
- 登录 OEM。
- 导航到 SQL 性能页面。
- 输入 SQL 语句并查看执行计划。
优点
- 图形界面:提供图形化的用户界面,易于理解和操作。
- 综合信息:可以查看多种性能指标,不仅仅是执行计划。
缺点
- 需要 OEM:需要安装和配置 Oracle Enterprise Manager。
- 资源消耗:图形界面可能消耗更多系统资源。
6. 使用 DBMS_XPLAN.DISPLAY_AWR
方法
-
找到 SQL 语句的 SQL_ID 和 PLAN_HASH_VALUE:
SELECT sql_id, plan_hash_value FROM dba_hist_sqlstat WHERE sql_text LIKE '%your_sql_statement%'; -
查询执行计划:
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('your_sql_id', 'your_plan_hash_value'));
优点
- 历史信息:可以查看 AWR 中的历史执行计划,有助于长期性能分析。
- 详细统计:提供详细的执行统计信息。
缺点
- 需要 AWR:需要 AWR 功能开启,且需要相应的权限。
- 复杂性:操作相对复杂,需要查找 SQL_ID 和 PLAN_HASH_VALUE。
7. 使用事件 10046 跟踪
方法
-
启用事件 10046 跟踪:
-
对于当前会话:
ALTER SESSION SET EVENTS '10046 trace name context forever, level 12'; -
对于特定的会话(假设 SID 为 123,SERIAL# 为 456):
EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(123, 456, TRUE);
-
-
执行 SQL 语句:
SELECT * FROM your_table WHERE your_column = 'some_value'; -
禁用事件 10046 跟踪:
-
对于当前会话:
ALTER SESSION SET EVENTS '10046 trace name context off'; -
对于特定的会话(假设 SID 为 123,SERIAL# 为 456):
EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(123, 456, FALSE);
-
-
查看跟踪文件:
-
查找跟踪文件的位置,通常在
user_dump_dest参数指定的目录下。
SHOW PARAMETER user_dump_dest -
使用
tkprof工具格式化跟踪文件:
tkprof trace_file.trc output_file.txt explain=your_username/your_password -
查看生成的
output_file.txt文件,其中包含详细的执行计划和性能信息。
-
优点
- 详细信息:提供详细的执行计划、执行时间和等待事件等信息,有助于深入分析性能问题。
- 灵活性:可以针对特定的会话或当前会话启用跟踪。
- 历史信息:可以保留长时间的跟踪信息,便于后续分析。
缺点
- 性能开销:启用跟踪会增加系统开销,特别是在高负载情况下。
- 复杂性:操作相对复杂,需要手动启用和禁用跟踪,以及使用
tkprof格式化跟踪文件。 - 文件管理:需要管理和清理生成的跟踪文件,以免占用过多磁盘空间。
8. 使用 STATISTICS_LEVEL=ALL
方法
-
设置统计级别为 ALL:
ALTER SESSION SET STATISTICS_LEVEL=ALL; -
执行 SQL 语句:
SELECT * FROM your_table WHERE your_column = 'some_value'; -
查看执行计划和统计信息:
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'ALLSTATS LAST'));
优点
- 详细统计信息:可以提供详细的执行计划和统计信息,包括 I/O 次数、CPU 时间等。
- 反映实际执行:查看的是实际执行的计划,更能反映真实的性能情况。
- 操作简单:只需设置统计级别并执行 SQL 语句即可。
缺点
- 性能开销:设置
STATISTICS_LEVEL为ALL会增加执行 SQL 语句的性能开销。 - 临时设置:仅对当前会话有效,需要在每个会话中手动设置。
总结
| 方法 | 优点 | 缺点 |
|---|---|---|
EXPLAIN PLAN FOR + DBMS_XPLAN.DISPLAY | 简单易用,详细信息 | 不反映实际执行,需要权限 |
DBMS_XPLAN.DISPLAY_CURSOR | 反映实际执行,详细统计信息 | 需要执行 SQL,依赖共享池 |
AUTOTRACE | 集成在 SQL*Plus,即时反馈 | 仅限 SQL*Plus,功能有限 |
V$SQL_PLAN | 灵活性高,实时信息 | 复杂性高,信息冗余 |
| Oracle Enterprise Manager (OEM) | 图形界面,综合信息 | 需要 OEM,资源消耗 |
DBMS_XPLAN.DISPLAY_AWR | 历史信息,详细统计 | 需要 AWR,复杂性 |
| 事件 10046 跟踪 | 详细信息,灵活性高,历史信息 | 性能开销,复杂性,文件管理 |
ALTER SESSION SET STATISTICS_LEVEL=ALL | 详细统计信息,反映实际执行,操作简单 | 性能开销,临时设置 |
适用场景
EXPLAIN PLAN FOR+DBMS_XPLAN.DISPLAY:适用于简单的查询优化,快速查看执行计划。DBMS_XPLAN.DISPLAY_CURSOR:适用于已经执行的 SQL 语句,需要查看实际执行情况。AUTOTRACE:适用于 SQL*Plus 用户,需要快速反馈。V$SQL_PLAN:适用于需要灵活查询执行计划的场景。- Oracle Enterprise Manager (OEM):适用于需要图形化界面和综合性能信息的场景。
DBMS_XPLAN.DISPLAY_AWR:适用于需要查看历史执行计划的场景。- 事件 10046 跟踪:适用于需要深入分析性能问题,特别是涉及执行时间和等待事件的场景。
STATISTICS_LEVEL=ALL:适用于需要详细统计信息和反映实际执行情况的场景,操作简单但有性能开销。
希望这些方法和优劣比较对你有所帮助!
相关文章:
Oracle 执行计划查看方法汇总及优劣对比
在 Oracle 数据库中,查看执行计划是优化 SQL 语句性能的重要工具。以下是几种常用的查看执行计划的方法及其优劣比较: 1. 使用 EXPLAIN PLAN FOR 和 DBMS_XPLAN.DISPLAY 方法 执行 EXPLAIN PLAN FOR 语句: EXPLAIN PLAN FOR SELECT * FROM …...
TCL大数据面试题及参考答案
Mysql 索引失效的场景 对索引列进行运算或使用函数:当在索引列上进行数学运算、函数操作等,索引可能失效。例如,在存储年龄的列上建立了索引,若查询语句是 “SELECT * FROM table WHERE age + 1 = 20”,这里对索引列 age 进行了加法运算,数据库会放弃使用索引而进行全表扫…...
九、FOC原理详解
1、FOC简介 FOC(field-oriented control)为磁场定向控制,又称为矢量控制(vectorcontrol),是目前无刷直流电机(BLDC)和永磁同步电机(PMSM)高效控制的最佳选择…...
vue页面成绩案例(for渲染表格/删除/添加/统计总分/平均分/不及格显红色/输入内容去首尾空格trim/输入内容转数字number)
1.使用v-if 和v-else 完成<tbody>标签的条件渲染 2.v-for完成列表渲染 3.:class完成分数标红的条件控制 删哪个就传哪个的id,基于这个id去过滤掉相同id的项,把剩下的项返回 a标签的默认点击事件会跳转 这里要禁止默认事件 即使用click.provent 就…...
STM32编程小工具FlyMcu和STLINK Utility 《通俗易懂》破解
FlyMcu FlyMcu 模拟仿真软件是一款用于 STM32 芯片 ISP 串口烧录程序的专用工具,免费,且较为非常容易下手,好用便捷。 注意:STM32 芯片的 ISP 下载,只能使用串口1(USART1),对应的串口…...
Centos使用docker搭建Graylog日志平台
日志管理系统有很多,比如ELK,Graylog,LokiGrafanaPromtail 适用场景: 1.如果需求复杂,服务器资源不受限制,推荐使用ELK(Logstash Elasticsearch Kibana)方案; 2.如果需求仅是将…...
自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例
Kafka:分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析:从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析:…...
【SQL】【数据库】语句翻译例题
SQL自然语言到SQL翻译知识点 以下是将自然语言转化为SQL语句的所有相关知识点,分门别类详细列出,并结合技巧说明。 1. 数据库操作 创建数据库 自然语言:创建一个名为“TestDB”的数据库。 CREATE DATABASE TestDB;技巧:识别**“创…...
linux基本命令2
7. 文件查找和搜索 (继续) find — 查找文件 find /path/to/search -name "file_name" # 根据名称查找文件 find /path/to/search -type f # 查找所有普通文件 find /path/to/search -type d # 查找所有目录 find /path/to/search -name "*.txt" # 查找…...
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
Redisson 是一个高性能的 Java Redis 客户端,提供了丰富的分布式工具集,如分布式锁、Map、Queue 等,帮助开发者简化 Redis 的操作。在集成 Redisson 到项目时,开发者通常有两种选择: 使用 Redisson 原始依赖。使用 Re…...
Git命令使用与原理详解
1.仓库 # 在当前目录新建一个Git代码库 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init [project-name] # 下载一个项目和它的整个代码历史 $ git clone [url]2.配置 # 显示当前的Git配置 $ git config --list # 编辑Git配置文件 $ git co…...
Linux:自定义Shell
本文旨在通过自己完成一个简单的Shell来帮助理解命令行Shell这个程序。 目录 一、输出“提示” 二、获取输入 三、切割字符串 四、执行指令 1.子进程替换 2.内建指令 一、输出“提示” 这个项目基于虚拟机Ubuntu22.04.5实现。 打开终端界面如图所示。 其中。 之前&#x…...
vue项目中中怎么获取环境变量
在 Vue 项目中,有几种获取环境变量的方法。最常用的是通过 import.meta.env 来访问。 1.首先在项目根目录创建环境变量文件: .env # 所有环境都会加载 .env.development # 开发环境 .env.production # 生产环境2.在环境变量文件…...
C#里怎么样使用正则表达式?
C#里怎么样使用正则表达式? 正则表达式是由普通字符(如英文字母)以及特殊字符(也称为元字符)组成的一种文字模式 这种文字模式可用于检查字符串的值是否满足一定的规则,例如: 验证输入的邮箱是否合法 输入的身份证号码是否合法 输入的用户名是否满足条件等 也可以…...
《生成式 AI》课程 第5講:訓練不了人工智慧?你可以訓練你自己 (下)
资料来自李宏毅老师《生成式 AI》课程,如有侵权请通知下线 Introduction to Generative AI 2024 Springhttps://speech.ee.ntu.edu.tw/~hylee/genai/2024-spring.php 摘要 这一系列的作业是为 2024 年春季的《生成式 AI》课程设计的,共包含十个作业。…...
Vue 动态给 data 添加新属性深度解析:问题、原理与解决方案
在 Vue 中,动态地向 data 中添加新的属性是一个常见的需求,但它也可能引发一些问题,尤其是关于 响应式更新 和 数据绑定 的问题。Vue 的响应式系统通过 getter 和 setter 来追踪和更新数据,但 动态添加新属性 时,Vue 并不会自动为这些新属性创建响应式链接。 1. 直接向 V…...
【Pytest+Yaml+Allure】实现接口自动化测试框架
一、框架思想 requestsyamlpytestallure实现接口自动化框架。结合数据驱动和分层思想,将代码与数据分离,易维护,易上手。使用yaml编写编写测试用例,利用requests库发送请求,使用pytest管理用例,allure生成…...
el-input绑定点击回车事件意外触发页面刷新
小伙伴们在项目中应该还是比较常用键盘指定按键事件的,尤其是一些筛选条件的通过点击键盘回车按键去触发搜索 例如: <el-form><el-form-item label条件title><el-input v-modelformData.searchKey keydown.entersearch></el-input…...
Golang的语言特性与鸭子类型
Golang的语言特性与鸭子类型 前言 什么是鸭子类型? Suppose you see a bird walking around in a farm yard. This bird has no label that says ‘duck’. But the bird certainly looks like a duck. Also, he goes to the pond and you notice that he swims l…...
如何在Linux系统中排查GPU上运行的程序
如何在Linux系统中排查GPU上运行的程序 在Linux系统中,随着深度学习和高性能计算的普及,GPU资源的管理和监控变得越来越重要。当您遇到GPU资源不足或性能下降的问题时,需要能够快速定位并解决这些问题。本文将介绍几种常用的方法来帮助您排查…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
