- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
oracle,获取执行计划
如何获取当前正在跑程序的执行计划 1获取当前程序执行SQL的SQL_ID,这有两种途径: a. SELECT_IDFROMGV$SESSIONTWHEREBACKGROUND AND=ACTIVEANDLIKE%MCA_APD_CHECK_PUBLIC_PKG%; b. 根据日志记录,定位到程序目前执行到哪一步,再提取这一步的SQL,根据SQL文本获取:SELECT*FROMGV$SQLTWHERE_TEXTLIKE%INSERTINTO OWR_AP_BALANCE_F%; 根据SQL_ID,在PLSQLDEVELOPER中执行下面的脚本,获得CLOB格式的执行计划,建议打开后粘贴到文本编辑器查看; SELECTDBMS__SQL_MONITOR(SQL_ID=3mf9uj08kxj30)FROMDUAL; 中所有的V$打头的视图都是动态视图,在运行时随时变化的,因此一个存储过程程序执行一段时间,SQL_ID可能在不断变化; 2.每个V$视图都有对应的GV$视图,多节点的环境下需要使用GV$,如果查看V$视图只能获取当前连接节点 的信息。 3.调用了DBMS__SQL_MONITOR获取的执行计划报告,最大的特点是包含了SQL当前执行状态的信息,即计划估算值和实际执行状态有个明显对比; SQLMONITOR生成执行计划报告的阅读要点: 1.从头到尾,依次是SQL文本信息,SQL总体执行信息,并行相关信息,执行计划; 2.执行计划中,ROW(Estim)列是计划估算值,rows(Actual)是实际执行值,两者差异太大就说明执行计划有严重偏差,可能需要优化; 3.执行计划的ActivityDetail(#samples),详细说明了每个步骤操作具体消耗,因为都是通过系统等待事件表示的,所以需要对等待事件有一定基础。 Oracle的执行计划查看方法 Oracle在执行一个SQL之前,首先需要看一下SQL的执行计划,然后在按照执行计划执行SQL,分析执行计划的工作是由优化器来执行的,在不同的条件下,一个SQL可能存在多条执行计划,但是在某个特定的时间点,特定的环境下,一定只有一种执行计划是最优的。 1、Oracle的优化方式 Oracle有两种优化方式:RBO(Rule-BasedOptimization)和CBO(Cost-BasedOptimization) RBO:优化器在分析SQL语句的时候所遵循的优化规则是基于Oracle内部预定的一些规则。 CBO:优化器字分析SQL语句的时候主要是看语句执行的开销(Cost),这里的代价主要指CPU和内存,优化器在判断是否使用这种方式的时候,主要参照的是表及索引的统计信息。统计信息给出表的大小,有多少行,每行的长度等信息。 2、优化器的优化模式 优化模式包括:Rule,Choose,FirstRows,AllRows四种模式。 Rule:走基于规则的模式。 Choose:默认情况下Oracle使用这种优化模式,当一个表或索引有统计信息的时候,走CBO的方式;如果表或索引没有统计信息,表又不是特别的小,且相应的字段有索引,则走RBO的方式。在缺省情况下,ORACLE采取Choose的优化模式,为了避免不必要的FullTableScan,尽量避免采取此种优化模式,而直接采取CBO或者RBO的优化模式。 FirstRows:它与Choose方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。 AllRows:也就是我们所说的Cost的方式,当一个表有统计信息时,它将以最快的方式返回表的所有的行,从总体上提高查询的吞吐量。没有统计信息则走基于规则的方式。 需要注意的是:FirstRows和AllRows是有冲突的。 3、使用pl/sql查看执行计划 下面以MERP系统中的调度计划日志表为例来说明如何使用pl/sql查看oracle的执行计划。 1、启动pl/sql,打开相应的数据库表,如图1所示,表中总共有67704条数据: 图1打开调度计划日制表 这个表里面有一个字段叫做Input_time,存储的是调度计划日志被写入数据库表中的时间,默认情况下这个字段没有建立索引,因此建立如下SQL语句: select*fromtb_merp_schedul_logt where_time、与null值比较这几种情况使用不上索引; 2、like通配符只是出现在后面能够用上索引(like‘luo%’),通配符出现在前面用不上索引(like‘%jun’); 3
文档评论(0)