1.验证全表扫描的成本计算公式,贴出执行计划和计算公式。<br>
2.给出B-tree索引 Unique scan的成本计算公式,贴出执行计划和计算公式。<br>
3.通过10053事件分析一个SQL执行计划的产生过程,需要贴出trace中的相关信息和必要的文字说明。<br>
4.当统计信息不准确时,CBO可能产生错误的执行计划,请给出这样的一个例子,在10053 trace中找到CBO出错的位置,并给出必要的文字说明。<br>

========================================================================================================
1.验证全表扫描的成本计算公式,贴出执行计划和计算公式。<br>

答:

C:\Users\Administrator>sqlplus tang/sa@orcl

SQL*Plus: Release 11.2.0.1.0 Production on Thu Dec 19 15:35:55 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create table t12 as select * from dba_objects;

Table created.

SQL>
--对表t12进行统计分析,不做直方图
SQL> begin
  2  dbms_stats.gather_table_stats(user,'T12',CASCADE=>TRUE,ESTIMATE_PERCENT=> NULL,
  3  METHOD_OPT=>'for all columns size 1');
  4  end;
  5  /

PL/SQL procedure successfully completed.

SQL>

SQL> set linesize 800;
SQL> set pagesize 400;

--数据库块大小8K
SQL>show parameter db_block_size
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_size                        integer     8192

--查看一次IO读多少个块
SQL> show parameter db_file;

NAME                                TYPE                                VALUE
-------                                -------------                        ----------------------

db_file_multiblock_read_count        integer                               128
db_file_name_convert                 string
db_files                             integer                               200
SQL>

--查看t表所用块数
SQL> select blocks from user_tables where table_name='T12';

BLOCKS
----------
      1115

SQL>

SQL>select * from sys.aux_stats$

SNAME            PNAME        PVAL1            PVAL2
    -----------------------------------------------------
1    SYSSTATS_INFO    STATUS                        COMPLETED
2    SYSSTATS_INFO    DSTART                        11-03-2011 06:38
3    SYSSTATS_INFO    DSTOP                        11-03-2011 06:38
4    SYSSTATS_INFO    FLAGS        1    
5    SYSSTATS_MAIN    CPUSPEEDNW    1720.20725388601    
6    SYSSTATS_MAIN    IOSEEKTIM    10    
7    SYSSTATS_MAIN    IOTFRSPEED    4096    
8    SYSSTATS_MAIN    SREADTIM        
9    SYSSTATS_MAIN    MREADTIM        
10    SYSSTATS_MAIN    CPUSPEED        
11    SYSSTATS_MAIN    MBRC        
12    SYSSTATS_MAIN    MAXTHR        
13    SYSSTATS_MAIN    SLAVETHR

SQL> set autot trace exp;
SQL> select * from t12;

Execution Plan
----------------------------------------------------------
Plan hash value: 2727786061

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      | 76437 |  7315K|   306   (1)| 00:00:04 |
|   1 |  TABLE ACCESS FULL| T12  | 76437 |  7315K|   306   (1)| 00:00:04 |
--------------------------------------------------------------------------

SQL>

成本计算公式:
 Cost = (
         #SRds +
         #MRds * mreadtim/sreadtim +
         CPUCycles / (cpuspeed*sreadtim)
         )
 --注释:
 #SRDs - number of single block reads    单块读 的块数
 #MRDs - number of multi block reads    多块多 的块数
 #CPUCycles - number of CPU Cycles        CPU频率
 sreadtim  - single block read time        单块读的时间
 mreadtim - multi block read time        多块读的时间
 cpuspeed  -  CPU cycles per second        CPU当前速度

1.#SRds=0 因为是全表扫描;
2.#MRds=块数/多块读参数值=1115/128 =8.7109375

SELECT TABLE_NAME,T.BLOCKS
FROM DBA_TABLES T WHERE T.TABLE_NAME='T12'
       TABLE_NAME    BLOCKS
    -----------------------
1    T12    1115

3.#mreadtim

mreadtim =ioseektim+db_file_multiblock_count*db_block_size/iotftspeed=10+128*8192/4096=266

相关参数查询:
    SQL> select pval1 from sys.aux_stats$ where pname = 'IOSEEKTIM';

PVAL1
    ----------
            10

SQL> select value from v$parameter  where name='db_file_multiblock_read_count';
        VALUE
        ---------------------------------------------------------------------------------------
        128

SQL> select value from v$parameter where name='db_block_size';

VALUE
    --------------------------------------------------------------------------------
    8192

SQL>  select pval1 from SYS.aux_stats$ where pname='IOTFRSPEED';

PVAL1
    ----------
          4096

sreadtim =ioseektim+db_block_size/iotfrspeed=10+8192/4096=12

相关参数数值:
    SQL> select pval1 from sys.aux_stats$ where pname = 'IOSEEKTIM';
      PVAL1
 ----------
         10
     SQL> select value from v$parameter where name='db_block_size';
     VALUE
     --------------------------------------------------------------------------------------
     8192
     SQL> select pval1 from sys.aux_stats$ where pname = 'IOTFRSPEED';
      PVAL1
    ----------
       4096

CPUCycles  = 40808.316
CPUCycles等于 PLAN_TABLE里面的CPU_COST数值。

SQL> explain plan for select * from t12;
    Explained.
    
    SQL> select cpu_cost from plan_table;
     CPU_COST
     --------------
    40808316

所以CPUCycles数值为40808316 ms,换算成s为 40808.316。
    
6、cpuspeed
         cpuspeed 等于 CPUSPEEDNW的数值。
         SQL> select pval1 from sys.aux_stats$ where pname='CPUSPEEDNW';
          PVAL1
     ----------
     1720.20725

cpuspeed =  1720.20725

Cost =#SRds+#MRds* mreadtim/sreadtim+#CPUCycles/(cpuspeed*sreadtim)

=0+(1115/128) * 266 / 12+  40808.316/(1720.20725* 12)

SQL> select ceil(0+1115/128 * 266 / 12+  40808.316/(1720.20725* 12)) from dual;
 =196
 
196 与执行计划的306 差异为  113,差异很大。还得再找原因。

经测试,如果把参数db_file_multiblock_read_count修改成 16以后,

上面的公式计算出的成本 为:

mreadtim =ioseektim+db_file_multiblock_count*db_block_size/iotftspeed=10+16*8192/4096=42

Cost = ceil(0+(1115/16) * 42 / 12+  40808.316/(1720.20725* 12)) =246

倒是很执行计划的计算没有多少差别了。

SQL> alter session set db_file_multiblock_read_count=16;

Session altered.

SQL> show parameter db_file_multi;

NAME                                TYPE         VALUE
------ ------------------------------------------------------
db_file_multiblock_read_count        integer      16
SQL> set autot trace exp;
SQL> select * from t12;

