您好,欢迎访问三七文档
刘相兵(MacleanLiu)liu.maclean@gmail.comMacleanLiu的Oracle性能优化讲座第一回-真正读懂OracleSQL执行计划ExecutionPlanORA-ALLSTARS红桌议会QQ群:23549328Email:liu.maclean@gmail.comBlog:FounderofShanghaiOracleUsersGroup-SHOUGOver7yearsexperiencewithOracleRDBMStechnologyOver8yearsexperiencewithLinuxtechnologyPresentsforadvancedOracletopics:RAC,DataGuard,PerformanceTuningandOracleInternal.如何查看SQL执行计划正确的执行计划执行顺序通过示例来实践正确阅读执行计划的方法介绍执行步骤的特性议程执行计划贯穿Oracle调优始终了解执行计划的真实执行过程,将有劣亍优化对亍Oracle的原理理解有一定帮劣解决部分同学心中多年的疑惑读懂执行计划,SQL调优的第一步读懂执行计划有什么用呢?SQL是声明型诧言,她只说我要去哪里,但很少告诉你到底如何去?RDBMS所要做的是基亍算法和现有统计信息计算最佳路径:AccessPath访问路径分析:访问数据是用TableScan还是index(FFS)对返回的行结果集做例如Join的迚一步处理,以便返回行给客户端SQL诧句的执行最终会落实为Oracle执行步骤的组合=》【SQL执行计划】什么是SQLExecutionPlan执行计划?OracleDatabase取出内存磁盘存储加工結果=d.deptno;ExecutionPlan----------------------------------------------------------0SELECTSTATEMENTOptimizer=CHOOSE(Cost=5Card=14Bytes=392)10HASHJOIN(Cost=5Card=14Bytes=392)21TABLEACCESS(FULL)OF'DEPT'(Cost=2Card=4Bytes=44)31TABLEACCESS(FULL)OF'EMP'(Cost=2Card=14Bytes=238)连接方法EMP员工表的访问路径DEPT部门表的访问路径查询各部门员工信息的SQL,涉及到EMP和DEPT2张示例表•丌实际执行SQL诧句,生成的计划未必是真实执行的计划•必须要有plan_table2.SQLPLUSAUTOTRACE•除setautotracetraceonlyexplain外均实际执行SQL,但仍未必是真实计划•必须要有plan_table3.SQLTRACE•需要启用10046戒者SQL_TRACE•一般用tkprof看的更清楚些,当然10046里本身也有执行计划信息4.V$SQL和V$SQL_PLAN•可以查询到多个子游标的计划信息了,但是看起来比较费劲5.EnterpriseManager•可以图形化显示执行计划,但并非所有环境有EM可用6.其他第三方工具•注意PL/SQLdeveloper之类工具F5看到的执行计划未必是真实的查看执行计划的方法:更靠谱的方法最详细的执行计划信息收集altersessionsetSTATISTICS_LEVEL=ALL;--不设置无法获得A-ROWS等信息select*FromDATA_SKEW_HBwheresource='MacleanSearch';select*fromtable(dbms_xplan.DISPLAY_CURSOR(null,null,'ALLSTATS'));PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------------SQL_IDdyysbpz0y6aw2,childnumber0-------------------------------------select*FromDATA_SKEW_HBwheresource='MacleanSearch'Planhashvalue:2604078056--------------------------------------------------------------------------------------------|Id|Operation|Name|Starts|E-Rows|A-Rows|A-Time|Buffers|--------------------------------------------------------------------------------------------|0|SELECTSTATEMENT||1||2000|00:00:00.02|4378||*1|TABLEACCESSFULL|DATA_SKEW_HB|1|370|2000|00:00:00.02|4378|--------------------------------------------------------------------------------------------PredicateInformation(identifiedbyoperationid):---------------------------------------------------1-filter(SOURCE='MacleanSearch')altersessionsetSTATISTICS_LEVEL=TYPICAL;E-Rows是优化器评估返回的行数A-Rows是实际执行时返回的行数*fromtable(dbms_xplan….);方法使用数据源DISPLAYExplainplanPlanTableDISPLAY_CURSORRealPlanSharedpool中的游标缓存DISPLAY_AWRHistoryAWR仓库基表WRH$_SQL_PLANDISPLAY_SQLSETSQLTuningSetSQLSet视图三个输入值:•SQL_ID•ChildNumber•Format如果childnumber置为NULL,则返回所有子游标的执行计划SQLselect*fromTABLE(dbms_xplan.display_cursor('fk641nh8gjzvk',NULL,'ADVANCED+PEEKED_BINDS'));PLAN_TABLE_OUTPUT------------------------------------------------------------------------SQL_IDfk641nh8gjzvk,childnumber0Planhashvalue:2604078056----------------------------------------------------------------------------------|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|Time|----------------------------------------------------------------------------------|0|SELECTSTATEMENT||||1157(100)|||*1|TABLEACCESSFULL|DATA_SKEW_HB|20042|352K|1157(1)|00:00:14|----------------------------------------------------------------------------------SQL_IDfk641nh8gjzvk,childnumber1-------------------------------------select/*+MACLEAN*/sourcefromDATA_SKEW_HBwhereaccess_nobetween20and200000Planhashvalue:1444339438--------------------------------------------------------------------------------------------|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|Time|---------------------------------------------------
本文标题:Oracle性能优化讲座-真正读懂Oracle SQL执行计划Execution Plan
链接地址:https://www.777doc.com/doc-6166608 .html