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

 更新时间:2024年11月25日 09:55:58   作者:J.P.August  
这篇文章主要介绍了Oracle执行计划查看方法汇总及优劣对比,在 Oracle 数据库中,查看执行计划是优化 SQL 语句性能的重要工具,本文给大家介绍了几种常用的查看执行计划的方法及其优劣比较,需要的朋友可以参考下

在 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

参数指定的目录下。

使用

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执行计划查看方法的资料请关注脚本之家其它相关文章!

相关文章

  • 查询Oracle数据库表是否被锁的实现方式

    查询Oracle数据库表是否被锁的实现方式

    本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,还提到在尝试加锁之前判断记录是否已经被锁定,以避免锁定已锁定的记录
    2025-02-02
  • oracle数据库中listagg函数使用详解

    oracle数据库中listagg函数使用详解

    listagg函数是Oracle数据库中的一个聚合函数,用于将一组值连接成一个以指定分隔符分隔的字符串,这篇文章主要给大家介绍了关于oracle数据库中listagg函数使用的相关资料,需要的朋友可以参考下
    2024-06-06
  • Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)

    Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)

    Oracle 的安装和卸载相较于其他 mysql 要麻烦些,小编特此分享一篇教程关于Oracle11g 彻底卸载干净并重新安装,有需要的朋友可以参考下本文
    2021-06-06
  • Oracle数据库中SQL开窗函数的使用

    Oracle数据库中SQL开窗函数的使用

    这篇文章主要介绍了Oracle数据库中SQL开窗函数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Oracle 管道 解决Exp/Imp大量数据处理问题

    Oracle 管道 解决Exp/Imp大量数据处理问题

    Oracle的exp/imp是许多用户经常使用的两个工具. 它们常被用来做数据库的逻辑备份,数据库重组和数据转移等工作.
    2009-07-07
  • Oracle执行计划查看方法汇总及优劣对比详解

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

    这篇文章主要介绍了Oracle执行计划查看方法汇总及优劣对比,在 Oracle 数据库中,查看执行计划是优化 SQL 语句性能的重要工具,本文给大家介绍了几种常用的查看执行计划的方法及其优劣比较,需要的朋友可以参考下
    2024-11-11
  • [Oracle] 浅析令人抓狂的ORA-01555问题

    [Oracle] 浅析令人抓狂的ORA-01555问题

    首先要说明的一点是:ORA-01555错误是一个“安全”的错误,它不会造成数据丢失或损坏,只是会让接收到该错误的查询无法继续。以下就是对发生ORA-01555错误的原因进行了介绍,需要的朋友可以参考下
    2013-07-07
  • 45个非常有用的 Oracle 查询语句小结

    45个非常有用的 Oracle 查询语句小结

    这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询。这些是所有 Oracle 开发者都必备的技能,所以快快收藏吧
    2014-04-04
  • 简单说明Oracle数据库中对死锁的查询及解决方法

    简单说明Oracle数据库中对死锁的查询及解决方法

    这篇文章主要介绍了Oracle数据库中对死锁的查询及解决方法,文中用两个表创造死锁的简单例子来说明对死锁的撤销方法,需要的朋友可以参考下
    2016-01-01
  • Windows10系统中Oracle完全卸载正确步骤

    Windows10系统中Oracle完全卸载正确步骤

    自己刚到公司就是熟悉数据库的安装卸载,所以分享一下学到的,下面这篇文章主要给大家介绍了关于Windows10系统中Oracle完全卸载正确步骤的相关资料,文章通过图文介绍的非常详细,需要的朋友可以参考下
    2023-04-04

最新评论