Dav_笔记7-使用解释计划

Using EXPLAIN PLAN 使用解释计划

本章介绍执行计划,描述SQL语句EXPLAIN PLAN,并解释如何解释其输出。 本章还提供了管理轮廓以控制应用程序性能特征的过程。

本章包含以下部分:

一:■Understanding EXPLAIN PLAN 了解解释计划

二:■The PLAN_TABLE Output Table PLAN_TABLE输出表

三:■Running EXPLAIN PLAN ■运行EXPLAIN PLAN

四:■Displaying PLAN_TABLE Output ■显示PLAN_TABLE输出

五:■Reading EXPLAIN PLAN Output ■阅读EXPLAIN PLAN输出

六:■Viewing Parallel Execution with EXPLAIN PLAN ■使用EXPLAIN PLAN查看并行执行

七:■Viewing Bitmap Indexes with EXPLAIN PLAN ■使用EXPLAIN PLAN查看位图索引

八:■Viewing Result Cache with EXPLAIN PLAN ■使用EXPLAIN PLAN查看结果缓存

九:■Viewing Partitioned Objects with EXPLAIN PLAN ■使用EXPLAIN PLAN查看分区对象

十:■PLAN_TABLE Columns ■PLAN_TABLE列

一:Understanding EXPLAIN PLAN 了解解释计划

EXPLAIN PLAN语句显示优化器为SELECT,UPDATE,INSERT和DELETE语句选择的执行计划。语句执行计划是数据库执行语句的一系列操作。

行源树是执行计划的核心。树显示以下信息:

■语句引用的表的排序

■声明中提到的每个表的访问方法

■在语句中受连接操作影响的表的联接方法

■过滤,排序或聚合等数据操作除了行源树之外,计划表还包含以下信息:

■优化,例如每项操作的成本和基数

■分区,例如一组访问的分区

■并行执行,例如连接输入的分配方法

EXPLAIN PLAN结果让您可以确定优化程序是否选择特定的执行计划,例如嵌套循环连接。结果还有助于理解优化程序的决策,例如优化程序为什么选择嵌套循环连接而不是散列连接,并让您了解查询的性能。

How Execution Plans Can Change

使用查询优化器,执行计划可以随着基础优化器输入的变化而发生变化。 EXPLAIN PLAN输出显示了在解释语句时Oracle数据库如何运行SQL语句。由于执行环境和解释计划环境的差异,此计划可能与SQL语句的实际执行计划不同。

执行计划可能因以下原因而有所不同:

■不同的架构

■不同的成本

注意:

为避免执行计划更改可能导致的SQL性能回归,请考虑使用SQL计划管理。

不同的架构:

■执行和解释计划在不同的数据库上发生。

■解释该语句的用户与运行该语句的用户不同。两个用户可能指向同一数据库中的不同对象,从而导致不同的执行计划。

■两个操作之间的架构更改(通常是索引更改)。

不同的成本:

即使模式相同,优化程序也可以在成本不同时选择不同的执行计划。影响成本的一些因素包括:

■数据量和统计信息

■绑定变量类型和值

■全局或会话级别设置的初始化参数

Minimizing Throw-Away 尽量减少丢弃

检查解释计划可让您在以下情况下寻找丢失:

■完整扫描

■非选择范围扫描

■晚期谓词过滤器

■错误的连接顺序

■延迟过滤操作

例如,在下面的解释计划中,最后一步是非常不可选的范围扫描,执行76563次,访问11432983行,丢弃99%,并保留76563行。 为什么要访问11432983行才能实现只需要76563行?

例12-1寻找解释计划中的抛弃

explain oracle sql plan

Looking Beyond Execution Plans

超越执行计划

仅执行计划操作无法区分经过良好调整的语句和性能不佳的语句。例如,显示语句使用索引的EXPLAIN PLAN输出并不一定意味着语句有效运行。有时索引效率极低。在这种情况下,您应该检查以下内容:

■正在使用的索引的列

■它们的选择性(被访问的表的比例)

最好使用EXPLAIN PLAN来确定访问计划,然后通过测试证明它是最佳计划。在评估计划时,请检查语句的实际资源消耗。

使用V$SQL_PLAN视图

除了运行EXPLAIN PLAN命令并显示计划外,还可以使用V $ SQL_PLAN视图显示SQL语句的执行计划:

语句执行后,您可以通过查询V $ SQL_PLAN视图来显示计划。 V $ SQL_PLAN包含存储在共享SQL区域中的每个语句的执行计划。它的定义类似于PLAN_TABLE。请参阅第12-17页的“PLAN_TABLE列”。

V$SQL_PLAN优于EXPLAIN PLAN的优点是您不需要知道用于执行特定语句的编译环境。对于EXPLAIN PLAN,您需要设置相同的环境以在执行语句时获得相同的计划。

V$SQL_PLAN_STATISTICS视图提供计划中每个操作的实际执行统计信息,例如输出行数和已用时间。除输出行数外,所有统计信息都是累积的。例如,连接操作的统计信息还包括其两个输入的统计信息。 V$SQL_PLAN_STATISTICS中的统计信息可用于已使用STATISTICS_LEVEL初始化参数设置为ALL编译的游标。

V$SQL_PLAN_STATISTICS_ALL视图可以并行比较优化程序为行数和已用时间提供的估计值。 该视图结合了每个游标的V$SQL_PLAN和V$SQL_PLAN_STATISTICS信息。

解释计划限制

对于执行日期绑定变量的隐式类型转换的语句,Oracle数据库不支持EXPLAIN PLAN。 通常使用绑定变量,EXPLAIN PLAN输出可能不代表实际的执行计划。

从SQL语句的文本来看,TKPROF无法确定绑定变量的类型。 它假定类型是CHARACTER,如果不是这样,则给出错误消息。 您可以通过在SQL语句中放入适当的类型转换来避免此限制。

PLAN_TABLE输出表

PLAN_TABLE自动创建为全局临时表的公共同义词。此临时表包含所有用户的EXPLAIN PLAN语句的输出。 PLAN_TABLE是EXPLAIN PLAN语句插入描述执行计划的行的默认样本输出表。有关表中列的说明,请参见第12-17页的“PLAN_TABLE列”。

虽然为每个用​​户自动设置了PLAN_TABLE表,但您可以使用SQL脚本catplan.sql手动创建全局临时表和PLAN_TABLE同义词。此脚本的名称和位置取决于您的操作系统。在UNIX和Linux上,该脚本位于$ ORACLE_HOME / rdbms / admin目录中。

例如,启动SQL * Plus会话,使用SYSDBA权限连接,并按如下方式运行脚本:

@$ORACLE_HOME/rdbms/admin/catplan.sql

Oracle建议您在升级数据库版本后删除并重建本地PLAN_TABLE表,因为列可能会更改。如果要指定表,这可能导致脚本失败或导致TKPROF失败。

如果您不想使用名称PLAN_TABLE,请在运行catplan.sql脚本后创建新的同义词。例如:

CREATE OR REPLACE PUBLIC SYNONYM my_plan_table for plan_table$

运行EXPLAIN PLAN

要解释SQL语句,请在语句之前使用EXPLAIN PLAN FOR子句。 例如:

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值