Execution Plan
----------------------------------------------------------
Plan hash value: 2727786061

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      | 76437 |  7315K|   248   (1)| 00:00:03 |
|   1 |  TABLE ACCESS FULL| T12  | 76437 |  7315K|   248   (1)| 00:00:03 |
--------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------
2.给出B-tree索引 Unique scan的成本计算公式,贴出执行计划和计算公式。<br>

SQL>
    SQL> set autot trace exp;
    SQL> select * from t12;

Execution Plan
    ----------------------------------------------------------
    Plan hash value: 2727786061

--------------------------------------------------------------------------
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |      | 76437 |  7315K|   306   (1)| 00:00:04 |
    |   1 |  TABLE ACCESS FULL| T12  | 76437 |  7315K|   306   (1)| 00:00:04 |
    --------------------------------------------------------------------------

SQL> show parameter version;
    SQL>
    SQL>
    SQL> create unique index pk_t12_id on t12(object_id);

Index created.

SQL> set linesize 200;
    SQL> set pagesize 500;
    SQL> set autot trace exp
    SQL> ;
      1* create unique index pk_t12_id on t12(object_id)
    SQL> select * from t12 where object_id=1000;

Execution Plan
    ----------------------------------------------------------
    Plan hash value: 1871783013

-----------------------------------------------------------------------------------------
    | Id  | Operation                   | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
    -----------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT            |           |     1 |    98 |     2   (0)| 00:00:01 |
    |   1 |  TABLE ACCESS BY INDEX ROWID| T12       |     1 |    98 |     2   (0)| 00:00:01 |
    |*  2 |   INDEX UNIQUE SCAN         | PK_T12_ID |     1 |       |     1   (0)| 00:00:01 |
    -----------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
    ---------------------------------------------------

2 - access("OBJECT_ID"=1000)

SQL> set autot off;
    SQL> select index_name,blevel,leaf_blocks,clustering_factor,num_rows from user_indexes where index_name='PK_T12_ID';

INDEX_NAME          BLEVEL LEAF_BLOCKS CLUSTERING_FACTOR   NUM_ROWS
    ------------------ ---------- ----------- ----------------- ----------
    PK_T12_ID          1         159              1299      76430

SQL>

--计算Unique scan成本
     Unique scan的成本计算公式=blevel+1=1+1=2
     --小结:
     手工计算的Unique scan的成本为1与执行计划的Cost相同

--------------------------------------------------------------------------------------------------
3.通过10053事件分析一个SQL执行计划的产生过程,需要贴出trace中的相关信息和必要的文字说明。<br>

3.1为了查看有索引时的执行计划,先建立一个索引
SQL> create index idx_t12_owner on t12(owner);

Index created.

SQL>

SQL> execute dbms_stats.gather_table_stats(user,'T12',cascade=>true,estimate_percent=>null,method_opt=>'for all columns size 1');
PL/SQL procedure successfully completed

SQL>
SQL> create table t12_owner as select * from (select distinct owner from t12 ) where rownum<=10;

Table created.

SQL> execute dbms_stats.gather_table_stats(user,'T12_OWNER',cascade=>true,estimate_percent=>null,method_opt=>'for all columns size 1');
PL/SQL procedure successfully completed

SQL> alter system flush shared_pool;

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> set linesize 400;
SQL> set pagesize 400;
SQL> select count(*) from t12_owner o,t12  t where o.owner=t.owner;

Execution Plan
----------------------------------------------------------
Plan hash value: 1246238126

-------------------------------------------------------------------------------------
| Id  | Operation           | Name          | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |               |     1 |    15 |    53   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE     |               |     1 |    15 |            |          |
|   2 |   NESTED LOOPS      |               | 24657 |   361K|    53   (0)| 00:00:01 |
|   3 |    TABLE ACCESS FULL| T12_OWNER     |    10 |    90 |     3   (0)| 00:00:01 |
|*  4 |    INDEX RANGE SCAN | IDX_T12_OWNER |  2466 | 14796 |     5   (0)| 00:00:01 |
-------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

4 - access("O"."OWNER"="T"."OWNER")

SQL>

SQL> set autot off;
SQL> alter system flush shared_pool;

System altered.

SQL> alter system flush shared_pool;

System altered.

SQL> alter system flush shared_pool;

System altered.

SQL> alter session set events '10053 trace name context forever, level 2';

Session altered.

SQL> select count(*) from t12_owner o,t12  t where o.owner=t.owner;

COUNT(*)
----------
      6162

SQL> alter session set events '10053 trace name context off';

Session altered.

SQL>EXIT

trace file contect:
-------------------------------------------------------------------------------------------------
跟踪文件内容解读

***************************************
  PARAMETERS IN OPT_PARAM HINT
  ****************************
***************************************
Column Usage Monitoring is ON: tracking level = 1
***************************************

