Call now: 252-767-6166  
Oracle Training Oracle Support Development Oracle Apps

Free Oracle Tips

HTML Text

 Home
 E-mail Us
 Oracle Articles


 Oracle Training
 Oracle Tips

 Oracle Forum
 Class Catalog


 Remote DBA
 Oracle Tuning
 Emergency 911
 RAC Support
 Apps Support
 Analysis
 Design
 Implementation
 Oracle Support


 SQL Tuning
 Security

 Oracle UNIX
 Oracle Linux
 Monitoring
 Remote s
upport
 Remote plans
 Remote
services
 Application Server

 Applications
 Oracle Forms
 Oracle Portal
 App Upgrades
 SQL Server
 Oracle Concepts
 Software Support

 Remote S
upport  
 Development  

 Implementation


 Consulting Staff
 Consulting Prices
 Help Wanted!

 


 Oracle Posters
 Oracle Books

 Oracle Scripts
 Ion
 Excel-DB   


 

 

 


 

 

 
 

使用dbms_xplan工具查看执行计划

Donald K. Burleson等人所著的
May 16, 2008


 
 
Donald K. Burleson等人所著的
 
使用dbms_xplan工具查看执行计划

9i有一个新的包 dbms_xplan,对查询plan_table表是一个很有用的工具,相对于以前写一个复杂的SQL语句,然后从plan_table看执行计划,不如调用 dbms_xplan 包,还可以显示格式,这个工具的使用也非常方便。
调用的语法类似
select * from table(dbms_xplan.display(format=>'BASIC'))
使用 TABLE() 操作符,或者 CAST 操作。

DISPLAY 函数有三个参数
TABLE_NAME        指出优化计划放在哪个表里面,默认是 PLAN_TABLE.
STATEMENT_ID      指的是plan table中的statement_id字段,默认是last ID 或者 NULL.
FORMAT            指的是显示的格式


FORMAT参数有三个可选值,原文如下
BASIC           It provides only the minimum amount of information, as in
                case of the example above, similar to a query from
                PLAN_TABLE directly.
TYPICAL           This is the default value. It provides a variety of the
                information useful for understanding how the optimizer
                works for this statement. For instance, in case of partitioned
                table operation, the columns PARTITION_START,
                PARTITION_STOP, PARTITION_ID, and
                FILTER_PREDICATES are displayed in addition to COST
                for that step, the number of rows expected to be retrieved,
                and number of bytes those rows may have. This provides
                the information to understand statements involving
                partitioned objects.
ALL                This setting displays all the information displayed for the
                BASIC and TYPICAL values, and also displays parallel
                query operations and the related SQL statements, if those
                are involved.   
SERIAL             This setting gets results similar to those retrieved by the
                TYPICAL setting, but the queries are explained serially even
                if a parallel query will be used.

一般推荐使用typical 参数,把SQLPLUS的linesize 参数调整到至少 120

下面是测试步骤

用sys用户建立
PLUSTRACE 角色

$ORACLE_HOME\E:\oracle\ora92\sqlplus\admin\Plustrce.sql

二:把权限授予某个人
grant plustrace to mjs;

三:建立表
建表SQL脚本为在${ORACLE_HOME}/rdbms/admin/下的utlxplan.sql。


四:使用说明
1:我们用一个大表来举例说明如何使用

> select count(*) from tbl_fact_sublog;

  COUNT(*)
----------
   1757960
   
2:一个很平常的SQL语句
用常规方法如下分析执行计划
analyze table tbl_fact_sublog compute statistics;

set autotrace traceonly

select id,handsetname,count(*) from tbl_fact_sublog group by id,handsetname ;
结果如下:

1757960 rows selected.


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=30264 Card=1757960 B
          ytes=24611440)

   1    0   SORT (GROUP BY) (Cost=30264 Card=1757960 Bytes=24611440)
   2    1     TABLE ACCESS (FULL) OF 'TBL_FACT_SUBLOG' (Cost=2284 Card
          =1757960 Bytes=24611440)





Statistics
----------------------------------------------------------
          0  recursive calls
         88  db block gets
      23749  consistent gets
      35593  physical reads
          0  redo size
   47677309  bytes sent via SQL*Net to client
    1289670  bytes received via SQL*Net from client
     117199  SQL*Net roundtrips to/from client
          0  sorts (memory)
          1  sorts (disk)
    1757960  rows processed





