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资源不足或性能下降的问题时,需要能够快速定位并解决这些问题。本文将介绍几种常用的方法来帮助您排查…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...