Oracle优化之执行计划解析

合集下载

oracle执行计划解读

oracle执行计划解读

oracle执行计划解读执行计划是Oracle数据库查询优化器生成的一个重要工具,用于指导数据库在执行查询语句时的执行路线和资源分配。

通过解读执行计划,我们可以深入了解查询语句的执行情况,进而优化查询性能。

以下是对Oracle执行计划的详细解读:1. 访问方法(Access Method):执行计划的第一步是选择合适的访问方法来获取所需的数据。

这取决于表的大小、索引的可用性和查询条件等。

常见的访问方法包括全表扫描(Full Table Scan)、索引扫描(Index Scan)和索引唯一扫描(Index Unique Scan)等。

2. 连接方式(Join Method):如果查询语句中包含连接操作(如JOIN),执行计划会根据连接条件选择合适的连接方式。

常见的连接方式有Nested Loops(嵌套循环连接)、Merge Sort(合并排序连接)和Hash Join(哈希连接)等。

优化器会根据表的大小和索引的可用性等因素选择最佳的连接方式。

3. 过滤条件(Filter):执行计划中的过滤条件显示了查询语句中使用的WHERE子句以及相关的索引和扫描操作。

过滤条件可以帮助我们判断查询是否使用了正确的索引和是否存在过多的全表扫描。

4. 排序方式(Sort):如果查询语句包含ORDER BY子句或GROUP BY子句,执行计划中会显示排序操作的方式。

排序方式分为内部排序(In-Memory Sort)和外部排序(Disk Sort)。

内部排序会将数据加载到内存中进行排序,适用于较小的数据集。

外部排序会将数据写入磁盘进行排序,适用于较大的数据集。

5. 访问路径(Access Path):执行计划中的访问路径显示了查询语句中使用的索引、分区和子查询等相关操作。

通过分析访问路径,我们可以判断查询语句是否使用了合适的索引和是否存在不必要的数据访问操作。

6. 成本估算(Cost Estimate):执行计划中的成本估算显示了优化器对执行每个操作所需的资源消耗的估计值。

ORACLE执行计划explain说明

ORACLE执行计划explain说明

ORACLE执⾏计划explain说明ORACLE SQL优化⼯具系列之--EXPLAIN PLAN对于oracle数据库来说,sql语句的优化可能是对性能提升最为明显的,当然对于DBA来说,也是挑战性⽐较⼤的。

为了优化⼀个复杂的SQL语句,⽐如语句执⾏时间过长,我们根据语句的写法,利⽤我们的经验做出⼀些改动,当然是可以的,但更好的⽅法是获取语句的执⾏计划,看看语句在数据库内部使⽤了什么样的资源,是按照什么样的步骤来执⾏的,⽐如采⽤什么样的关联⽅法、什么样的关联顺序,以及对表的访问⽅法等。

为了获取语句的执⾏计划,我们可以采⽤多种⽅法和⼯具,⽐如toad⼯具,plsqldeveloper⼯具等,在我的⽂章当中,我们只会使⽤oracle ⾃⼰的⼯具,⽐如本⽂将要介绍到的explainplan,oracle还有⼀些⼯具,autotrace 、sqltrace、tkprof、oem等,我将在以后的某个时间⼀⼀介绍。

