oracle执行计划

oracle的sql的对应的执行计划应该如何看懂

吃可爱长大的小学妹 提交于 2019-12-01 01:53:04
项目需要,要获取oracle的sql的对应的执行计划,之前mysql的版本已经实现过了。mysql的执行计划可以参考这个博客: http://my.oschina.net/zimingforever/blog/60233 首先toad,PLsql这类工具本身就带有查看执行计划的功能,如何通过sql命令来实现呢 A设置autotrace,autotrace有以下几种取值 1 SET AUTOTRACE OFF 此为默认值,即关闭Autotrace 2 SET AUTOTRACE ON EXPLAIN 只显示执行计划 3 SET AUTOTRACE ON STATISTICS 只显示执行的统计信息 4 SET AUTOTRACE ON 包含2,3两项内容 5 SET AUTOTRACE TRACEONLY 与ON相似,但不显示语句的执行结果 由于本机没有试验环境,所以直接从网上摘了个demo,执行效果如下: 01 SQL> set autotrace on 02 SQL> select * from dave; 03 ID NAME 04 ---------- ---------- 05 8 安庆 06 1 dave 07 2 bl 08 1 bl 09 2 dave 10 3 dba 11 4 sf-express 12 5 dmm 13 14 已选择8行。 15 16 执行计划

基于oracle的sql优化

时光总嘲笑我的痴心妄想 提交于 2019-11-30 21:46:56
一.编写初衷描述 【博客地址】http://www.cnblogs.com/grl214 在应有系统开发初期,由于数据库数据较少,对于sql语句各种写法的编写体现不出sql的性能优劣,随着数据的不断增加,出现海量数据,劣质sql与优质sql在执行效率甚至存在百倍差距,可见sql优化的重要性 二.Sql语句性能优化 2.1 认识Oracle的执行过程 2.2 Oracle优化法则---漏斗法则 2.3 Oracle 执行计划 2.3.1 什么是Oracle执行计划 执行计划是一条查询语句在Oracle中执行过程或者访问路径的描述. 2.3.2 查看Oracle执行计划 1.执行计划常用的列字段解释 基数:返回的结果集行数 字节:执行该步骤后返回的字节数 耗费(cust),CPU耗费:Oracle估计的该步骤的执行成本,用于说明SQL执行的代价,理论上越小越好. 2.3.3 看懂Oracle执行计划 2.3.3.1执行顺序 根据缩进来判断,缩进最多的最先执行(缩进相同时,最上面的最先执行) 2.4 表的访问方式 TABLE ACCESS FULL(全表扫描) TABLE ACCESS BY ROWID(通过rowid的表存取) TABLE ACCESS BY INDEX SCAN(索引扫描) 2.4.1 ABLE ACCESS FULL(全表扫描) Oracle会读取表中的所有行

Oracle自带工具sql优化集-SQL Tuning Advisor (使用心得体会)

落爺英雄遲暮 提交于 2019-11-30 21:41:12
如何有效的诊断和监控高负载的SQL对于DBA来说并非是件容易的事情,对SQL语句手工调优需要很多的经验和技巧, 结合个人经验常见如下问题: . 对SQL语句本身进行优化以便获得更优的执行计划; . 合理地调整数据读取方式(例如通过索引)以便能更快地访问数据; . 合理的设计SQL实现方式以实现最优的架构(例如:使用静态SQL还是动态SQL) 当然,手工调优又是一件非常耗时的工作(我还是更喜欢手工调优),因为: . 每条SQL可能都是唯一的,这意味着你需要分别优化不同的SQL; . 系统可能是很复杂的系统,SQL代码非常非常多; . SQL调整可能是一件永远看不到终点的任务,因为系统中的SQL workload可能经常在变化; SQL Tuning Advisor的出现减少了DBA的优化压力,尤其是对经验不够丰富甚至完全不懂调优的人来说, 使用STA一定要保证优化器是CBO模式下。个人感觉使用这样的工具,仅适合全然不懂SQL的调优的人群或者DBA作参考,工具未必能解决好问题。 SQL是业务表达的一种方式,工具不可能完全理解业务。SQL调优还是要结合用autotrace,10046,10053,display_cursor等这些优秀的工具做诊断。 然后依据业务和所具备的oracle基础的知识进行调优,个人认为这是最好的方法 来源: https://www.cnblogs.com

