`
newleague
  • 浏览: 1514297 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

分析SQL语句的执行计划优化SQL(五)

SQL 
阅读更多

要为一个语句生成执行计划,可以有3种方法:

  1).最简单的办法


  Sql> set autotrace on Sql> select * from dual;执行完语句后,会显示explain plan 与统计信息。这个语句的优点就是它的缺点,这样在用该方法查看执行时间较长的sql语句时,需要等待该语句执行成功后,才返回执行计划,使优化的周期大大增长。

  如果不想执行语句而只是想得到执行计划可以采用:Sql> set autotrace traceonly这样,就只会列出执行计划,而不会真正的执行语句,大大减少了优化时间。虽然也列出了统计信息,但是因为没有执行语句,所以该统计信息没有用处,如果执行该语句时遇到错误,解决方法为:
  (1)在要分析的用户下:Sqlplus > @ ?\rdbms\admin\utlxplan.sql
  (2) 用sys用户登陆Sqlplus > @ ?\sqlplus\admin\plustrce.sqlSqlplus > grant plustrace to user_name; - - user_name是上面所说的分析用户

  2).用explain plan命令
  (1) sqlplus > @ ?\rdbms\admin\utlxplan.sql
  (2) sqlplus > explain plan set statement_id ='???' for select ………………

  注意,用此方法时,并不执行sql语句,所以只会列出执行计划,不会列出统计信息,并且执行计划只存在plan_table中。所以该语句比起set autotrace traceonly可用性要差。需要用下面的命令格式化输出,所以这种方式我用的不多:

set linesize 150
set pagesize 500
col PLANLINE for a120
SELECT EXECORD EXEC_ORDER, PLANLINE
 FROM (SELECT PLANLINE, ROWNUM EXECORD, ID, RID
  FROM (SELECT PLANLINE, ID, RID, LEV
   FROM (SELECT lpad(' ',2*(LEVEL),rpad(' ',80,' '))||
     OPERATION||' '|| -- Operation
     DECODE(OPTIONS,NULL,'','('||OPTIONS || ') ')|| -- Options
     DECODE(OBJECT_OWNER,null,'','OF '''|| OBJECT_OWNER||'.')|| -- Owner
     DECODE(OBJECT_NAME,null,'',OBJECT_NAME|| ''' ')|| -- Object Name
     DECODE(OBJECT_TYPE,null,'','('||OBJECT_TYPE|| ') ')|| -- Object Type
     DECODE(ID,0,'OPT_MODE:')|| -- Optimizer
     DECODE(OPTIMIZER,null,'','ANALYZED','', OPTIMIZER)||
     DECODE(NVL(COST,0)+NVL(CARDINALITY,0)+NVL(BYTES,0),
     0,null,' (COST='||TO_CHAR(COST)||',CARD='||
     TO_CHAR(CARDINALITY)||',BYTES='||TO_CHAR(BYTES)||')')
     PLANLINE, ID, LEVEL LEV,
     (SELECT MAX(ID)
     FROM PLAN_TABLE PL2
     CONNECT BY PRIOR ID = PARENT_ID
      AND PRIOR STATEMENT_ID = STATEMENT_ID
     START WITH ID = PL1.ID
      AND STATEMENT_ID = PL1.STATEMENT_ID) RID
     FROM PLAN_TABLE PL1
     CONNECT BY PRIOR ID = PARENT_ID
      AND PRIOR STATEMENT_ID = STATEMENT_ID
     START WITH ID = 0
      AND STATEMENT_ID = 'aaa')
    ORDER BY RID, -LEV))
ORDER BY ID;

  上面这2种方法只能为在本会话中正在运行的语句产生执行计划,即我们需要已经知道了哪条语句运行的效率很差,我们是有目的只对这条SQL语句去优化。其实,在很多情况下,我们只会听一个客户抱怨说现在系统运行很慢,而我们不知道是哪个SQL引起的。此时有许多现成的语句可以找出耗费资源比较多的语句,如:
SELECT ADDRESS,
    substr(SQL_TEXT,1,20) Text,
    buffer_gets,
    executions,
    buffer_gets/executions AVG
FROM v$sqlarea
WHERE executions>0
AND buffer_gets > 100000
ORDER BY 5;

  从而对找出的语句进行进一步优化。当然我们还可以为一个正在运行的会话中运行的所有SQL语句生成执行计划,这需要对该会话进行跟踪,产生trace文件,然后对该文件用tkprof程序格式化一下,这种得到执行计划的方式很有用,因为它包含其它额外信息,如SQL语句执行的每个阶段(如Parse、Execute、Fetch)分别耗费的各个资源情况(如CPU、DISK、elapsed等)。

  3).用dbms_system存储过程生成执行计划

  因为使用dbms_system存储过程可以跟踪另一个会话发出的sql语句,并记录所使用的执行计划,而且还提供其它对性能调整有用的信息。因其使用方式与上面2种方式有些不太一样,所以在附录中单独介绍。这种方法是对SQL进行调整比较有用的方式之一,有些情况下非它不可。

分享到:
评论

相关推荐

    通过分析SQL语句的执行计划优化SQL

    本文档主要介绍了与SQL调整有关的内容,涉及多个方面:SQL语句执行的过程、ORACLE优化器、表之间的关联、如何得到SQL执行计划、如何分析执行计划等内容。通过从浅入深的方式了解SQL优化的过程,使大家逐步步入SQL...

    通过分析SQL语句的执行计划优化SQL(总结)

    通过对SQL语句的执行计划进行分析,我们可以找到优化查询性能的策略,从而提高数据库系统的整体性能。这篇博客"通过分析SQL语句的执行计划优化SQL(总结)"深入探讨了这一主题,下面将对其中的主要知识点进行详细阐述...

    通过分析SQL语句的执行计划优化SQL.doc

    《通过分析SQL语句的执行计划优化SQL》 在数据库管理中,SQL语句的优化是提升系统性能的关键环节。本文主要探讨了如何通过分析SQL语句的执行计划来优化查询性能,涉及到共享SQL语句、ROWID、Recursive SQL、Row ...

    通过分析sql语句的执行计划优化sql

    本文档主要介绍与SQL调整有关的内容,内容涉及多个方面:SQL语句执行的过程、ORACLE优化器,表之间的关联,如何得到SQL执行计划,如何分析执行计划等内容,从而由浅到深的方式了解SQL优化的过程,使大家逐步步入SQL...

    通过分析SQL语句的执行计划优化SQL语句

    本文将深入探讨如何通过分析SQL语句的执行计划来实现这一目标。执行计划是数据库管理系统(DBMS)执行SQL语句的详细步骤,它揭示了数据的检索路径、使用的索引、排序和连接操作等信息。了解这些信息可以帮助我们找出...

    通过分析SQL语句的执行计划优化SQL总结)

    在分析执行计划时,应关注以下几点: 1. **扫描与索引**:如果执行计划显示全表扫描(Full Table Scan,FTS),而应使用索引时,可能存在性能问题。创建合适的索引可以显著减少数据检索时间。但也要注意,过多或不...

    通过分析SQL语句的执行计划优化SQL总结.doc

    第五章“ORACLE的执行计划”是文档的核心部分,它详细讨论了如何分析执行计划,包括访问路径的选择、表之间的连接方式,以及如何使用hints来干预执行计划。通过对具体案例的分析,读者可以更直观地理解如何优化SQL...

    通过分析SQL语句的执行计划优化SQL(五)

    在SQL优化过程中,理解执行计划至关重要,因为它揭示了Oracle数据库如何执行SQL语句。...DBA可以通过分析执行计划,识别性能瓶颈,并采取相应措施,如调整索引、优化查询结构或改变连接顺序,以提升系统的整体效率。

    [精华] 通过分析SQL语句的执行计划优化SQL(总结)7年DBA工作经验.docx

    【SQL语句执行计划分析与优化】 SQL语句的执行计划是数据库管理系统(DBMS)在执行查询时采用的具体步骤,对于理解SQL性能至关重要。在Oracle数据库中,优化SQL语句是DBA(数据库管理员)的一项核心任务,尤其是在...

    通过分析SQL语句的执行计划优化SQL(六)

    在SQL优化过程中,分析SQL语句的执行计划是至关重要的,因为执行计划揭示了数据库引擎如何执行查询,以及数据检索的顺序和方式。本篇主要关注通过执行计划优化SQL,特别是针对Oracle数据库。 首先,执行计划由一...

    Oracle中SQL语句执行效率的查找与解决

    通过设置STATEMENT_ID,可以为SQL语句标识唯一的执行计划,便于后续比较和分析。在执行计划中,OPERATION字段描述了具体的执行步骤,如表扫描、索引扫描、合并连接等;OBJECT_NAME和OBJECT_TYPE字段指出了数据库对象...

    SQL语句执行过程详解

    优化器确定最佳执行计划后,会将SQL语句及执行计划存储在数据高速缓存中,以便下次执行相同查询时,可以直接使用缓存的执行计划,提高处理效率。 最后是语句的执行阶段。在完成语句解析后,数据库服务器进程会真正...

    通过分析SQL语句的执行计划优化SQL(三)

    通过分析SQL语句的执行计划,我们可以发现潜在的性能瓶颈,如不适当的索引使用、过度的I/O操作或无效的查询结构,从而进行相应的调整和优化。 【总结】 SQL优化是一个复杂的过程,涉及到对数据库内部机制的理解以及...

Global site tag (gtag.js) - Google Analytics