Oracle 执行计划查看方法汇总及优劣对比

在 Oracle 数据库中,查看执行计划是优化 SQL 语句性能的重要工具。以下是几种常用的查看执行计划的方法及其优劣比较:

1. 使用 EXPLAIN PLAN FORDBMS_XPLAN.DISPLAY

方法
  1. 执行 EXPLAIN PLAN FOR 语句

    EXPLAIN PLAN FOR
    SELECT * FROM your_table WHERE your_column = 'some_value';
    
  2. 查看执行计划

    SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
    
优点
  • 简单易用:适用于大多数情况,操作简单。
  • 详细信息:可以提供详细的执行计划信息,包括操作类型、成本、行数等。
缺点
  • 不反映实际执行EXPLAIN PLAN 只是模拟执行计划,不一定反映实际执行情况。
  • 需要权限:需要 EXPLAIN PLAN 权限。

2. 使用 DBMS_XPLAN.DISPLAY_CURSOR

方法
  1. 执行 SQL 语句

    SELECT * FROM your_table WHERE your_column = 'some_value';
    
  2. 查看执行计划

    SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'ALLSTATS LAST'));
    
优点
  • 反映实际执行:查看的是实际执行的计划,更能反映真实的性能情况。
  • 详细统计信息:可以提供实际的执行统计信息,如 I/O 次数、CPU 时间等。
缺点
  • 需要执行 SQL:必须先执行 SQL 语句,才能查看执行计划。
  • 依赖共享池:只能查看在共享池中的 SQL 语句的执行计划。

3. 使用 AUTOTRACE(仅限 SQL*Plus)

方法
  1. 启用 AUTOTRACE

    SET AUTOTRACE ON EXPLAIN;
    
  2. 执行 SQL 语句

    SELECT * FROM your_table WHERE your_column = 'some_value';
    
  3. 禁用 AUTOTRACE

    SET AUTOTRACE OFF;
    
优点
  • 集成在 SQL*Plus:适用于 SQL*Plus 用户,操作简便。
  • 即时反馈:执行 SQL 语句时立即显示执行计划。
缺点
  • 仅限 SQL*Plus:只能在 SQL*Plus 中使用。
  • 功能有限:不如 DBMS_XPLAN.DISPLAY 提供的信息详细。

4. 使用 V$SQL_PLAN 视图

方法
  1. 找到 SQL 语句的 SQL_ID

    SELECT sql_id, sql_text FROM v$sql WHERE sql_text LIKE '%your_sql_statement%';
    
  2. 查询执行计划

    SELECT * FROM v$sql_plan WHERE sql_id = 'your_sql_id';
    
优点
  • 灵活性高:可以直接查询视图,灵活度高。
  • 实时信息:可以查看当前正在执行的 SQL 语句的执行计划。
缺点
  • 复杂性:需要手动查询视图,操作相对复杂。
  • 信息冗余:返回的信息较多,需要筛选有用的部分。

5. 使用 Oracle Enterprise Manager (OEM)

方法
  1. 登录 OEM
  2. 导航到 SQL 性能页面
  3. 输入 SQL 语句并查看执行计划
优点
  • 图形界面:提供图形化的用户界面,易于理解和操作。
  • 综合信息:可以查看多种性能指标,不仅仅是执行计划。
缺点
  • 需要 OEM:需要安装和配置 Oracle Enterprise Manager。
  • 资源消耗:图形界面可能消耗更多系统资源。

6. 使用 DBMS_XPLAN.DISPLAY_AWR

方法
  1. 找到 SQL 语句的 SQL_ID 和 PLAN_HASH_VALUE

    SELECT sql_id, plan_hash_value FROM dba_hist_sqlstat WHERE sql_text LIKE '%your_sql_statement%';
    
  2. 查询执行计划

    SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('your_sql_id', 'your_plan_hash_value'));
    
优点
  • 历史信息:可以查看 AWR 中的历史执行计划,有助于长期性能分析。
  • 详细统计:提供详细的执行统计信息。
缺点
  • 需要 AWR:需要 AWR 功能开启,且需要相应的权限。
  • 复杂性:操作相对复杂,需要查找 SQL_ID 和 PLAN_HASH_VALUE。

7. 使用事件 10046 跟踪