ORACLE的explain plan⼯具的作⽤只有⼀个,获取语句的执⾏计划1.语句本⾝并不执⾏,ORACLE根据优化器产⽣理论上的执⾏计划2.语句的分析结果存放在表PLAN TABLE中SQL> conn scott/tigerConnected.SQL> select * from tab;BONUS TABLEDEPT TABLEEMP TABLESALGRADE TABLESQL> desc plan_tableName Null? Type------------------------------------------------------------------------- ------------------STATEMENT_ID VARCHAR2(30)PLAN_ID NUMBERTIMESTAMP DATEREMARKS VARCHAR2(4000)OPERATION VARCHAR2(30)OPTIONS VARCHAR2(255)OBJECT_NODE VARCHAR2(128)OBJECT_OWNER VARCHAR2(30)OBJECT_NAME VARCHAR2(30)OBJECT_ALIAS VARCHAR2(65)OBJECT_INSTANCE NUMBER(38)OBJECT_TYPE VARCHAR2(30)OPTIMIZER VARCHAR2(255)SEARCH_COLUMNS NUMBERID NUMBER(38)PARENT_ID NUMBER(38)DEPTH NUMBER(38)POSITION NUMBER(38)COST NUMBER(38)CARDINALITY NUMBER(38)BYTES NUMBER(38)OTHER_TAG VARCHAR2(255)PARTITION_START VARCHAR2(255)PARTITION_STOP VARCHAR2(255)PARTITION_ID NUMBER(38)OTHER LONGOTHER_XML CLOBDISTRIBUTION VARCHAR2(30)CPU_COST NUMBER(38)IO_COST NUMBER(38)TEMP_SPACE NUMBER(38)ACCESS_PREDICATES VARCHAR2(4000)FILTER_PREDICATES VARCHAR2(4000)PROJECTION VARCHAR2(4000)TIME NUMBER(38)QBLOCK_NAME VARCHAR2(30)根据上⾯的演⽰⽚段,我们可以猜到PLANTABLE有可能是⼀个公⽤的同义词,实际上他指向sys⽤户的⼀个全局临时表PLAN_TABLE$我们来确认⼀下SQL> conn / as sysdbaConnected.SQL> col table_owner for a10SQL> col table_name for a20SQL> col db_link for a15SQL> set linesize 120SQL> set pagesize 60SQL> select * from dba_synonyms wheresynonym_name='PLAN_TABLE';OWNER SYNONYM_NA TABLE_OWNETABLE_NAME DB_LINK---------- ---------- ---------- -----------------------------------PUBLIC PLAN_TABLESYS PLAN_TABLE$SQL> select table_name,TEMPORARY from dba_tableswhere table_name='PLAN_TABLE$';TABLE_NAME T-------------------- -PLAN_TABLE$ Y既然是⼀个公⽤的同义词,那所有的⽤户就都可以使⽤,当然了,如果你愿意,你也可以在⾃⼰的⽤户(schema)下,单独的来建表plantable,你可以使⽤$ORACLE_HOME/rdbms/admin/utlxplan.sql,这个sql⾥其实很简单,就是建表⽽已。

oracle 统计信息 执行计划

oracle 统计信息 执行计划

oracle 统计信息执行计划摘要:1.Oracle 统计信息的概念和作用2.Oracle 执行计划的概念和作用3.Oracle 统计信息和执行计划的关系4.如何查看和分析Oracle 执行计划5.如何利用Oracle 统计信息优化执行计划6.总结正文:Oracle 统计信息和执行计划是Oracle 数据库性能优化的关键概念。

统计信息为Oracle 优化器提供有关数据库对象的详细信息,有助于优化器制定高效的执行计划。

执行计划是Oracle 优化器根据统计信息和SQL 语句生成的执行SQL 语句的步骤。

了解这两个概念以及它们之间的关系对于优化数据库性能至关重要。

一、Oracle 统计信息的概念和作用Oracle 统计信息是关于数据库对象的详细数据,包括表、索引、约束等。

这些统计信息有助于Oracle 优化器在执行SQL 语句时选择最佳的执行计划。

统计信息可以显示表中的行数、列的数据分布、索引的使用情况等。

通过收集和维护这些统计信息,Oracle 优化器可以更好地了解数据库对象的结构和数据分布,从而生成更高效的执行计划。

二、Oracle 执行计划的概念和作用Oracle 执行计划是优化器根据统计信息和SQL 语句生成的执行SQL 语句的步骤。

执行计划包括访问路径、表连接、查询优化等。

优化器会根据统计信息和SQL 语句的特点选择最佳的执行计划,以提高查询效率。

执行计划可以在Oracle 数据库中使用EXPLAIN PLAN 命令查看。

三、Oracle 统计信息和执行计划的关系Oracle 统计信息和执行计划密切相关。

统计信息为优化器提供有关数据库对象的详细信息,有助于优化器制定高效的执行计划。

执行计划是优化器根据统计信息和SQL 语句生成的,它会使用统计信息来选择最佳的执行路径和查询优化策略。

因此,统计信息的质量和准确性对执行计划的优化至关重要。

四、如何查看和分析Oracle 执行计划要查看和分析Oracle 执行计划,可以使用以下方法:1.使用EXPLAIN PLAN 命令。

ORACLE执行计划和SQL调优

