一. 背景介绍
当我们质疑一条SQL语句执行缓慢,进而尝试是否有改进可能性的时候。我们往往需要查看这条SQL语句对应的执行计划,那么在oracle中如何获取执行计划是本文要介绍的内容。
二. 获取方法
oracle提供四种获取执行计划的方法:
1. 执行SQL语句explain plan,然后查询结果输出表(普遍方法)
2. 查询一张动态性能视图
3. 查询自动工作量库或者statspack表
4. 启动提供执行计划的跟踪功能(比如启动sql_trace)
三. SQL语句EXPLAIN PLAN(方法一)
这个命令是以一条SQL语句作为输入,得到这条SQL的执行计划,并且将结果输出到计划表中。语法如下:
explain plan for select count(*) from user_objects /*解析获取执行计划*/
select * from table (dbms_xplan.display) /*查询计划表显示执行计划*/
如果查看的是绑定变量SQL的执行计划,SQL必须是变量的形式,比如:
explain plan for select * from emp where empno = :p_value.
但是,存在一个问题,由于命令explain plan不能使用绑定变量窥测,也就是explain plan显示的执行计划,可能不是真正的执行计划。也就是说,如果使用了绑定变量,那么explain plan生成的执行计划是不可靠的(当然,这是针对绝对可靠而言,其实已经很可靠了)
四. 查询动态性能视图获取执行计划(方法二)
SQL语句被解析执行之后,会在共享池里面缓存着这条SQL语句的解析结果和执行计划,我们可以通过两个字段从动态性能视图里面查出执行计划。一个是sql_id(父游标,代表一条SQL的解析结果),一个是sql_child_number(SQL语句执行计划序号,一条SQL可能对应多个执行计划),这两个字段在视图v$session和V$sql里面都存在。如果我们想查看的是当前正在执行SQL的执行计划,可以通过如下SQL查出这两个字段:
- select a.SQL_ID, a.SQL_CHILD_NUMBER, b.SQL_TEXT
- from v$session a, v$sql b
- where a.SQL_ID = b.SQL_ID
- and a.USERNAME is not null
- and a.STATUS = 'ACTIVE'
如果你知道要查看那一条SQL语句的执行计划,可以直接查询V$sql视图,比如:
- select a.SQL_ID, a.CHILD_NUMBER
- from v$sql a
- where a.SQL_TEXT like '%cm_cost where pk_cost%'
查询到这两字段之后,直接通过一个dbms_xplan包的display_cursor函数就能查看这条SQL的执行计划,如下所示:
- select * from table(dbms_xplan.display_cursor('7ngvh44anxzx1', 0))
结果可能如下图所示:
相关推荐
### Oracle 获取执行计划全部方法详解 #### 方法一:Explain Plan for 方式 - **应用场景**:当某个 SQL 查询执行时间过长甚至无法返回结果时,这种方法尤其适用。 - **步骤**: 1. 使用 `EXPLAIN PLAN FOR` 命令...
执行计划的解读方法可以使用 `V$SQLAREA`、`V$SQL_PLAN`、`V$SQLSTATS` 等性能视图来获取执行计划的信息。 执行计划的优化 执行计划的优化可以通过调整索引、访问路径、联接顺序等方法来实现。 索引扫描 索引...
Oracle数据库执行计划是数据库管理系统在处理SQL查询时所采用的一种策略,它决定了如何最有效地从数据库中检索数据。执行计划涉及到一系列的操作,包括数据的存取方法、索引的使用、连接操作以及优化器的选择。 ...
这意味着当再次执行相同的SQL语句时,Oracle可以直接从内存中获取执行计划而无需重新解析,极大地提升了执行效率。 **共享池中的SQL语句匹配规则**:为了确保SQL语句能够成功共享,Oracle采用了严格的匹配策略。...
Oracle 将 SQL 语句及解析后得到的执行计划存放在内存中,以便下次执行相同的 SQL 语句时可以直接获取执行计划,提高了 SQL 的执行性能和节省了内存的使用。这块位于系统全局区域 SGA(system global area)的共享池...
在Oracle中获取执行计划的方法有很多种。最常用的方法包括使用EXPLAIN PLAN命令,SET AUTOTRACE ON命令和DBMS_XPLAN.DISPLAY函数。EXPLAIN PLAN命令将执行计划存入plan_table表中,然后通过查询这个表来查看执行计划...
* 其他工具:还有其他工具可以获取执行计划,例如 Oracle Enterprise Manager 等。 四、执行计划的优化 执行计划的优化是指 Oracle 优化器根据实际情况选择最优的执行计划,以提高查询效率。优化器会考虑多种因素...
Oracle执行计划是数据库管理系统在处理SQL语句时的预估工作流程,它是Oracle优化器根据当前数据分布、索引情况和系统资源等信息选择的最佳执行策略。了解和分析执行计划对于提升SQL语句的性能至关重要。 一、生成...
在Oracle中,执行计划是数据库优化器根据SQL语句特性生成的一系列步骤,用于指导数据库如何执行查询以获取数据。一个高效的执行计划能够显著提升查询性能,降低资源消耗,对于数据库性能优化至关重要。 #### 查看...
执行计划揭示了Oracle如何处理一个SQL查询,包括数据的访问路径、使用的索引、排序方式以及表之间的连接顺序等。本文将深入探讨如何查看执行计划,并提供优化SQL的策略。 一、执行计划的概念 执行计划是Oracle...
Oracle 执行计划是数据库管理系统在处理SQL查询时制定的一系列步骤,用于高效地检索和处理数据。它是Oracle数据库优化器(Optimizer)根据统计信息、成本估算和已存在的索引等信息生成的。优化器有两种主要的工作...
Oracle 执行计划是数据库管理员(DBA)理解和优化SQL查询性能的关键工具。它揭示了Oracle数据库如何执行SQL语句的详细步骤,包括数据的获取方式、处理顺序以及使用的索引等信息。以下是对执行计划中涉及的一些核心...
【Oracle执行计划和SQL调优】是数据库管理中至关重要的环节,主要涉及到如何高效地运行SQL语句,提高数据库性能。下面将详细讲解执行计划的相关概念以及SQL调优的策略。 1. **Rowid的概念**:Rowid是Oracle数据库中...
在Oracle中获取执行计划有多种方法,以下是几种常见的方法: 1. 使用EXPLAIN PLAN语句:这是一种常用的方法,用户可以通过执行EXPLAIN PLAN语句,然后查询输出表来获取SQL语句的执行计划。例如,使用EXPLAIN PLAN ...
获取执行计划后,可以通过查看执行计划来了解 Oracle 是如何执行 SQL 语句的,包括访问方式、访问顺序等信息。 在实际应用中,执行计划对数据库的性能有着至关重要的影响。通过查看执行计划,可以了解 Oracle 是...
#### 获取执行计划的方法 1. **使用EXPLAIN PLAN语句**:通过`EXPLAIN PLAN FOR`语句生成执行计划,随后使用`DBMS_XPLAN.DISPLAY`包来格式化并显示执行计划。这一步并不执行SQL语句,仅生成执行计划。 2. **SQL\*...
1. **EXPLAIN PLAN命令**:这是一种非实际执行SQL语句就能获取执行计划的方法。该命令将生成的计划存储在plan_table中。但是,生成的执行计划不一定是实际会执行的计划,特别是当SQL语句中使用了绑定变量时。 2. **...
在Oracle数据库中,处理汉字和拼音的场景时,有时我们需要获取汉字的拼音或者拼音首字母。这在构建中文搜索引擎、数据分析或报表展示等场景中非常有用。Oracle提供了一些内置的功能函数,可以用来实现这些需求。以下...