方法
  1. 启用事件 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);
      
  2. 执行 SQL 语句

    SELECT * FROM your_table WHERE your_column = 'some_value';
    
  3. 禁用事件 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);
      
  4. 查看跟踪文件

    • 查找跟踪文件的位置,通常在

      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

方法
  1. 设置统计级别为 ALL

    ALTER SESSION SET STATISTICS_LEVEL=ALL;
    
  2. 执行 SQL 语句

    SELECT * FROM your_table WHERE your_column = 'some_value';
    
  3. 查看执行计划和统计信息

    SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'ALLSTATS LAST'));
    
优点
  • 详细统计信息:可以提供详细的执行计划和统计信息,包括 I/O 次数、CPU 时间等。
  • 反映实际执行:查看的是实际执行的计划,更能反映真实的性能情况。
  • 操作简单:只需设置统计级别并执行 SQL 语句即可。
缺点
  • 性能开销:设置 STATISTICS_LEVELALL 会增加执行 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:适用于需要详细统计信息和反映实际执行情况的场景,操作简单但有性能开销。

希望这些方法和优劣比较对你有所帮助!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java开发经验——SpringRestTemplate常见错误

摘要 本文分析了在使用Spring框架的RestTemplate发送表单请求时遇到的常见错误。主要问题在于将表单参数错误地以JSON格式提交,导致服务器无法正确解析参数。文章提供了错误案例的分析,并提出了修正方法。 1. 表单参数类型是MultiValueMap RestControl…

《生成式 AI》课程 作业6 大语言模型(LLM)的训练微调 Fine Tuning -- part1