ORACLE执行计划和SQL调优
在会话层使用alter session set optimizer_goal= all_rows/first_rows/choose;
在SQL中添加提示 /*+ hint */ 设置choose模式时候,将根据是否存在表或索
引的统计资料来决定选择RBO或CBO;
CBO 特性
前提条件:存在表和索引的统计资料;使用 analyze table 和 analyze index 命令从表或索 引中收集统计资料(表的记录平均长度,记录 数等);如果没有现存的统计资料,将在sql运 行时收集资料,会大大降低性能;
All_rows 模式:基于成本的优化器模式,确保 总体时间最短,使用的资源最小;
设置优化器模式的方法
Init.ora参数 optimizer_mode = rule/choose/all_rows/first_rows;
在会话层使用alter session set optimizer_goal= rule/choose/all_rows/first_rows;
由多个列构成的索引,如create index idx_emp on emp(col1, col2, col3, ……),则我们称idx_emp索 引为组合索引。在组合索引中有一个重要的概念: 引导列(leading column),在上面的例子中,col1 列为引导列。当我们进行查询时可以使用”where col1 = ? ”,也可以使用”where col1 = ? and col2 = ?”,这样的限制条件都会使用索引,但 是”where col2 = ? ”查询就不会使用该索引。所 以限制条件中包含先导列时,该限制条件才会使用 该组合索引。
(除非字段分布不平衡,而且存在字段矩形图) 内置函数使索引无效:substr(),to_char()等; 使用all_rows提示; 使用parallel 提示;

oracle执行计划解释

oracle执行计划解释

oracle执行计划解释一.相关概念1·rowid,伪列:就是系统自己给加上的,每个表都有一个伪列,并不是物理存在。

它不能被修改,删除,和添加,rowid在该行的生命周期是唯一的,如果向数据库插入一列,只会引起行的变化,但是rowid并不会变。

2·recursive sql概念:当用户执行一些SQL语句时,会自动执行一些额外的语句,我们把这些额外的SQL语句称为“recursive calls” 或者是“recursive sql statement”,当在执行一个DDL语句时,Oracle总会隐含的发出一些Recursiv sql语句,用于修改数据字典,如果数据字典没有在共享内存中,则就执行“resursive calls”,它会把数据字典从物理读取到共享内存。

当然DML和select语句都可能引起recursive SQL。

3·row source 行源:在查询中,由上一操作返回的符合条件的数据集,它可能是整个表,也可能是部分,当然也可以对2个表进行连接操作(join)最后得到的数据集4·predicate:一个查询中的where限制条件5·driving table 驱动表:该表又成为外层表,这个感念用于内嵌和HASH连接中,如果返回数据较大,会有负面影响,返回行数据较小的适合做驱动表6·probed table 被探查表:该表又称为内层表,我们在外层表中取得一条数据,在该表中寻找符合连接的条件的行。

7·组合索引(concatenated index)由多个列组成的索引,在组合索引中有一个重要的概念,就是引导索引,create index idx_tab on tab(col1,col2,col3),indx_tab则称为组合索引,col1则称为引导列在查询条件where后,必须使用引导索引,才会使用该组合索引8.可选择性(selectivity)比较一下列中唯一键的数量和表中的行数,就可以判断该列的可选择性。

oracle执行计划怎么看

oracle执行计划怎么看

oracle执行计划怎么看【Oracle执行计划详解】Oracle执行计划是数据库查询优化的关键工具之一,它提供了查询语句的执行路径和各种操作的详细信息,可以帮助我们分析查询语句的性能问题和优化的可能方向。

本文将详细介绍如何查看Oracle执行计划,以及如何理解执行计划中的各种信息。

一、查看执行计划的方法在Oracle数据库中,我们可以通过以下几种方式来查看执行计划:1. 使用EXPLAIN PLAN语句EXPLAIN PLAN是Oracle内置的一个SQL语句,它能够分析给定的SQL语句,并将执行计划保存在数据库中。

具体用法如下:```EXPLAIN PLAN FOR your_sql_statement;```执行以上语句后,可以通过以下语句查看执行计划:```SELECT * FROM PLAN_TABLE;```2. 使用AUTOTRACE功能AUTOTRACE是Oracle提供的一个工具,它可以在执行SQL语句时同时输出执行计划和统计信息。

使用AUTOTRACE非常方便,只需执行以下语句:```SET AUTOTRACE ON;```然后执行目标SQL语句即可。

3. 使用SQL Developer如果你使用Oracle SQL Developer这样的工具,它会自动在查询结果面板中显示执行计划。

只需将光标悬停在查询语句上,即可查看详细的执行计划信息。

二、执行计划的解读无论通过哪种方式,查看的执行计划都是一张树状结构的表,它包含了查询语句中各个操作的执行顺序和执行方式。

以下是一些常见的执行计划信息解读:1. OPERATION该列显示了执行计划中的每个操作的名称,例如TABLE ACCESS FULL表示全表扫描,INDEX UNIQUE SCAN表示唯一索引扫描等。

2. OPTIONS该列显示了执行计划中的每个操作的附加选项,例如INDEX RANGE SCAN中的RANGE SCAN表示使用范围扫描。

怎样看懂Oracle的执行计划

怎样看懂Oracle的执行计划

