暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

Oracle SQL优化与调优之显示执行计划(下)

原创 由迪 2020-06-02
1364

DISPLAY_AWR
DISPLAY_AWR 函数显示存储在 AWR 历史数据的执行计划。
提示:要正常调用 DISPLAY_AWR 参数,必须要有对视图 DBA_HIST_SQL_PLAN 和
DBA_HIST_SQLTEXT 的 SELECT 权限。
参数描述:
o SQL_ID:需要被显示执行计划的 SQL 语句的 ID。该 ID 可以从 DBA_HIST_SQL_PLAN.SQL_ID
或 DBA_HIST_SQLTEXT.SQL_ID 获得,该参数必须指定非空值,没有默认值;
o PLAN_HASH_VALUE:执行计划的哈希值。我们之前提到,每个执行计划都有一个哈希。通过该值,可以显示 SQL 语句的特定的执行计划。如果未指定或为 NULL,则会显示语句的所有执行计划;
o DB_ID:指定显示哪个数据库的执行计划,默认为本地数据库 ID。
提示:我们可以将其他数据库的 AWR 数据导入本地数据库进行分析。
o FORMAT:格式化控制字符串。DISPLAY_AWR 函数的格式化选项与 DISPLAY 的选项相同。
示例:

image.png
image.png
DISPLAY_SQLSET
DISPLAY_SQLSET 函数显示存储在一个 SQL 调优集中的语句的执行计划。
提示:DBMS_SQLTUNE 是 Oracle 10g 中提供的一个自动调优的工具包,它可以对单条语句进行调优, 也可对一组 SQL 集进行调优,我们在后面章节会做详细介绍。

参数描述:
o SQLSET_NAME:SQL 集的名称。每个 SQL 集都有一个单独的名称(可以是创建时用户指定的,也可以是系统自动生成的),我们需要指定从哪个 SQL 集中读取和显示语句的执行计划,该参数没有默认值,必须指定;
o SQL_ID:需要被显示执行计划的 SQL 语句的 ID。该 ID 可以从
USER/DBA/ALL_SQLSET_PLANS.SQL_ID 获得,该参数必须指定非空值,没有默认值;
o PLAN_HASH_VALUE:执行计划的哈希值。如果未指定或为 NULL,则会显示语句的所有执行计划;
o FORMAT:格式化控制字符串。DISPLAY_SQLSET 函数的格式化选项与 DISPLAY 的选项相同。
o SQLSET_OWNER:SQL 集的所有者,默认为当前用户名。

示例:
image.png
image.png

DISPLAY_SQL_PLAN_BASELINE
DISPLAY_SQL_PLAN_BASELINE 函数显示存储在数据字典当中的 SQL 执行计划基线的计划。

提示:SQL 执行计划管理是 Oracle 11g 中提供的一个管理 SQL 语句的一组执行计划(执行计划基线,
Plan Baseline)、保证语句运行性能稳定性的特性。

参数描述:
o SQL_HANDLE:执行计划基线所属 SQL 的句柄名称,它由 Oracle 在创建或载入执行计划到基线当中时自动生成,可以通过视图 dba_sql_plan_baselines 查询,默认为 NULL;
o PLAN_NAME:执行计划基线某个执行计划的名称,它由 Oracle 在创建或载入执行计划到基线当中时自动生成,可以通过视图 dba_sql_plan_baselines 查询,默认为 NULL;
o FORMAT:格式化控制字符串。DISPLAY_SQLSET 函数的格式化选项与 DISPLAY 的选项相同。
当 SQL_HANDLE 和 PLAN_NAME 都为空时,显示所有基线数据中的全部执行计划。
示例:

image.png
image.png
AUTOTRACE

AUTOTRACE 是 Oracle 自带的客户端工具 SQLPlus 的一个特性。启用 AutoTrace 后,SQLPLus
会自动收集执行过的语句的执行计划、性能统计数据等,并在语句执行结束后显示在 SQL*Plus 中。要使用 AUTOTRACE,我们需要先做以下准备。
用 DBA 用户创建角色 PLUSTRCE,并将该角色赋予用户。

在执行语句之前,在 SQL*Plus 中打开自动跟踪选项。你可以在打开 AUTOTRACE 时选择不同选项,以控制输出的内容。

• SET AUTOTRACE ON
打开 AUTOTRACE,并输出所有内容,包括语句本身的查询结果,执行计划,以及性能统计
数据。
• SET AUTOTRACE ON EXPLAIN
打开 AUTOTRACE,并输出语句本身的查询结果和执行计划,不输出性能统计数据。
• SET AUTOTRACE ON STATISTICS
打开 AUTOTRACE,并输出语句本身的查询结果和性能统计数据,不输出执行计划。
• SET AUTOTRACE TRACE
打开 AUTOTRACE,并输出执行计划和性能统计数据,不输出语句本身的查询结果。
• SET AUTOTRACE TRACE EXPLAIN
打开 AUTOTRACE,并输出执行计划,不输出语句本身的查询结果和性能统计数据。
• SET AUTOTRACE TRACE STATISTICS
打开 AUTOTRACE,并输出性能统计数据,不输出语句本身的查询结果和执行计划。
• SET AUTOTRACE OFF
关闭 AUTOTRACE
image.png

SQL_TRACE(或者 10046 跟踪事件)

SQL_TRACE 跟踪的内容由三个部分组成:执行语句时造成的等待事件(Waits);执行语句时产生的性能统计数据;以及语句的执行计划和绑定变量信息。这里仅介绍执行计划相关部分。
在会话或者系统中启动 SQL 跟踪后,会话结束或者关闭 SQL 跟踪之前,会话(或系统)中所有 运行的语句的性能统计数据都会记录到 UDUMP 目录(user_dump_dest 参数指定)下一个根据文件中(未指定标识字符串 tracefile_identifier 的情况下,文件名格式为<ORACLE_SID>ORA.trc), 从跟踪文件中,我们可以找到语句的执行计划。

image.png
image.png
OPTIMIZER_TRACE(或者跟踪 10053 事件)

OPTIMIZER_TRACE(10053 事件可以跟踪优化器生成语句执行计划的整个过程,并且,在 11g 中还可以通过设置事件来指定仅跟踪一个或多个组件的信息。同样,其跟踪内容都会写入 UDMP 目录下的一个跟踪文件中,文件的命名方式和 SQL_TRACE 产生的跟踪文件的命名方式相同。

image.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论