资料来自李宏毅老师《生成式 AI》课程,如有侵权请通知下线 Introduction to Generative AI 2024 Spring 该文档主要介绍了国立台湾大学(NTU)2024 年春季 “生成式人工智能(GenAI)” 课程的作业 5(GenAI HW…

tcpdump抓包 wireShark

TCPdump抓包工具介绍 TCPdump,全称dump the traffic on anetwork,是一个运行在linux平台可以根据使用者需求对网络上传输的数据包进行捕获的抓包工具。 tcpdump可以支持的功能: 1、在Linux平台将网络中传输的数据包全部捕获过来进行分析 2、支持网络层…

利用Hooka开源的多种功能shellcode加载器实现快速免杀火绒,静态360+360杀毒,微步查杀1,vt查杀7(教程)

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于…

MyBatis中特殊SQL的执行

目录 1.模糊查询 2.批量删除 3.动态设置表名 4.添加功能获取自增的主键 1.模糊查询 List<User> getUserByLike(Param("username") String username); <select id"getUserByLike" resultType"com.atguigu.mybatis.pojo.User">&…

九、FOC原理详解

1、FOC简介 FOC&#xff08;field-oriented control&#xff09;为磁场定向控制&#xff0c;又称为矢量控制&#xff08;vectorcontrol&#xff09;&#xff0c;是目前无刷直流电机&#xff08;BLDC&#xff09;和永磁同步电机&#xff08;PMSM&#xff09;高效控制的最佳选择…

selinux及防火墙

selinux说明 SELinux 是 Security-Enhanced Linux 的缩写&#xff0c;意思是安全强化的 linux 。 SELinux 主要由美国国家安全局&#xff08; NSA &#xff09;开发&#xff0c;当初开发的目的是为了避免资源的误用。 httpd进程标签&#xff08;/usr/share/nginx/html &#…

Flink学习连载第二篇-使用flink编写WordCount(多种情况演示)

使用Flink编写代码&#xff0c;步骤非常固定&#xff0c;大概分为以下几步&#xff0c;只要牢牢抓住步骤&#xff0c;基本轻松拿下&#xff1a; 1. env-准备环境 2. source-加载数据 3. transformation-数据处理转换 4. sink-数据输出 5. execute-执行 DataStream API开发 //n…

解锁PPTist的全新体验:Windows系统环境下本地部署与远程访问

文章目录 前言1. 本地安装PPTist2. PPTist 使用介绍3. 安装Cpolar内网穿透4. 配置公网地址5. 配置固定公网地址 前言 在Windows系统环境中&#xff0c;如何本地部署开源在线演示文稿应用PPTist&#xff0c;并实现远程访问&#xff1f;本文将为您提供详细的部署和配置指南。 P…

《第十部分》1.STM32之通信接口《精讲》之IIC通信---介绍

经过近一周的USART学习&#xff0c;我深刻体会到通信对单片机的重要性。它就像人类的手脚和大脑&#xff0c;只有掌握了通信技术&#xff0c;单片机才能与外界交互&#xff0c;展现出丰富多彩的功能&#xff0c;变得更加强大和实用。 单片机最基础的“语言”是二进制。可惜&am…

URL在线编码解码- 加菲工具

URL在线编码解码 打开网站 加菲工具 选择“URL编码解码” 输入需要编码/解码的内容&#xff0c;点击“编码”/“解码”按钮 编码&#xff1a; 解码&#xff1a; 复制已经编码/解码后的内容。

【TEST】Apache JMeter + Influxdb + Grafana

介绍 使用Jmeter发起测试&#xff0c;测试结果存入Influxdb&#xff0c;Grafana展示你的测试结果。 环境 windows 10docker desktopJDK17 安装 Apache JMeter 访问官网&#xff08;Apache JMeter - Apache JMeter™&#xff09;下载JMeter&#xff08;目前最新版本5.6.3&a…

Linux笔记---进程:进程切换与O(1)调度算法

1. 补充概念 1.1 并行与并发 竞争性&#xff1a;系统进程数目众多&#xff0c;而CPU资源只有少量&#xff0c;甚至只有1个&#xff0c;所以进程之间是具有竞争属性的。为了高效完成任务&#xff0c;更合理竞争相关资源&#xff0c;便具有了优先级。独立性&#xff1a;多进程运…

C语言:深入理解指针

一.内存和地址 我们知道计算机上CPU&#xff08;中央处理器&#xff09;在处理数据的时候&#xff0c;需要的数据是在内存中读取的&#xff0c;处理后的数据也会放回内存中&#xff0c;那我们买电脑的时候&#xff0c;电脑上内存是 8GB/16GB/32GB 等&#xff0c;那这些内存空间…

mybatis学习(一)

声明&#xff1a;该内容来源于动力节点&#xff0c;本人在学习mybatis过程中参考该内容&#xff0c;并自己做了部分笔记&#xff0c;但个人觉得本人做的笔记不如动力节点做的好&#xff0c;故使用动力节点的笔记作为后续mybatis的复习。 一、MyBatis概述 1.1 框架 在文献中看…

【C++】list模拟实现(详解)

本篇来详细说一下list的模拟实现&#xff0c;list的大体框架实现会比较简单&#xff0c;难的是list的iterator的实现。我们模拟实现的是带哨兵位头结点的list。 1.准备工作 为了不和C库里面的list冲突&#xff0c;我们在实现的时候用命名空间隔开。 //list.h #pragma once #…

IT服务团队建设与管理

在 IT 服务团队中&#xff0c;需要明确各种角色。例如系统管理员负责服务器和网络设备的维护与管理&#xff1b;软件工程师专注于软件的开发、测试和维护&#xff1b;运维工程师则保障系统的稳定运行&#xff0c;包括监控、故障排除等。通过清晰地定义每个角色的职责&#xff0…

初学 flutter 问题记录

windows搭建flutter运行环境 一、运行 flutter doctor遇到的问题 Xcmdline-tools component is missingRun path/to/sdkmanager --install "cmdline-tools;latest"See https://developer.android.com/studio/command-line for more details.1&#xff09;cmdline-to…

神经网络(系统性学习二):单层神经网络(感知机)

此前篇章&#xff1a; 神经网络中常用的激活函数 神经网络&#xff08;系统性学习一&#xff09;&#xff1a;入门篇 单层神经网络&#xff08;又叫感知机&#xff09; 单层网络是最简单的全连接神经网络&#xff0c;它仅有输入层和输出层&#xff0c;没有隐藏层。即&#x…

H.265流媒体播放器EasyPlayer.js播放器提示MSE不支持H.265解码可能的原因

随着人工智能和机器学习技术的应用&#xff0c;流媒体播放器将变得更加智能&#xff0c;能够根据用户行为和偏好提供个性化的内容推荐。总体而言&#xff0c;流媒体播放器的未来发展将更加注重技术创新和用户互动&#xff0c;以适应不断变化的市场需求和技术进步。 提示MSE不支…