一、什么是执行计划An explain plan is a representation of the access path that is taken when a query is executed within Oracle.二、如何访问数据At the physical level Oracle reads blocks of data. The smallest amount of data read is a single Oracle block, the largest is constrained by operating system limits (and multiblock i/o). Logically Oracle finds the data to read by using the following methods: Full Table Scan (FTS) --全表扫描Index Lookup (unique & non-unique) --索引扫描(唯一和非唯一)Rowid --物理行id三、执行计划层次关系When looking at a plan, the rightmost (ie most inndented) uppermost operation is the first thing that is executed. --采用最右最上最先执行的原则看层次关系,在同一级如果某个动作没有子ID就最先执行1、看一个简单的例子:Query Plan-----------------------------------------SELECT STATEMENT [CHOOSE] Cost=1234**TABLE ACCESS FULL LARGE [:Q65001] [ANALYZED]--[:Q65001]表示是并行方式,[ANALYZED]表示该对象已经分析过了优化模式是CHOOSE的情况下,看Cost参数是否有值来决定采用CBO还是RBO:SELECT STATEMENT [CHOOSE] Cost=1234 --Cost有值,采用CBOSELECT STATEMENT [CHOOSE] Cost= --Cost为空,采用RBO2、层次的父子关系,看比较复杂的例子:PARENT1**FIRST CHILD****FIRST GRANDCHILD**SECOND CHILDHere the same principles apply, the FIRST GRANDCHILD is the initial operation then the FIRST CHILD followed by the SECOND CHILD and finally the PARENT collates the output.四、例子解说Execution Plan----------------------------------------------------------0 **SELECT STATEMENT ptimizer=CHOOSE (Cost=3 Card=8 Bytes=248)1 0 **HASH JOIN (Cost=3 Card=8 Bytes=248)2 1 ****TABLE ACCESS (FULL) OF 'DEPT' (Cost=1 Card=3 Bytes=36)3 1 ****TABLE ACCESS (FULL) OF 'EMP' (Cost=1 Card=16 Bytes=304)左侧的两排数据,前面的是序列号ID,后面的是对应的PID(父ID)。

oracle执行计划怎么看

oracle执行计划怎么看

oracle执行计划怎么看Oracle执行计划怎么看。

Oracle数据库系统是当今世界上应用最广泛的关系型数据库管理系统之一,它的执行计划对于数据库性能的优化和调优起着至关重要的作用。

执行计划是Oracle数据库在执行SQL语句时生成的一种执行策略,它告诉我们数据库是如何执行SQL语句的,通过分析执行计划,我们可以了解SQL语句的执行效率,找到优化的空间,提高数据库的性能。

本文将介绍如何查看Oracle执行计划,以及如何解读执行计划,帮助大家更好地理解和优化SQL语句的执行效率。

一、查看执行计划的方法。

1. 使用EXPLAIN PLAN语句。

在Oracle中,我们可以使用EXPLAIN PLAN语句来获取SQL语句的执行计划。

具体的语法如下:EXPLAIN PLAN FOR。

SQL语句;然后可以使用如下语句来查看执行计划:SELECT FROM TABLE(DBMS_XPLAN.DISPLAY);2. 使用AUTOTRACE。

在SQLPlus或者SQL Developer中,我们可以使用AUTOTRACE功能来查看SQL语句的执行计划。

在SQLPlus中,可以使用如下语句开启AUTOTRACE功能:SET AUTOTRACE ON;然后执行需要查看执行计划的SQL语句即可。

3. 使用SQL Developer。

对于Oracle数据库开发人员来说,SQL Developer是一个非常常用的工具,它提供了直观的图形界面来查看SQL语句的执行计划。

在SQL Developer中,执行SQL语句后,可以通过右键菜单选择“Explain Plan”来查看执行计划。

二、执行计划的解读。

1. 表的访问方式。

在执行计划中,我们可以看到表的访问方式,包括全表扫描、索引扫描、唯一索引扫描等。

