工具包dbms_xplan.display_cursor在诊断SQL性能方面是非常有用的,特别是与Statistics_level=all;一起使用同时制定Format为allstats last是会看到很多有用的信息,但是今天遇到一个问题,和大家分享一下。就是Statistics_level=all加dbms_xplan.display_cursor(null,null,’allstats last’)显示的信息不完整。让我们看下如下的测试案例,问题与答案都一目了然了。
sqlplus / as sysdba
SQL> create table test as select * from dba_objects;
Table created.
SQL> alter session set Statistics_level=all;
SQL> set linesize 500
SQL> select count(*) from test;<<<<normal SQL
49981
SQL> select * from table(dbms_xplan.display_cursor(null,null,’allstats last’));
SQL_ID 2fxk53j4a5r6d, child number 0
————————————-
select count(*) from test
Plan hash value: 1950795681
————————————————————————————-
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | <<<buffers information is displayed
————————————————————————————-
| 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.21 | 692 |
| 2 | TABLE ACCESS FULL| TEST | 1 | 53270 | 49981 |00:00:00.10 | 692 |
————————————————————————————-
SQL> select count(*) from test where object_id<100 and object_id>200; <<<<<with illogical predicate
0
SQL> select * from table(dbms_xplan.display_cursor(null,null,’allstats last’));
SQL_ID 5xv7jfk3ryntq, child number 0
————————————-
select count(*) from test where object_id<100 and object_id>200
Plan hash value: 1617223730
—————————————————————————-
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | <<<<<<<<<no buffers information
—————————————————————————-
| 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.01 |
|* 2 | FILTER | | 1 | | 0 |00:00:00.01 |
|* 3 | TABLE ACCESS FULL| TEST | 0 | 8 | 0 |00:00:00.01 |
—————————————————————————-