Oracle中获取执行计划的几种方法分析

拟墨画扇 提交于 2019-11-30 17:31:18
1. 预估执行计划 - Explain Plan Explain plan以SQL语句作为输入,得到这条SQL语句的执行计划,并将执行计划输出存储到计划表中。 首先, 在你要执行的SQL语句前加explain plan for,此时将生成的执行计划存储到计划表中,语句如下: explain plan for SQL语句 然后, 在计划表中查询刚刚生成的执行计划,语句如下: select * from table(dbms_xplan.display); 注意:Explain plan只生成执行计划,并不会真正执行SQL语句,因此产生的执行计划有可能不准,因为: 1)当前的环境可能和执行计划生成时的环境不同; 2)不会考虑绑定变量的数据类型; 3)不进行变量窥视。 2. 查询内存中缓存的执行计划 (dbms_xplan.display_cursor) 如果你想获取正在执行的或刚执行结束的SQL语句真实的执行计划(即获取library cache中的执行计划),可以到动态性能视图里查询。方法如下: 1)获取SQL语句的游标 游标分为父游标和子游标,父游标由sql_id(或联合address和hash_value)字段表示,子游标由child_number字段表示。 如果SQL语句正在运行,可以从v$session中获得它的游标信息,如: select status, sql_id,

收集oracle统计信息

主宰稳场 提交于 2019-11-30 03:00:31
优化器统计范围: 表统计; --行数,块数,行平均长度;all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN; 列统计; --列中唯一值的数量(NDV),NULL值的数量,数据分布; --DBA_TAB_COLUMNS:NUM_DISTINCT,NUM_NULLS,HISTOGRAM; 索引统计;--叶块数量,等级,聚簇因子; --DBA_INDEXES:LEAF_BLOCKS,CLUSTERING_FACTOR,BLEVEL; 系统统计;--I/O性能与使用率; --CPU性能与使用率; --存储在aux_stats$中,需要使用dbms_stats收集,I/O统计在X$KCFIO中; ------------- analyze ------------- 需要使用ANALYZE统计的统计: 使用LIST CHAINED ROWS和VALIDATE子句; 收集空闲列表块的统计; Analyze table tablename compute statistics; Analyze index|cluster indexname estimate statistics; ANALYZE TABLE tablename COMPUTE STATISTICS FOR TABLE FOR ALL [LOCAL] INDEXES FOR ALL [INDEXED]

Oracle 执行计划

二次信任 提交于 2019-11-30 01:55:34
Oracle执行计划是什么   关于执行计划的概念,相信大家都有过基础的了解。这里不详细解释概念性东西,只需要知道。执行计划是Oracle根据SQL语句生成的一个执行步骤的表述即可。   执行计划分三部分:1.执行计划的SQL语句,SQL Id 以及对应的执行计划 hash value 。 2.执行计划主体部分。 3.执行计划补充说明。如下: -- 这里是SQL语句 select empno,ename from emp 的执行计划 -- 第一部分 SQL_ID 78bd3uh4a08av, child number 0 ------------------------------------- select empno,ename from emp Plan hash value: 3956160932 -- 第二部分 (主体部分) -- 这里主要关注部分,可以看到执行时的执行步骤,执行顺序,对应的谓词信息、列信息, 消耗成本等 ------------------------------------------- | Id | Operation | Name | E-Rows | ------------------------------------------- | 0 | SELECT STATEMENT | | | | 1 | TABLE ACCESS FULL|

MySQL、Oracle、SQL Server区别

穿精又带淫゛_ 提交于 2019-11-29 21:21:28
本文是从知乎上扒下来的两个个人认为比较好的回答,通读全文可能还是一知半解,留作后期学习慢慢咀嚼。原网址: https://www.zhihu.com/question/19866767 回答一:从历史、应用场景和架构3个方面回答这个问题。 作者:孙文亮 来源:知乎 SQL,在这里我理解成SQL Server。三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性。排行第四的DB2(属IBM公司),与Oracle的定位和架构非常相似,就不赘述了。 一、如果要说明三者的区别,首先就要从历史入手。 Oracle: 中文译作甲骨文,这是一家传奇的公司,有一个传奇的大老板Larry Ellision。 Ellision 32岁还一事无成,读了三个大学,没得到一个学位文凭,换了十几家公司,老婆也离他而去。开始创业时只有1200美元,却使得Oracle公司连续12年销售额每年翻一番。 Oracle成立于1977年,早期的理论基础,反而来自于一篇IBM的论文《A Relational Model of Data for Large Shared Data Banks》【1】。作者CODD选取了关系代数的五种运算,并基于运算,架构了一种新型的数据存储模型。基于这种模型,Oracle成为了一个非常典型的关系数据库。因此也变的 严谨、安全、高速、稳定 ,并且变的越来越庞大。