全表扫描意味着数据库将会扫描整张表,而索引扫描则表示数据库将会利用索引来快速定位数据,不同的访问方式对于SQL语句的性能影响很大。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle优化之执行计划解析
用友软件股份有限公司 林世福
2013年 9 月 25日
应用优化的重要性认识
Oracle应用优化
SQL语句的解析过程 什么是SQL执行计划 了解RBO和CBO 如何解读执行计划 NC SQL规范
SQL语句的解析过程
1 语法分析 分析语句的语法是否符合规范,衡量语句中各 表达式的意义。 2 语义分析 检查语句中涉及的所有数据库对象是否存在,及 用户权限。 3 视图转换 将涉及视图的查询语句转换为相应的对基表查 询语句。 4 表达式转换 将复杂的SQL表达式转换为较简单的等效连 接表达式。 5 选择优化器 不同的优化器一般产生不同的“执行计划”
数据量大的不同的结果集进行连接,较小的结果集作为驱动表,创建 基于内存的Hash table,大的结果集计算hash value,然后在内存中进 行匹配。
较小的结果集的大小接近hash_area_size,即较小的结果集一次性加载 到内存中
表连接算法
外表(驱动表)
内表
Nested Loop (嵌套循环)
成本优化策略演化
• 传统的:仅仅计算读取请求的数目 • 系统统计(1):说明读取的大小和时间 • 系统统计(2):说明CPU成本以及读取请求的大小和时间 • 系统统计(3): 说明缓存、CPU成本以及读取请求的大小
和时间
Oracle应用优化
SQL语句的解析过程 什么是SQL执行计划 了解RBO和CBO 如何解读执行计划 NC SQL规范
如何解读执行计划
执行计划阅读方法 执行方法描述 术语解释
执行计划阅读方法
以树状格式进行读取,通过递归进入最底层 ,然后再返回该树的父(第一)。
实际演示
执行方法描述
数据扫描方式 表连接算法
数据扫描方式
表扫描
1).全表扫描(Full Table Scans, FTS) 2).通过ROWID的表存取(Table Access by ROWID )
执行方法描述
数据扫描方式 表连接算法

较小的建立Hash表 较大的计算Hash值 探测Hash表 优点:ora10G后默 认的连接方式,相 当于对两张表分别 扫描一次。
Hash Table
row1 row2
… … rowm
ram
key1 … … keyn
表连接
索引扫描
1).索引唯一扫描(index unique scan) 2).索引范围扫描(index range scan) 3).索引快速扫描(index fast full scan)
全表扫描
对于全表扫描,Oracle将顺序读取请求段中的所有数据块 对于返回大量数据查询尤其有效 可以避免由于索引访问带来的额外I/O 可以通过多块访问(db_file_multiblock_read_count) 全表扫描访问HWM下的所有数据块
Index访问
通过索引访问获得rowid 进而通过rowid访问获取数据所在位置 通过单块I/O读取 Rowid是访问单行的最快的方法
ROWID的格式如下(6位对象号,3位文件号,6位块号,3 位行号)
例子:AAABqHAADAAAC7EAAA 数据对象编号 文件编号 块编号 行编号 OOOOOO FFF BBBBBB RRR

6. Hash cluster key 7. Indexed cluster key

8. Composite key

9. Single-column non-unique index

10. Bounded range search on indexed columns 11. Unbounded range search on indexed columns
SQL语句的解析过程 什么是SQL执行计划 了解RBO和CBO 如何解读执行计划 NC SQL规范
了解RBO和CBO
什么是RBO 和CBO
Oracle的优化规则,主要有 (RBO, RULE-Based Optimizer基于内在规则) (CBO, Cost-Based Optimizer 基于成本)
当两个table都有index时,选择结果集较小的table作为 驱动表 (CBO/RBO的区别);
1 5
1 2
4
3
3
4
双重for逐行循 环
7
5

外层数据小,内层被连接的字段已建 索引,且内层数据量大; 比如select * from bd_corp c inner join ic_general_h h on
c.pk_corp=h.pk_corp
表连接
必须有一个table拥有index;
只用一个table有index时,选择没有index的table作为驱 动表;
RBO的规则
1. Single row by ROWID
2. Single row by cluster join
3. Single row by hash cluster key with unique key
4. Single row by unique index

5. Cluster join
Oracle应用优化
SQL语句的解析过程 什么是SQL执行计划 了解RBO和CBO 如何解读执行计划 NC SQL规范
什么是SQL执行计划
所谓执行计划,就是对一个DML SQL做出一份怎样去 完成任务的执行路径。基于不同的优化方式,执行计划可能 有很大的差异。
什么是SQL执行计划
Oracle应用优化
SQL语句的解析过程
6 选择连接方式 对多表连接ORACLE可选择适当的连接方 式。 7 选择连接顺序 对多表连接ORACLE选择哪一对表先连接 ,选择这两表中哪个表做为驱动表。 8 选择数据的搜索路径 根据以上条件选择合适的数据搜索 路径,如是选用全表搜索还是利用索引或是其他的方式。 9 产生“执行计划” 并执行。

12. Sort-merge join
13. MAX or MIN of indexed column
14. ORDER BY on indexed columns
15. Full table-scan
CBO的规则
成本
指执行SQL语句导致的实际资源消耗;或者表示优化器对 执行语句所用时间的最优估计。
相关文档
最新文档