Considering Query Transformations on query block SEL$1 (#0)
**************************
Query transformations (QT)
**************************
JF: Checking validity of join factorization for query block SEL$1 (#0)
JF: Bypassed: not a UNION or UNION-ALL query block.
ST: not valid since star transformation parameter is FALSE
TE: Checking validity of table expansion for query block SEL$1 (#0)
TE: Bypassed: No partitioned table in query block.
CBQT bypassed for query block SEL$1 (#0): no complex view, sub-queries or UNION (ALL) queries.
CBQT: Validity checks failed for 530jrynjh1h0c.
CSE: Considering common sub-expression elimination in query block SEL$1 (#0)
*************************
Common Subexpression elimination (CSE)
*************************
CSE:     CSE not performed on query block SEL$1 (#0).
OBYE:   Considering Order-by Elimination from view SEL$1 (#0)
***************************
Order-by elimination (OBYE)
***************************
OBYE:     OBYE bypassed: no order by to eliminate.
JE:   Considering Join Elimination on query block SEL$1 (#0)
*************************
Join Elimination (JE)    
*************************
SQL:******* UNPARSED QUERY IS *******
SELECT COUNT(*) "COUNT(*)" FROM "TANG"."T12_OWNER" "O","TANG"."T12" "T" WHERE "O"."OWNER"="T"."OWNER"
JE:   cfro: T12_OWNER objn:98415 col#:1 dfro:T12 dcol#:1
JE:   cfro: T12 objn:98532 col#:1 dfro:T12_OWNER dcol#:1
SQL:******* UNPARSED QUERY IS *******
SELECT COUNT(*) "COUNT(*)" FROM "TANG"."T12_OWNER" "O","TANG"."T12" "T" WHERE "O"."OWNER"="T"."OWNER"
Query block SEL$1 (#0) unchanged
CVM: Considering view merge in query block SEL$1 (#0)
OJE: Begin: find best directive for query block SEL$1 (#0)
OJE: End: finding best directive for query block SEL$1 (#0)
CNT:   Considering count(col) to count(*) on query block SEL$1 (#0)
*************************
Count(col) to Count(*) (CNT)
*************************
CNT:     COUNT() to COUNT(*) not done.
JE:   Considering Join Elimination on query block SEL$1 (#0)
*************************
Join Elimination (JE)    
*************************
SQL:******* UNPARSED QUERY IS *******
SELECT COUNT(*) "COUNT(*)" FROM "TANG"."T12_OWNER" "O","TANG"."T12" "T" WHERE "O"."OWNER"="T"."OWNER"
JE:   cfro: T12_OWNER objn:98415 col#:1 dfro:T12 dcol#:1
JE:   cfro: T12 objn:98532 col#:1 dfro:T12_OWNER dcol#:1
SQL:******* UNPARSED QUERY IS *******
SELECT COUNT(*) "COUNT(*)" FROM "TANG"."T12_OWNER" "O","TANG"."T12" "T" WHERE "O"."OWNER"="T"."OWNER"
Query block SEL$1 (#0) unchanged
query block SEL$1 (#0) unchanged
Considering Query Transformations on query block SEL$1 (#0)
**************************
Query transformations (QT)
**************************
JF: Checking validity of join factorization for query block SEL$1 (#0)
JF: Bypassed: not a UNION or UNION-ALL query block.
ST: not valid since star transformation parameter is FALSE
TE: Checking validity of table expansion for query block SEL$1 (#0)
TE: Bypassed: No partitioned table in query block.
CBQT bypassed for query block SEL$1 (#0): no complex view, sub-queries or UNION (ALL) queries.
CBQT: Validity checks failed for 530jrynjh1h0c.
CSE: Considering common sub-expression elimination in query block SEL$1 (#0)
*************************
Common Subexpression elimination (CSE)
*************************
CSE:     CSE not performed on query block SEL$1 (#0).
SU: Considering subquery unnesting in query block SEL$1 (#0)
********************
Subquery Unnest (SU)
********************
SJC: Considering set-join conversion in query block SEL$1 (#0)
*************************
Set-Join Conversion (SJC)
*************************
SJC: not performed
JE:   Considering Join Elimination on query block SEL$1 (#0)
*************************
Join Elimination (JE)    
*************************
SQL:******* UNPARSED QUERY IS *******
SELECT COUNT(*) "COUNT(*)" FROM "TANG"."T12_OWNER" "O","TANG"."T12" "T" WHERE "O"."OWNER"="T"."OWNER"
JE:   cfro: T12_OWNER objn:98415 col#:1 dfro:T12 dcol#:1
JE:   cfro: T12 objn:98532 col#:1 dfro:T12_OWNER dcol#:1
SQL:******* UNPARSED QUERY IS *******
SELECT COUNT(*) "COUNT(*)" FROM "TANG"."T12_OWNER" "O","TANG"."T12" "T" WHERE "O"."OWNER"="T"."OWNER"
Query block SEL$1 (#0) unchanged
PM: Considering predicate move-around in query block SEL$1 (#0)
**************************
Predicate Move-Around (PM)
**************************
PM:     PM bypassed: Outer query contains no views.
PM:     PM bypassed: Outer query contains no views.
query block SEL$1 (#0) unchanged
FPD: Considering simple filter push in query block SEL$1 (#0)
"O"."OWNER"="T"."OWNER"
try to generate transitive predicate from check constraints for query block SEL$1 (#0)
finally: "O"."OWNER"="T"."OWNER"

apadrv-start sqlid=5873318390038315020
  :
    call(in-use=2056, alloc=16344), compile(in-use=58144, alloc=62216), execution(in-use=3352, alloc=4032)

*******************************************
Peeked values of the binds in SQL statement
*******************************************

Final query after transformations:******* UNPARSED QUERY IS *******
SELECT COUNT(*) "COUNT(*)" FROM "TANG"."T12_OWNER" "O","TANG"."T12" "T" WHERE "O"."OWNER"="T"."OWNER"
kkoqbc: optimizing query block SEL$1 (#0)
        
        :
    call(in-use=2112, alloc=16344), compile(in-use=59408, alloc=62216), execution(in-use=3352, alloc=4032)

kkoqbc-subheap (create addr=0x000000001F2CFAA0)
****************
QUERY BLOCK TEXT
****************
select count(*) from t12_owner o,t12  t where o.owner=t.owner
---------------------
QUERY BLOCK SIGNATURE
---------------------
signature (optimizer): qb_name=SEL$1 nbfros=2 flg=0
  fro(0): flg=0 objn=98532 hint_alias="O"@"SEL$1"
  fro(1): flg=0 objn=98415 hint_alias="T"@"SEL$1"

-----------------------------
SYSTEM STATISTICS INFORMATION
-----------------------------
  Using NOWORKLOAD Stats
  CPUSPEEDNW: 1720 millions instructions/sec (default is 100)
  IOTFRSPEED: 4096 bytes per millisecond (default is 4096)
  IOSEEKTIM:  10 milliseconds (default is 10)
  MBRC:       NO VALUE blocks (default is 8)

***************************************
BASE STATISTICAL INFORMATION

基础统计信息
***********************
Table Stats::
  Table: T12  Alias:  T
#  表:T12 统计信息中的: 行数:76437,数据块:1115;平均行长度

#Column  字段OWNER 的统计信息(直方图中的字段统计信息)
#AvgLen:6  平均长度
#NDV: 31 (NUM_DISTINCT 列的不重复值数)
# Nulls: 0 (NUM_NULLS  列的空行数)
# Density: 0.032258 (DENSITY 列密度,没有直方图的情况下= 1/NDV)

#Rows: 76437  #Blks:  1115  AvgRowLen:  98.00  ChainCnt:  0.00

Column (#1): OWNER(
    AvgLen: 6 NDV: 31 Nulls: 0 Density: 0.032258

索引的统计信息
#LVLS: 1  (BLEVEL BTREE索引高度)
#LB: 180 (LEAF_BLOCKS 索引叶块数)
#DK: 31 (DISTINCT_KEYS 不重复索引关键字)
#LB/K: 5.00 (AVG_LEAF_BLOCKS_PER_KEY 叶块/关键字)
#DB/K: 65.00 (AVG_DATA_BLOCKS_PER_KEY 数据块/关键字)
#CLUF: 2031.00 (CLUSTERING_FACTOR 索引聚合因子)
#主要内容:索引几层;叶子块数;多少个唯一键值; 每个键值有多少个叶块;每个键值有多少个数据块聚簇因子

Index Stats::
  Index: IDX_T12_OWNER  Col#: 1
    LVLS: 1  #LB: 180  #DK: 31  LB/K: 5.00  DB/K: 65.00  CLUF: 2031.00
  Index: PK_T12_ID  Col#: 4
    LVLS: 1  #LB: 159  #DK: 76430  LB/K: 1.00  DB/K: 1.00  CLUF: 1299.00
***********************
表T12_OWNER 的统计信息
Table Stats::
  Table: T12_OWNER  Alias:  O
    #Rows: 10  #Blks:  4  AvgRowLen:  9.00  ChainCnt:  0.00
关联字段OWNER 的统计信息(直方图中的字段统计信息)
  Column (#1): OWNER(
    AvgLen: 9 NDV: 10 Nulls: 0 Density: 0.100000
Access path analysis for T12_OWNER
***************************************
#分析单表的访问路径,有些信息来自于dba_tables
#原始行数 近似值 精确值 非修正值
SINGLE TABLE ACCESS PATH
  Single Table Cardinality Estimation for T12_OWNER[O]
  Table: T12_OWNER  Alias: O
  #(Computed=Card: Original *FF Filter Factor  FF在没有直方图的情况下=Density)

Card: Original: 10.000000  Rounded: 10  Computed: 10.00  Non Adjusted: 10.00
  Access Path: TableScan
    Cost:  3.00  Resp: 3.00  Degree: 0
      Cost_io: 3.00  Cost_cpu: 29986
      Resp_io: 3.00  Resp_cpu: 29986

#全表扫描成本
  Best:: AccessPath: TableScan  
         Cost: 3.00  Degree: 1  Resp: 3.00  Card: 10.00  Bytes: 0

Access path analysis for T12
***************************************
SINGLE TABLE ACCESS PATH
  Single Table Cardinality Estimation for T12[T]#单表基数估计
  Table: T12  Alias: T
    Card: Original: 76437.000000  Rounded: 76437  Computed: 76437.00  Non Adjusted: 76437.00
  Access Path: TableScan                        #全表扫描代价
    Cost:  304.94  Resp: 304.94  Degree: 0
      Cost_io: 304.00  Cost_cpu: 19405956
      Resp_io: 304.00  Resp_cpu: 19405956
  Access Path: index (index (FFS))                #索引快速全扫描
    Index: IDX_T12_OWNER
    resc_io: 51.00  resc_cpu: 10454299                #串行访问代价=51(因为索引是串行存储的)
    ix_sel: 0.000000  ix_sel_with_filters: 1.000000  #带过滤条件索引选择率
  Access Path: index (FFS)
    Cost:  51.51  Resp: 51.51  Degree: 1        #索引并行访问代价=51.51>51(串行访问代价)
      Cost_io: 51.00  Cost_cpu: 10454299
      Resp_io: 51.00  Resp_cpu: 10454299
  Access Path: index (FullScan)                    #索引全扫描
    Index: IDX_T12_OWNER
    resc_io: 181.00  resc_cpu: 16576381
    ix_sel: 1.000000  ix_sel_with_filters: 1.000000 #ix_sel索引选择率 ix_sel_with_filters带过滤条件索引选择率
    Cost: 181.80  Resp: 181.80  Degree: 1
******** Begin index join costing ********
  ****** trying bitmap/domain indexes ******    #索引关联扫描
  Access Path: index (FullScan)
    Index: IDX_T12_OWNER
    resc_io: 181.00  resc_cpu: 16576381
    ix_sel: 1.000000  ix_sel_with_filters: 1.000000
    Cost: 181.80  Resp: 181.80  Degree: 0
  Access Path: index (FullScan)                    #全索引扫描
    Index: IDX_T12_OWNER
    resc_io: 181.00  resc_cpu: 16576381
    ix_sel: 1.000000  ix_sel_with_filters: 1.000000
    Cost: 181.80  Resp: 181.80  Degree: 0
  Bitmap nodes:                                    #BITMAP 扫描
    Used IDX_T12_OWNER
      Cost = 227.253778, sel = 1.000000
  ****** finished trying bitmap/domain indexes ******
******** End index join costing ********
  Best:: AccessPath: IndexFFS
  Index: IDX_T12_OWNER
         Cost: 51.51  Degree: 1  Resp: 51.51  Card: 76437.00  Bytes: 0

***************************************
#关联查询—驱动表的选择
#优化器的统计和计算
#把各种情况罗列出来,选择最优的查询路径
#分别用两个表做驱动表,及各种关联方式的成本 对比。

OPTIMIZER STATISTICS AND COMPUTATIONS
***************************************
GENERAL PLANS        选择执行计划
***************************************
Considering cardinality-based initial join order.
Permutations for Starting Table :0
Join order[1]:  T12_OWNER[O]#0  T12[T]#1 #关联的表对象

***************
Now joining: T12[T]#1        #1 现在要用T12_OWNER小表关联T12大表
***************
NL Join                        #NL Join嵌套循环关联  OUTER TABLE 驱动表

#确定一个驱动表(outer table),另一个表为inner table,驱动表中的每一行与inner表中的相应记录JOIN

Outer table: Card: 10.00  Cost: 3.00  Resp: 3.00  Degree: 1  Bytes: 9
Access path analysis for T12        
  Inner table: T12  Alias: T        #inner TABLE 内表 T12
  Access Path: TableScan
    NL Join:  Cost: 3034.40  Resp: 3034.40  Degree: 1        #全表扫描-嵌套循环关联COST=3034.40
      Cost_io: 3025.00  Cost_cpu: 194089542
      Resp_io: 3025.00  Resp_cpu: 194089542
  Access Path: index (index (FFS))                            #快速索引扫描
    Index: IDX_T12_OWNER
    resc_io: 48.90  resc_cpu: 10454299                        #串行访问代价
    ix_sel: 0.000000  ix_sel_with_filters: 1.000000
  Inner table: T12  Alias: T
  Access Path: index (FFS)                                    #并行访问代价
    NL Join:  Cost: 497.07  Resp: 497.07  Degree: 1
      Cost_io: 492.00  Cost_cpu: 104572978
      Resp_io: 492.00  Resp_cpu: 104572978
  Access Path: index (AllEqJoinGuess)
    Index: IDX_T12_OWNER
    resc_io: 5.00  resc_cpu: 529657
    ix_sel: 0.032258  ix_sel_with_filters: 0.032258
    NL Join : Cost: 53.26  Resp: 53.26  Degree: 1
      Cost_io: 53.00  Cost_cpu: 5326558
      Resp_io: 53.00  Resp_cpu: 5326558

Best NL cost: 53.26                                        #最优NL JOIN  嵌套循环关联 成本 :53.26
          resc: 53.26  resc_io: 53.00  resc_cpu: 5326558    #串行方式的代价 IO代价+CPU代价    
          resp: 53.26  resp_io: 53.00  resc_cpu: 5326558    #并行方式的代价
Join Card:  24657.096774 = outer (10.000000) * inner (76437.000000) * sel (0.032258)
Join Card - Rounded: 24657 Computed: 24657.10
  Outer table:  T12_OWNER  Alias: O
    resc: 3.00  card 10.00  bytes: 9  deg: 1  resp: 3.00
  Inner table:  T12  Alias: T
    resc: 51.51  card: 76437.00  bytes: 6  deg: 1  resp: 51.51
    using dmeth: 2  #groups: 1
    SORT ressource         Sort statistics
      Sort width:         980 Area size:     1048576 Max Area size:   171642880
      Degree:               1
      Blocks to Sort: 1 Row size:     20 Total Rows:             10
      Initial runs:   1 Merge passes:  0 IO Cost / pass:          0
      Total IO sort cost: 0      Total CPU sort cost: 20643984
      Total Temp space used: 0
    SORT ressource         Sort statistics
      Sort width:         980 Area size:     1048576 Max Area size:   171642880
      Degree:               1
      Blocks to Sort: 160 Row size:     17 Total Rows:          76437
      Initial runs:   2 Merge passes:  1 IO Cost / pass:         88
      Total IO sort cost: 248      Total CPU sort cost: 80448497
      Total Temp space used: 1860000
  SM join: Resc: 307.41  Resp: 307.41  [multiMatchCost=0.00]
SM Join    #先排序后合并关联
  SM cost: 307.41
     resc: 307.41 resc_io: 302.00 resc_cpu: 111576765
     resp: 307.41 resp_io: 302.00 resp_cpu: 111576765
  Outer table:  T12_OWNER  Alias: O
    resc: 3.00  card 10.00  bytes: 9  deg: 1  resp: 3.00
  Inner table:  T12  Alias: T
    resc: 51.51  card: 76437.00  bytes: 6  deg: 1  resp: 51.51
    using dmeth: 2  #groups: 1
    Cost per ptn: 0.87  #ptns: 1
    hash_area: 256 (max=41905) buildfrag: 1  probefrag: 168  ppasses: 1
  Hash join: Resc: 55.38  Resp: 55.38  [multiMatchCost=0.00]
HA Join    
  HA cost: 55.38  
     resc: 55.38 resc_io: 54.00 resc_cpu: 28450728
     resp: 55.38 resp_io: 54.00 resp_cpu: 28450728
Best:: JoinMethod: NestedLoop
       Cost: 53.26  Degree: 1  Resp: 53.26  Card: 24657.10 Bytes: 15
***********************
Best so far:  Table#: 0  cost: 3.0015  card: 10.0000  bytes: 90
              Table#: 1  cost: 53.2580  card: 24657.0968  bytes: 369855
***********************
Join order[2]:  T12[T]#1  T12_OWNER[O]#0

***************
Now joining: T12_OWNER[O]#0
***************
NL Join    #NL Join 嵌套循环关联    与T12为驱动表
  Outer table: Card: 76437.00  Cost: 51.51  Resp: 51.51  Degree: 1  Bytes: 6
Access path analysis for T12_OWNER
  Inner table: T12_OWNER  Alias: O
  Access Path: TableScan
    NL Join:  Cost: 82971.54  Resp: 82971.54  Degree: 1
      Cost_io: 82860.00  Cost_cpu: 2302475836
      Resp_io: 82860.00  Resp_cpu: 2302475836

Best NL cost: 82971.54
          resc: 82971.54  resc_io: 82860.00  resc_cpu: 2302475836
          resp: 82971.54  resp_io: 82860.00  resc_cpu: 2302475836
Join Card:  24657.096774 = outer (76437.000000) * inner (10.000000) * sel (0.032258)
Join Card - Rounded: 24657 Computed: 24657.10
  Outer table:  T12  Alias: T
    resc: 51.51  card 76437.00  bytes: 6  deg: 1  resp: 51.51
  Inner table:  T12_OWNER  Alias: O
    resc: 3.00  card: 10.00  bytes: 9  deg: 1  resp: 3.00
    using dmeth: 2  #groups: 1
    SORT ressource         Sort statistics
      Sort width:         980 Area size:     1048576 Max Area size:   171642880
      Degree:               1
      Blocks to Sort: 160 Row size:     17 Total Rows:          76437
      Initial runs:   2 Merge passes:  1 IO Cost / pass:         88
      Total IO sort cost: 248      Total CPU sort cost: 80448497
      Total Temp space used: 1860000
    SORT ressource         Sort statistics
      Sort width:         980 Area size:     1048576 Max Area size:   171642880
      Degree:               1
      Blocks to Sort: 1 Row size:     20 Total Rows:             10
      Initial runs:   1 Merge passes:  0 IO Cost / pass:          0
      Total IO sort cost: 0      Total CPU sort cost: 20643984
      Total Temp space used: 0
  SM join: Resc: 307.41  Resp: 307.41  [multiMatchCost=0.00]
SM Join
  SM cost: 307.41
     resc: 307.41 resc_io: 302.00 resc_cpu: 111576765
     resp: 307.41 resp_io: 302.00 resp_cpu: 111576765
SM Join (with index on outer)
  Access Path: index (FullScan)
    Index: IDX_T12_OWNER
    resc_io: 181.00  resc_cpu: 16576381
    ix_sel: 1.000000  ix_sel_with_filters: 1.000000
    Cost: 181.80  Resp: 181.80  Degree: 1
  Outer table:  T12  Alias: T
    resc: 181.80  card 76437.00  bytes: 6  deg: 1  resp: 181.80
  Inner table:  T12_OWNER  Alias: O
    resc: 3.00  card: 10.00  bytes: 9  deg: 1  resp: 3.00
    using dmeth: 2  #groups: 1
    SORT ressource         Sort statistics
      Sort width:         980 Area size:     1048576 Max Area size:   171642880
      Degree:               1
      Blocks to Sort: 1 Row size:     20 Total Rows:             10
      Initial runs:   1 Merge passes:  0 IO Cost / pass:          0
      Total IO sort cost: 0      Total CPU sort cost: 20643984
      Total Temp space used: 0
  SM join: Resc: 185.80  Resp: 185.80  [multiMatchCost=0.00]
  Outer table:  T12  Alias: T
    resc: 51.51  card 76437.00  bytes: 6  deg: 1  resp: 51.51
  Inner table:  T12_OWNER  Alias: O
    resc: 3.00  card: 10.00  bytes: 9  deg: 1  resp: 3.00
    using dmeth: 2  #groups: 1
    Cost per ptn: 1.06  #ptns: 1
    hash_area: 256 (max=41905) buildfrag: 168  probefrag: 1  ppasses: 1
  Hash join: Resc: 55.68  Resp: 55.68  [multiMatchCost=0.12]
  Outer table:  T12_OWNER  Alias: O
    resc: 3.00  card 10.00  bytes: 9  deg: 1  resp: 3.00
  Inner table:  T12  Alias: T
    resc: 51.51  card: 76437.00  bytes: 6  deg: 1  resp: 51.51
    using dmeth: 2  #groups: 1
    Cost per ptn: 0.87  #ptns: 1
    hash_area: 256 (max=41905) buildfrag: 1  probefrag: 168  ppasses: 1
  Hash join: Resc: 55.38  Resp: 55.38  [multiMatchCost=0.00]
HA Join    哈希关联
  HA cost: 55.38 swapped    
     resc: 55.38 resc_io: 54.00 resc_cpu: 28450728
     resp: 55.38 resp_io: 54.00 resp_cpu: 28450728
Join order aborted: cost > best plan cost
***********************
(newjo-stop-1) k:0, spcnt:0, perm:2, maxperm:2000

*********************************
Number of join permutations tried: 2
*********************************
Consider using bloom filter between O[T12_OWNER] and T[T12] with ??
kkoBloomFilter: join ndv:0 reduction:1.000000 (limit:0.500000)  rejected because not a hash join
Enumerating distribution method (advanced)
--- Distribution method for
join between O[T12_OWNER](serial) and T[T12](serial); jm = 12; right side access path = IndexRange
---- NLJ default -> BROADCAST-LEFT

(newjo-save)    [1 0 ]
Trying or-Expansion on query block SEL$1 (#0)
Transfer Optimizer annotations for query block SEL$1 (#0)
id=0 frofkks[i] (index start key) predicate="O"."OWNER"="T"."OWNER"
id=0 frofkke[i] (index stop key) predicate="O"."OWNER"="T"."OWNER"
Final cost for query block SEL$1 (#0) - All Rows Plan:                    #最后得出最佳成本 执行计划
  Best join order: 1
  Cost: 53.2580  Degree: 1  Card: 24657.0000  Bytes: 369855
  Resc: 53.2580  Resc_io: 53.0000  Resc_cpu: 5326558
  Resp: 53.2580  Resp_io: 53.0000  Resc_cpu: 5326558
kkoqbc-subheap (delete addr=0x000000001F2CFAA0, in-use=27840, alloc=32840)
kkoqbc-end:
        :
    call(in-use=14400, alloc=65656), compile(in-use=60960, alloc=62216), execution(in-use=3352, alloc=4032)

kkoqbc: finish optimizing query block SEL$1 (#0)
apadrv-end
          :
    call(in-use=14400, alloc=65656), compile(in-use=61944, alloc=62216), execution(in-use=3352, alloc=4032)

Starting SQL statement dump

user_id=84 user_name=TANG module=SQL*Plus action=
sql_id=530jrynjh1h0c plan_hash_value=1246238126 problem_type=3
----- Current SQL Statement for this session (sql_id=530jrynjh1h0c) -----
select count(*) from t12_owner o,t12  t where o.owner=t.owner
sql_text_length=62
sql=select count(*) from t12_owner o,t12  t where o.owner=t.owner
----- Explain Plan Dump -----
----- Plan Table -----
 
============
Plan Table
============
--------------------------------------------+-----------------------------------+
| Id  | Operation            | Name         | Rows  | Bytes | Cost  | Time      |
--------------------------------------------+-----------------------------------+
| 0   | SELECT STATEMENT     |              |       |       |    53 |           |
| 1   |  SORT AGGREGATE      |              |     1 |    15 |       |           |
| 2   |   NESTED LOOPS       |              |   24K |  361K |    53 |  00:00:01 |
| 3   |    TABLE ACCESS FULL | T12_OWNER    |    10 |    90 |     3 |  00:00:01 |
| 4   |    INDEX RANGE SCAN  | IDX_T12_OWNER|  2466 |   14K |     5 |  00:00:01 |
--------------------------------------------+-----------------------------------+
Predicate Information:
----------------------
4 - access("O"."OWNER"="T"."OWNER")
 
Content of other_xml column
===========================
  db_version     : 11.2.0.3
  parse_schema   : TANG
  plan_hash      : 1246238126
  plan_hash_2    : 632309206
  Outline Data:
  /*+
    BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('11.2.0.3')
      DB_VERSION('11.2.0.3')
      ALL_ROWS
      OUTLINE_LEAF(@"SEL$1")
      FULL(@"SEL$1" "O"@"SEL$1")
      INDEX(@"SEL$1" "T"@"SEL$1" ("T12"."OWNER"))
      LEADING(@"SEL$1" "O"@"SEL$1" "T"@"SEL$1")
      USE_NL(@"SEL$1" "T"@"SEL$1")
    END_OUTLINE_DATA
  */
 
从上面的跟踪日志中可以看到,最后的执行计划和在SQLPLUS 中是一致的。

--------------------------------------------------------------------------------------------------
4.当统计信息不准确时,CBO可能产生错误的执行计划,请给出这样的一个例子,
在10053 trace中找到CBO出错的位置,并给出必要的文字说明。<br>

C:\Users\Administrator>sqlplus tang/tang@orcl

SQL*Plus: Release 11.2.0.1.0 Production on Fri Dec 20 13:35:09 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> drop table t12;

Table dropped.

SQL> create table t12 as select * from dba_objects;

Table created.

SQL> create index idx_t12_id on t12(object_id);

Index created.

SQL> select count(0) from t12;

COUNT(0)
----------
     76438

SQL> update t12 set object_id=1 where object_id<=70000;

69175 rows updated.

SQL> update t12 set object_id=2 where object_id>70000;

7256 rows updated.

SQL> execute dbms_stats.gather_table_stats(user,'T12',CASCADE=>TRUE,ESTIMATE_PERCENT=>NULL,METHOD_OPT=>'for all columns size 254');

PL/SQL procedure successfully completed.

SQL>

SQL> select count(object_name) from t12 where object_id=1;

Execution Plan
----------------------------------------------------------
Plan hash value: 4279859672

---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |    28 |   305   (1)| 00:00:04 |
|   1 |  SORT AGGREGATE    |      |     1 |    28 |            |          |
|*  2 |   TABLE ACCESS FULL| T12  | 69175 |  1891K|   305   (1)| 00:00:04 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

2 - filter("OBJECT_ID"=1)

SQL> select count(object_name) from t12 where object_id=2;

Execution Plan
----------------------------------------------------------
Plan hash value: 3968484635

-------------------------------------------------------------------------------------------
| Id  | Operation                    | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |            |     1 |    28 |   129   (0)| 00:00:02 |
|   1 |  SORT AGGREGATE              |            |     1 |    28 |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID| T12        |  7256 |   198K|   129   (0)| 00:00:02 |
|*  3 |    INDEX RANGE SCAN          | IDX_T12_ID |  7256 |       |    25   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

3 - access("OBJECT_ID"=2)

SQL>

上面表中数据 OBJECT_ID=1 时,数据有69175 ,OBJECT_ID=2 时,数据有7256;

从上面的执行计划可以看出,第一个使用了全表搜索,第二个查询使用了索引,是正确的。
因为先从索引中查找 ojbect_id=2 的数据比较少,走索引,再到表中查找数据,速度更快。

下面我们对数据进行一个修正。把OBJECT_ID 的分布进行修改。

SQL> set autot off;
SQL> update t12 set object_id=3 where rownum<=60000;

60000 rows updated.

SQL> select count(0) from t12 where object_id=1;

COUNT(0)
----------
      9207

SQL> set autot trace expl;
SQL> select count(object_name) from t12 where object_id=1;

Execution Plan
----------------------------------------------------------
Plan hash value: 4279859672

---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |    28 |   305   (1)| 00:00:04 |
|   1 |  SORT AGGREGATE    |      |     1 |    28 |            |          |
|*  2 |   TABLE ACCESS FULL| T12  | 69175 |  1891K|   305   (1)| 00:00:04 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

2 - filter("OBJECT_ID"=1)

SQL>

经修改后,object_id=1 的数据只有 9207,在表中的分布应该是很少了。应该走索引才对。
这就是因为表中的统计信息已不正确的原因。从上面的执行计划也可以看出,执行计划中统计出的
数据行数 :69175 就是在修改前的OBJECT_ID=1 的数量。

我们来跟踪一下10053的跟踪日志。查找原因。

**************************
Predicate Move-Around (PM)
**************************
PM:     PM bypassed: Outer query contains no views.
PM:     PM bypassed: Outer query contains no views.
query block SEL$1 (#0) unchanged
FPD: Considering simple filter push in query block SEL$1 (#0)
"T12"."OBJECT_ID"=:B1
try to generate transitive predicate from check constraints for query block SEL$1 (#0)
finally: "T12"."OBJECT_ID"=:B1

apadrv-start sqlid=7904889763193459797
  :
    call(in-use=1520, alloc=16344), compile(in-use=55176, alloc=57056), execution(in-use=3296, alloc=4032)

*******************************************
Peeked values of the binds in SQL statement
*******************************************
----- Bind Info (kkscoacd) -----
 Bind#0
  oacdty=02 mxl=22(02) mxlc=00 mal=00 scl=00 pre=00
  oacflg=10 fl2=0100 frm=00 csi=00 siz=24 off=0
  kxsbbbfp=ae8c6460  bln=22  avl=02  flg=09
  value=1

Final query after transformations:******* UNPARSED QUERY IS *******
SELECT COUNT("T12"."OBJECT_NAME") "COUNT(OBJECT_NAME)" FROM "TANG"."T12" "T12" WHERE "T12"."OBJECT_ID"=:B1
kkoqbc: optimizing query block SEL$1 (#0)
        
        :
    call(in-use=1568, alloc=16344), compile(in-use=56104, alloc=57056), execution(in-use=3432, alloc=4032)

kkoqbc-subheap (create addr=0x000000001819A658)
****************
QUERY BLOCK TEXT
****************
select count(object_name) from t12 where object_id=:"SYS_B_0"
---------------------
QUERY BLOCK SIGNATURE
---------------------
signature (optimizer): qb_name=SEL$1 nbfros=1 flg=0
  fro(0): flg=0 objn=98536 hint_alias="T12"@"SEL$1"

-----------------------------
SYSTEM STATISTICS INFORMATION
-----------------------------
  Using NOWORKLOAD Stats
  CPUSPEEDNW: 1720 millions instructions/sec (default is 100)
  IOTFRSPEED: 4096 bytes per millisecond (default is 4096)
  IOSEEKTIM:  10 milliseconds (default is 10)
  MBRC:       NO VALUE blocks (default is 8)

***************************************
BASE STATISTICAL INFORMATION
***********************
Table Stats::
  Table: T12  Alias: T12
    #Rows: 76438  #Blks:  1115  AvgRowLen:  96.00  ChainCnt:  0.00

#行数 块数 平均行长
Index Stats::
  Index: IDX_T12_ID  Col#: 4
    LVLS: 1  #LB: 263  #DK: 2  LB/K: 131.00  DB/K: 545.00  CLUF: 1091.00

#索引几层叶子块数多少个唯一键值每个键值有多少个叶块每个键值有多少个数据块聚簇因子

Access path analysis for T12
***************************************
SINGLE TABLE ACCESS PATH
  Single Table Cardinality Estimation for T12[T12]
  Column (#4):
    NewDensity:0.047468, OldDensity:0.000007 BktCnt:76431, PopBktCnt:76431, PopValCnt:2, NDV:2
  Column (#4): OBJECT_ID(
    AvgLen: 3 NDV: 2 Nulls: 7 Density: 0.047468 Min: 1 Max: 2
    Histogram: Freq  #Bkts: 2  UncompBkts: 76431  EndPtVals: 2

Table: T12  Alias: T12
    Card: Original: 76438.000000  Rounded: 69175  Computed: 69175.00  Non Adjusted: 69175.00

#原始行数 近似值 精确值 非修正值
#可以看出,问题就出在这里,ORACLE 认为,现在OBJECT_ID=1 的数据就是: 69175

Access Path: TableScan 全表扫描代价
    Cost:  305.35  Resp: 305.35  Degree: 0
      Cost_io: 304.00  Cost_cpu: 27814286
      Resp_io: 304.00  Resp_cpu: 27814286
  Access Path: index (AllEqRange)  索引全扫描代价
    Index: IDX_T12_ID
    resc_io: 1227.00  resc_cpu: 37100607
    ix_sel: 0.905065  ix_sel_with_filters: 0.905065

#ix_sel 索引选择率
    #ix_sel_with_filters带过滤条件索引选择率
    #这里也可以看出,ORACLE认为索引选择率很高

Cost: 1228.80  Resp: 1228.80  Degree: 1
  Best:: AccessPath: TableScan
         Cost: 305.35  Degree: 1  Resp: 305.35  Card: 69175.00  Bytes: 0

得出结论走全表搜索优于索引

***************************************

OPTIMIZER STATISTICS AND COMPUTATIONS
***************************************
GENERAL PLANS
***************************************
Considering cardinality-based initial join order.
Permutations for Starting Table :0
Join order[1]:  T12[T12]#0
***********************
Best so far:  Table#: 0  cost: 305.3474  card: 69175.0000  bytes: 1936900
***********************
(newjo-stop-1) k:0, spcnt:0, perm:1, maxperm:2000

*********************************
Number of join permutations tried: 1
*********************************
Enumerating distribution method (advanced)

Trying or-Expansion on query block SEL$1 (#0)
Transfer Optimizer annotations for query block SEL$1 (#0)
id=0 frofand predicate="T12"."OBJECT_ID"=:B1
Final cost for query block SEL$1 (#0) - All Rows Plan:
  Best join order: 1
  Cost: 305.3474  Degree: 1  Card: 69175.0000  Bytes: 1936900
  Resc: 305.3474  Resc_io: 304.0000  Resc_cpu: 27814286
  Resp: 305.3474  Resp_io: 304.0000  Resc_cpu: 27814286
kkoqbc-subheap (delete addr=0x000000001819A658, in-use=13600, alloc=16408)
kkoqbc-end:
        :
    call(in-use=29304, alloc=49184), compile(in-use=57072, alloc=61200), execution(in-use=3800, alloc=4032)

kkoqbc: finish optimizing query block SEL$1 (#0)
apadrv-end
          :
    call(in-use=29304, alloc=49184), compile(in-use=57984, alloc=61200), execution(in-use=3800, alloc=4032)

Starting SQL statement dump

user_id=84 user_name=TANG module=SQL*Plus action=
sql_id=6vcygbf9w952p plan_hash_value=-15107624 problem_type=3
----- Current SQL Statement for this session (sql_id=6vcygbf9w952p) -----
 select count(object_name) from t12 where object_id=:"SYS_B_0"
sql_text_length=63
sql= select count(object_name) from t12 where object_id=:"SYS_B_0"
----- Explain Plan Dump -----
----- Plan Table -----
 
============
Plan Table
============
--------------------------------------+-----------------------------------+
| Id  | Operation           | Name    | Rows  | Bytes | Cost  | Time      |
--------------------------------------+-----------------------------------+
| 0   | SELECT STATEMENT    |         |       |       |   305 |           |
| 1   |  SORT AGGREGATE     |         |     1 |    28 |       |           |
| 2   |   TABLE ACCESS FULL | T12     |   68K | 1892K |   305 |  00:00:04 |
--------------------------------------+-----------------------------------+
Predicate Information:
----------------------
2 - filter("OBJECT_ID"=:SYS_B_0)
 
Content of other_xml column
===========================
  db_version     : 11.2.0.3
  parse_schema   : TANG
  plan_hash      : 4279859672
  plan_hash_2    : 3898508299
Peeked Binds
============
  Bind variable information
    position=1
    datatype(code)=2
    datatype(string)=NUMBER
    precision=0
    scale=0
    max length=22
    value=1
  Outline Data:
  /*+
    BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('11.2.0.3')
      DB_VERSION('11.2.0.3')
      ALL_ROWS
      OUTLINE_LEAF(@"SEL$1")
      FULL(@"SEL$1" "T12"@"SEL$1")
    END_OUTLINE_DATA
  */

【性能优化】 之 10053 事件相关推荐

  1. oracle 性能优化 07_诊断事件

    2019独角兽企业重金招聘Python工程师标准>>> 一.诊断事件     诊断事件无官方技术文档支持,使用存在风险,慎用.使用诊断事件可以获取问题更多的信息,调整系统运行 特性, ...

  2. oracle SQL性能分析之10053事件

    优化器生成正确执行计划的前提条件是要有正确的统计信息,不准确的统计信息往往会导致错误的执行计划.当通过SQL和基数推断出的执行计划和实际执行计划不同时,就可以借助10053事件.10053事件是用来诊 ...

  3. 前端性能优化:使用媒体查询加载指定大小的背景图片

    日期:2013-7-8  来源:GBin1.com 直到CSS @supports被广泛支持,CSS媒体查询的使用接近于CSS中写逻辑控制.我们经常用CSS媒体查询来根据设备调整CSS属性(通常根据屏 ...

  4. 前端性能优化方向探究

    目录 一.概述 二.前端优化必读 1.初探浏览器渲染 2.回流和重绘 3.探究CSS和JS阻塞问题 4.外部JS脚本的引用方式 5.script和link标签对DOM解析和渲染的影响 6.Canvas ...

  5. Oracle性能优化 以及 库缓存命中率及等待事件

    http://www.cnblogs.com/hyddd/archive/2009/08/30/1556939.html 前言 最近hyddd一直看Oracle的资料,今天特地总结一下这段时间了解到的 ...

  6. cocos微信小游戏开发-http请求-使用微信云函数-toast-loading-动态加载图片-添加触摸事件-微信分享-label点击事件-背景音乐音效-程序活动状态判断-性能优化

    cocos开发微信小游戏相关-<益智推箱> 扫码查看功能,有需要可直接提问 Cocos Creator 3.4 用户手册 cocos creator基本操作 微信开发文档|云函数 1. h ...

  7. oracle事件的特点,ORACLE 深入解析10053事件(1)

    本帖最后由 leonarding 于 2013-2-24 15:57 编辑 新年新说: 新年伊始,2012年过去了,我们又踏上了2013年的,回顾2012我们付出了很多,辛勤和汗水换来了知识和友谊,当 ...

  8. 10053 事件详解

    以下内容完全拷贝于ITPUT大牛,为方便查找,做下记录. 原文链接:http://www.itpub.net/thread-1766504-1-1.html 由于帖子较长顾分为2段:第一段  < ...

  9. Oracle性能优化专题

    Oracle优化是开发人员必须掌握的技能,与其说是技能不如是开发基本.而且在面试过程中这个话题也常常被问到,有一两年工作经验的童鞋面试这个问题是肯定要被问到的,如果知识简单的CRUD实现功能,则是没有 ...

最新文章

  1. jquery实现返回顶部按钮和scroll滚动功能[带动画效果] 转载
  2. Firefox 65.0.2 发布,Firefox 66 预计3月19日推出
  3. springboot 第四讲
  4. 2022.2.21显示器连接器引脚信号定义1
  5. 一维傅里叶变换后的复数怎样理解?
  6. ios 获取固件版本_觉得iOS测试版本BUG太多?系统降级试一试?
  7. ios 镜像_2020年微软MSDN原版系统镜像下载 包含Windows10/7/8/8.1/XP系统
  8. mse 反编译_专业Delphi反编译工具(DeDeDark)
  9. 项目详细设计开发文档
  10. 打坐是开发潜能的快速方法
  11. 【福利】更新电脑游戏安装合集,百款大型单机游戏,百度网盘临时会员领取方法...
  12. 接入微信SDK 获取用户定位
  13. 当前 IT 行业,软件开发应该掌握的几种编程语言,你学会了几种?
  14. 小米怎么把便签放在手机桌面上
  15. jzyz 1225 调查干草
  16. 数学复习全程规划及方法指导(武忠祥笔记)
  17. u盘linux系统安装文件,使用U盘安装LINUX系统
  18. java制作超炫流星雨表白_制作超炫拱形流星雨插画图片的PS技巧
  19. JAVA的Stream
  20. openstack-Keystone 服务部署基于centos 7

热门文章

  1. 信息安全风险评估实施
  2. Exchange EMC打开出错 解决
  3. windos命令行设置网络
  4. Api文档生成工具与Api文档的传播(pdf)
  5. 简单显示分配器的实现
  6. 【pwnable.tw】 death_note
  7. 全国省市编码_地区编码
  8. STM32F0xx_SPI读写(Flash)配置详细过程
  9. hdu 1058 Humble Numbers
  10. 利用设计模式替代项目中的if else(转)