用 dbms_xplan 方法分析

delete from plan_table;

explain plan for select id,handsetname,count(*) from tbl_fact_sublog group by id,handsetname ;


> select * from table( dbms_xplan.display );

PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------------

---------------------------------------------------------------------------------
| Id  | Operation            |  Name            | Rows  | Bytes |TempSpc| Cost  |
---------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |                  |  1757K|    23M|       | 30264 |
|   1 |  SORT GROUP BY       |                  |  1757K|    23M|    80M| 30264 |
|   2 |   TABLE ACCESS FULL  | TBL_FACT_SUBLOG  |  1757K|    23M|       |  2284 |
---------------------------------------------------------------------------------

Note: cpu costing is off

10 rows selected.

可见,用dbms_xplan这个包可以发现排序的时候需要大概 80M的临时空间



> select * from table( dbms_xplan.display('PLAN_TABLE',null,'BASIC'));

PLAN_TABLE_OUTPUT
-----------------------------------------------------

-------------------------------------------------
| Id  | Operation            |  Name            |
-------------------------------------------------
|   0 | SELECT STATEMENT     |                  |
|   1 |  SORT GROUP BY       |                  |
|   2 |   TABLE ACCESS FULL  | TBL_FACT_SUBLOG  |
-------------------------------------------------

8 rows selected.


用BASIC参数得到的信息就少多了。



另:一个有趣的现象,如果我删除统计信息,结果是什么样的?
analyze table tbl_fact_sublog delete statistics;

set autotrace traceonly
select id,handsetname,count(*) from tbl_fact_sublog group by id,handsetname ;

1757960 rows selected.


Execution Plan
---------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   SORT (GROUP BY)
   2    1     TABLE ACCESS (FULL) OF 'TBL_FACT_SUBLOG'




Statistics
---------------------------------------------------------
          0  recursive calls
         88  db block gets
      23749  consistent gets
      35641  physical reads
          0  redo size
   47677309  bytes sent via SQL*Net to client
    1289670  bytes received via SQL*Net from client
     117199  SQL*Net roundtrips to/from client
          0  sorts (memory)
          1  sorts (disk)
    1757960  rows processed






用 dbms_xplan 方法分析

delete from plan_table;

explain plan for select id,handsetname,count(*) from tbl_fact_sublog group by id,handsetname ;


> select * from table( dbms_xplan.display );


PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------

-------------------------------------------------------------------------
| Id  | Operation            |  Name            | Rows  | Bytes | Cost  |
-------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |                  |       |       |       |
|   1 |  SORT GROUP BY       |                  |       |       |       |
|   2 |   TABLE ACCESS FULL  | TBL_FACT_SUBLOG  |       |       |       |
-------------------------------------------------------------------------


Note: rule based optimization

10 rows selected.

从提示看出,用的是基于规则的优化器,而且没有显示排序大概需要多少空间,看来还是经过分析后用CBO比较好


 

 

  
 

 
 
 
 
Oracle performance tuning software
 
 

 

 
 
 
Oracle performance Tuning 10g reference poster
 
 
 
Oracle training in Linux commands
 
Oracle training Excel
 
Oracle training & performance tuning books
 

 

Burleson is the American Team

Note: This Oracle documentation was created as a support and Oracle training reference for use by our DBA performance tuning consulting professionals.  Feel free to ask questions on our Oracle forum.

Verify experience! Anyone considering using the services of an Oracle support expert should independently investigate their credentials and experience, and not rely on advertisements and self-proclaimed expertise. All legitimate Oracle experts publish their Oracle qualifications.

Errata?  Oracle technology is changing and we strive to update our BC Oracle support information.  If you find an error or have a suggestion for improving our content, we would appreciate your feedback.  Just  e-mail:  and include the URL for the page.


                    









Burleson Consulting

The Oracle of Database Support

Oracle Performance Tuning

Remote DBA Services


 

Copyright © 1996 -  2011 by Burleson Enterprises

All rights reserved.

Oracle © is the registered trademark of Oracle Corporation.