简介: 本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容。 并有总结和概述,便于理解与记忆!...连接方法 Oracle执行计划总结概述 +++ 一.相关的概念 Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的。...我们会经常在执行计划中看到该存取方法,如通过索引查询数据。 ...SELECT STATEMENT [CHOOSE] Cost=1 INDEX UNIQUE SCAN EMP_I1 进一步讲,如果sql语句中对索引列进行排序,因为索引已经预先排序好了,所以在执行计划中不需要再对索引列进行排序...c) 只能用于等值连接中 +++ Oracle执行计划的概述 --- Oracle执行计划的相关概念: Rowid:系统给oracle数据的每行附加的一个伪列,包含数据表名称,数据库id,存储数据库
---- 系列文章 Oracle-SQL Explain Plan解读 概述 如果要分析某条SQL的性能问题,通常来讲,我们首先要看SQL的执行计划,看看SQL的每一步执行计划是否存在问题。...创建一个数据分布非常不均匀的表T Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 Connected as...生成SQL的执行计划时Oracle在对SQL做硬分析时的一个非常重要的步骤,它制定出一个方案告诉Oracle在执行这条SQL时以什么样的方式访问数据: 索引扫描? 全表扫描?...具体看: Oracle-SQL Explain Plan解读 ---- 如何看懂一个SQL的执行计划 首先得到一个SQL的执行计划 我们使用select * from table(DBMS_XPLAN.display_cursor...Rows 列: 就是当前操作的cardinality,Oracle估算当前操作的返回结果集 Cost(cpu): Oracle计算出来的一个数值(代价),用于说明SQL执行的代价 Time列: Oracle
GOAL = ALL_ROWS 二、执行说明 (1) TABLE ACCESS FULL(全表扫描) (2) TABLE ACCESS BY ROWID(通过ROWID的表存取) ROWID是由Oracle
在Oracle中,利用index来避免排序 SQL> CREATE TABLE T_NOSORT (ID NUMBER PRIMARY KEY, NAME VARCHAR2(30) NOT NULL);...IND_T_NOSORT_NAME | 15 | | ------------------------------------------------------------------------- 这里只是说明了能够避免排序的执行计划
这种不确定性会给Oracle数据库大版本升级(比如从Oracle 10g升级到Oracle 11g)带来一系列的麻烦,因为不清楚升级之后原先系统中哪些SQL的执行计划会发生不好的变更。...,则Oracle会从中选择成本值最小的一个所对应的执行坟墓来作为该SQL的执行计划。...不会将其作为该SQL的执行计划来执行,即此时Oracle会永远沿用该SQL第一次被捕获的SQL Plan Baseline所对应的执行计划(除非后续做了手工调整)。...因为目标SQL已经重复执行且同时又产生了一个新的执行计划,所以现在Oracle就会自动捕获并创建这个新的执行计划所对应的SQL Plan Baseline了。...如果想启用目标SQL新的执行计划(即全表扫描),应该如何做呢? 针对不同的Oracle版本,会有不同的处理方法。
最近有网友提到为什么在dba_hist_sql_plan中无法查看到sql语句的历史执行计划,对于这个问题是由于缺省情况下,Oracle 设定的阙值并非捕获所有的sql语句,所以无法看到某些...sql历史执行计划乃正常现象。...在Oracle 9i的时候,我们可以通过设定不同的快照level获得不同程度的详细信息。也可以单独配置收集sql的阙值,如指定sql的执行次数,磁盘读的次数,解析调用的数量等。...Oracle 10g,11g也有相应的设置。下面来描述这个问题。...视图,按照LRU算法淘汰 b、符合sql捕获条件的sql执行计划在awr快照生成之后会被填充到dba_hist_sql_plan数据字典 c、导致sql执行计划无法从dba_hist_sql_plan
编辑手记:在Oracle数据库中,版本变化带来的一大挑战就是SQL执行计划的稳定性,为此Oracle经历了从Outline到Profile的特性演进,本文带大家一起来了解一下Profile的特性和使用。...这里的问题在于执行计划 ID=1 的那一行,Oracle 优化器评估 T1 like '%T1%' 返回的结果行数为 2500 行,即 T1 表总行数的 5%,如果 2 个表采用 index range...下面可以看到Oracle优化器评估的 indexrange_scan+nested loop 的成本: ? 从执行计划可以看到 Oracle 优化器评估的成本为 5071,远远高于原来的 325 。...所以这里可以看出来,由于 Oracle 优化器过高地估计了 T1 表经过 like 操作过滤返回的行数,也就过高地估计了nest loop 的成本,最终也就选择了不是最优的执行计划。...一些复杂的 SQL,我经常会先通过 SQL Tuning Advisor 来分析一下,看能不能让 Oracle自已找出一个更好的执行计划。
刚好最近又有一次sql调优培训活动,去参加后,重新复习Oracle执行计划,所以整理资料,做成笔记分享出来 2、什么是执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述。...查看Oracle执行计划有很多种,详情参考我之前的读书笔记,本博客只介绍很常用的方法 oracle要使用执行计划一般在sqlplus执行sql: explain plan for select 1 from...CPU耗费 时间(Time):Oracle估计的执行sql对于步骤需要的时间 4、查看真实执行计划 之前查看执行计划也喜欢按F5,不过最近去培训,听一名dba说,这种方法有时候不能获取真实的执行计划,收集的信息也不全面...5、看懂Oracle执行计划 上面已经介绍了如何查看执行计划,现在简单介绍一下一些基本方法和相关理论知识 5.1 查看explain 找一条比较复杂的SQL,执行: F5方式查看: ?...5.4 表连接方法 如图,执行计划中有如下NESTED LOOPS等等这些,是什么?这种其实就是Oracle中表连接的方法 ?
('&sqlid')); select * from table(dbms_xplan.display_cursor('&sqlid')); --查看AWR和CURSOR中的执行计划 select *...优点:通过sql_id可以立即获取执行计划,无需执行;可以得到真实执行过的执行计划。 缺点:没有输出相关统计信息;无法判断处理行数;无法判断表访问次数。.../app/oracle/diag/rdbms/orcl11g/orcl11g/trace/orcl11g_ora_1706.trc,/home/oracle/events_10046.txt 3、查看trace...tkprof /oracle/app/oracle/diag/rdbms/orcl11g/orcl11g/trace/orcl11g_ora_1706.trc,/home/oracle/events_10046...cat /home/oracle/events_10046.txt Trace file: /oracle/app/oracle/diag/rdbms/orcl11g/orcl11g/trace/orcl11g_ora
编辑手记:在SQL执行的过程中,选择不同的执行计划所产生的性能差异非常大,因此能够符合业务地选择正确的执行计划非常重要。...这里需要注意的是,变量窥探一般情况下在select语句使用绑定变量都会去窥探,与字段上有无索引、直方图信息无关,虽然个人认为在没有直方图和索引的情况下意义不大,但是oracle都会去窥探变量值然后根据变量值生成执行计划...(https://blogs.oracle.com/optimizer/entry/how_does_the_method_opt ) 查询low_value/high_value脚本如下: ?...最后推荐大家阅读下老熊的两篇博客: 1、Oracle数据库升级迁移、SPA及统计信息 http://www.laoxiong.net/oracle-database-migration-upgrade-spa-statistics.html...2、怎样保持Oracle数据库SQL性能的稳定性 10g&11g中如何删除列上的直方图信息: How do I drop an existing histogram on a column and
执行计划查看方法汇总及优劣比较 1)执行计划 执行计划是一条 SQL 语句在 Oracle 数据库中的执行过程或访问路径的描述。...如下图所示,是一个比较完整的执行计划示意图。 如上执行计划一般包含三部分,SQL_ID,SQL 文本以及执行计划对应的 plan_hash_value。...2)执行计划主体模块解读 主体 Header Id:序号 Operation:当前操作的内容 Rows:当前操作的 Cardinality,Oracle 估计当前操作的返回结果集。...可以清晰地从 E-ROWS 和 A-ROWS 中得到预测的行数和真实的行数,从而可以准确判断 Oracle 评估是否准确; 3 ....执行方法:sqlplus / as sysdba SQL> @/home/oracle/tmp/sqlhc.sql T 9a4tv1dduu9u4 或者 SQL> @/home/oracle/tmp/sqlhc.sql
对于此情形,我们可以比对SQL语句的历史执行计划进行分析是何种原因导致SQL变慢或执行计划发生变化。下面通过例子来模拟SQL执行计划变异的情形。...v$version where rownum<2; BANNER ---------------------------------------------------------------- Oracle...查看sql语句的执行计划 --该视图记录了所有被awr快照捕获的所有历史sql的执行计划以及执行计划的生成时间 scott@SYBO2SZ> run sql_plan_his 1 SELECT id...--------------------------------- 2 - access("OWNER"='GOEX_ADMIN') 5、后记 a、示例中创建的big_table脚本,请参考:Oracle...,通常是由于awr阀值设置所致,可参考:Oracle AWR 阙值影响历史执行计划 e、历史SQL语句的执行计划也可以通过$ORACLE_HOME/rdbms/admin/awrsqrpt.sql来生成
SQL的执行计划实际代表了目标SQL在Oracle数据库内部的具体执行步骤,作为调优,只有知道了优化器选择的执行计划是否为当前情形下最优的执行计划,才能够知道下一步往什么方向。...执行计划的定义:执行目标SQL的所有步骤的组合。 我们首先列出查看执行计划的一些常用方法: 1....Outline Data主要是执行SQL时用于固定执行计划的内部HINT组合,可以将这部分内容摘出来加到目标SQL中以固定其执行计划。...(2)和(3)的结论相近,区别就是(2)只是针对最近一次执行SQL查看执行计划,(3)可以针对仍在库缓存中的任意一次SQL查看执行计划。...若该SQL的执行计划被采集到AWR库中,则可以用(4)来查询历史执行计划。
9 Resc: 2.0002 Resc_io: 2.0000 Resc_cpu: 7121 Resp: 2.0002 Resp_io: 2.0000 Resc_cpu: 7121 Oracle...CBO计算了这条SQL各种执行计划,认为全表扫描效率最高,成本cost值是2,因此执行计划,如下所示,选择全表扫描, ?...dbsnake的书中已经指出,每日22:00定时采集的统计信息,使用如下脚本进行创建, $ORACLE_HOME/rdbms/admin/catmwin.sql 如下是11g脚本中,自动统计信息采集的内容...dbms_stats.gather_database_stats_job_proc', number_of_arguments=>0, enabled=>TRUE, comments =>'Oracle...虽然CBO对于执行计划cost计算,属于机密,但是10053可以间接,让我们了解CBO如何选择,某一个执行计划,再根据表、索引等统计信息,结合来看,有可能就发现一些线索。
Oracle数据库中执行sql的时候,优化器会根据优化器统计信息和一些参数来生成“它认为最好的“执行计划。 但是并不能够保证每一次都会选择最优的哪个执行计划。...如果遇到了sql语句在一定时间段执行时性能变差, 并且发现它的执行计划发生了变化,那么可以考虑固定哪个”好的”时候的执行计划。 当然,必须保证sql语句没有被修改,是同一个sql。 1....SQL Plan Management (SQL计划管理,简称SPM) 这是Oracle推荐使用的一种方法。使用起来也很简单。以下是一个手动固定的例子。...使用Outline Hint来固定执行计划。 可以通过 DBMS_XPLAN.DISPLAY_CURSOR 或者 收集 10053 trace 来获得好的时候的 Outline 信息。...统计信息的固定 我们知道统计信息是影响sql语句选择执行计划的非常重要的要素。所以固定统计信息也能起到固定执行计划的效果。
Oracle SQL调优系列之看懂执行计划explain 1、文章写作前言简介 2、什么是执行计划? 3、怎么查看执行计划?...4、查看真实执行计划 5、看懂Oracle执行计划 5.1 查看explain 5.2 explain执行顺序 5.3 访问数据的方法 5.3.1 全表扫描(TABLE ACCESS FULL) 5.3.2...刚好最近又有一次sql调优培训活动,去参加后,重新复习Oracle执行计划,所以整理资料,做成笔记分享出来 2、什么是执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述。...查看Oracle执行计划有很多种,详情参考我之前的读书笔记,本博客只介绍很常用的方法 oracle要使用执行计划一般在sqlplus执行sql: explain plan for select 1 from...耗费(COST)、CPU耗费:Oracle估计的该步骤的执行耗费和CPU耗费 时间(Time):Oracle估计的执行sql对于步骤需要的时间 4、查看真实执行计划 之前查看执行计划也喜欢按F5,不过最近去培训
全表扫描是Oracle访问数据库表是较为常见的访问方式之一。很多朋友一看到SQL语句执行计划中的全表扫描,就要考虑对其进行修理一番。全表扫描的存在,的确存在可能优化的余地。...本文涉及到的相关链接: 高水位线和全表扫描 启用 AUTOTRACE 功能 Oracle 测试常用表BIG_TABLE Oracle db_file_mulitblock_read_count...全表扫描就是扫表表中所有的行,实际上是扫描表中所有的数据块,因为Oracle中最小的存储单位是Oracle block。 ...--- 2 - filter("N"<=10) Note ----- - dynamic sampling used for this statement (level=2) --上面的执行计划使用了全表扫描...---------------------------------------- Plan hash value: 3098837282 -- 执行计划中
像10046这种事件,都不是Oracle官方文档中可以查询到的,这些事件一般用于调试目的,因此往往可以使用他们找到问题更详细的信息。...,执行计划的成本分析,进而可以看出为什么Oracle对于SQL选择了这样的执行计划,而不是那样的执行计划,之所以说是实际的执行计划,从10046事件执行的过程就可以看出来: (a) 在当前session...真正执行的SQL,对应的执行计划可以在trc文件中找到。这个trc文件会记录SQL的执行计划和资源消耗,命名格式“实例名_ora_当前session的spid.trc”。 (1).... s.SID, s.PADDR, s.PROCESS, p.spid os_process_id, p.pid oracle_process_id...v$session中的pid, serial#是oracle分配的PID。
编者按: 本文作者系Scott(中文名陈晓辉),现任大连华信资深分析师 ,ORACLE数据库专家,曾就职于甲骨文中国。...今天我们来做一个使用SqlPatch固定执行计划的TEST. 1.做TEST用TABLE. create table tab2(c1 number, c2 number, c3 varchar2(10)
领取专属 10元无门槛券
手把手带您无忧上云