oracle树形查询 start with connect by

独自空忆成欢 提交于 2019-11-29 19:17:01
一、简介   在oracle中start with connect by (prior) 用来对树形结构的数据进行查询。其中start with conditon 给出的是数据搜索范围, connect by后面给出了递归查询的条件,prior 关键字表示父数据,prior 条件表示子数据需要满足父数据的什么条件。如下 start with id= '10001' connect by prior parent_id= id and prior num = 5 表示查询id为10001,并且递归查询parent_id=id,为5的记录。 二、实例   1、构造数据 1 -- 表结构 2 create table menu( 3 id varchar2(64) not null, 4 parent_id varchar2(64) not null, 5 name varchar2(100) not null, 6 depth number(2) not null, 7 primary key (id) 8 ) 9 10 -- 初始化数据 11 -- 顶级菜单 12 insert into menu values ('100000', '0', '顶级菜单1', 1); 13 insert into menu values ('200000', '0', '顶级菜单2', 1); 14

定时导出Oracle数据表到文本文件的方法

早过忘川 提交于 2019-11-29 15:02:33
该实例实现了通过windows定时任务来实现了将数据库中指定数据表数据导出为txt文本格式。其思路是通过可执行的bat文件去调用导出数据脚本,然后再在windows定时任务中调用该bat文件来实现。该示例需要能够运行的sqlplus环境,因此需要安装Oracle客户端等可运行环境。 实现了将数据库中日志表数据导出到指定文件夹下的.log文件,且该文件的命名方式采用按天来导出的格式(如:C:\HttpLog\20130115.log),当然具体路径根据你的需求可进行自定义设置。如果你不想建立windows定时任务来导出该日志,你也可以定期双击运行logout.bat文件即可实现。 spool是sqlplus的命令,必须在sqlplus中使用,主要完成以标准输出方式输出sqlplus的命令及执行结果,一般常用户格式化导出oracle表数据。 对于spool数据的sql语句,最好是自定义格式,以方便程序直接导入 ,示例SQL语句如: select col1||','||col2||','||col3||','||col4||','||to_number(to_char(col5,'YYYYMMDD')) from table_name; spool命令常用设置: set colsep','; //-域输出分隔符 set newp none //设置查询出来的数据分多少页显示

Oracle直方图理解与实验

自作多情 提交于 2019-11-29 08:22:09
一 .Oracle 中直方图的作用 直方图是一种对被管理对象某一方面质量进行管理的描述工具,那么在Oracle中自然它也是对Oracle中某个对象质量的描述工具,这个对象就是Oracle中最重要的东西——“数据”。 在Oracle中直方图是一种对数据分布质量情况进行描述的工具。它会按照某一列不同值出现数量多少,以及出现的频率高低来绘制数据的分布情况,以便能够指导优化器根据数据的分布做出正确的选择。在某些情况下,表的列中的数值分布将会影响优化器使用索引还是执行全表扫描的决策。当 where 子句的值具有不成比例数量的数值时,将出现这种情况,使得全表扫描比索引访问的成本更低。这种情况下如果where 子句的过滤谓词列之上上有一个合理的正确的直方图,将会对优化器做出正确的选择发挥巨大的作用,使得SQL语句执行成本最低从而提升性能。 二 .Oracle 中使用直方图的场合 在分析表或索引时,直方图用于记录数据的分布。通过获得该信息,基于成本的优 化器就可以决定使用将返回少量行的索引,而避免使用基于限制条件返回许多行的索引。直方图的使用不受索引的限制,可以在表的任何列上构建直方图。 构造直方图最主要的原因就是帮助优化器在表中数据严重偏斜时做出更好的规划:例如,如果一到两个值构成了表中的大部分数据(数据偏斜),相关的索引就可能无法帮助减少满足查询所需的I/O数量