【10053 事件】10053事件的跟蹤檔案解析

楊奇龍發表於2010-10-21

透過對 sql 做10053 事件,可以發現最佳化器為什麼選擇我們看到的最終的執行計劃。10053 事件的部分說明。

第一部分  包含了作業系統,記憶體,cpu ,資料庫和會話資訊
Trace file f:\orcl\diag\rdbms\oracl\oracl\trace\oracl_ora_5080.trc
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Windows NT Version V5.2 Service Pack 2
CPU                 : 2 - type 586, 1 Physical Cores
Process Affinity    : 0x00000000
Memory (Avail/Total): Ph:285M/1022M, Ph+PgF:1914M/2977M, VA:1379M/2047M
Instance name: oracl
Redo thread mounted by this instance: 1
Oracle process number: 26
Windows thread id: 5080, image: ORACLE.EXE (SHAD)

*** 2010-10-19 14:32:23.765
*** SESSION ID:(164.65) 2010-10-19 14:32:23.765
*** CLIENT ID:() 2010-10-19 14:32:23.765
*** SERVICE NAME:(SYS$USERS) 2010-10-19 14:32:23.765
*** MODULE NAME:(sqlplus.exe) 2010-10-19 14:32:23.765
*** ACTION NAME:() 2010-10-19 14:32:23.765

Registered qb: SEL$1 0x25356174 (PARSER)
---------------------
QUERY BLOCK SIGNATURE
---------------------
  signature (): qb_name=SEL$1 nbfros=1 flg=0
    fro(0): flg=4 bjn=69812 hint_alias="T"@"SEL$1"

SPM: statement not found in SMB
DOP: Automatic degree of parallelism is disabled: Parameter.
PM: Considering predicate move-around in query block SEL$1 (#0)
 從這裡開始10053 的資訊部分。cbo 主要對sql語句的謂詞進行分析,重寫,改寫sql為符合邏輯的sql語句。
**************************
Predicate Move-Around (PM)
**************************
OPTIMIZER INFORMATION

******************************************
----- Current SQL Statement for this session (sql_id=a4a1q4c86ghkq) -----
EXPLAIN PLAN SET STATEMENT_ID='PLUS4294967295' FOR select owner,object_name,object_id, count(*)
from t group by owner ,object_name,object_id
*******************************************
Legend
The following abbreviations are used by optimizer trace.
CBQT - cost-based query transformation
JPPD - join predicate push-down
OJPPD - old-style. (non-cost-based) JPPD
FPD - filter push-down
PM - predicate move-around
CVM - complex view merging
SPJ - select-project-join
SJC - set join conversion
SU - subquery unnesting
OBYE - order by elimination
ST - star transformation
CNT - count(col) to count(*) transformation
JE - Join Elimination
qb - query block
LB - leaf blocks
DK - distinct keys
LB/K - average number of leaf blocks per key
DB/K - average number of data blocks per key
CLUF - clustering factor
NDV - number of distinct values
Resp - response cost
Card - cardinality
Resc - resource cost
NL - nested loops (join)
SM - sort merge (join)
HA - hash (join)
CPUSPEED - CPU Speed
IOTFRSPEED - I/O transfer speed
IOSEEKTIM - I/O seek time
SREADTIM - average single block read time
MREADTIM - average multiblock read time
MBRC - average multiblock read count
MAXTHR - maximum I/O system throughput
SLAVETHR - average slave I/O throughput
dmeth - distribution method
  1: no partitioning required
  2: value partitioned
  4: right is random (round-robin)
  128: left is random (round-robin)
  8: broadcast right and partition left
  16: broadcast left and partition right
  32: partition left using partitioning of right
  64: partition right using partitioning of left
  256: run the join in serial
  0: invalid distribution method
sel - selectivity
ptn - partition

--以上為對trace檔案的一些縮寫的解釋。
***************************************
PARAMETERS USED BY THE OPTIMIZER
********************************
  *************************************
  PARAMETERS WITH ALTERED VALUES
  ******************************
Compilation Environment Dump
Bug Fix Control Environment

一些引數的初始化資訊。
  *************************************
  PARAMETERS WITH DEFAULT VALUES
  ******************************
Compilation Environment Dump
optimizer_mode_hinted               = false
optimizer_features_hinted           = 0.0.0
parallel_execution_enabled          = true
parallel_query_forced_dop           = 0
parallel_dml_forced_dop             = 0
parallel_ddl_forced_degree          = 0
parallel_ddl_forced_instances       = 0
_query_rewrite_fudge                = 90
optimizer_features_enable           = 11.1.0.6
_optimizer_search_limit             = 5
......
_pred_move_around                   = true

_full_pwise_join_enabled            = true
_partial_pwise_join_enabled         = true
_left_nested_loops_random           = true
_improved_row_length_enabled        = true
_index_join_enabled                 = true
_enable_type_dep_selectivity        = true
_improved_outerjoin_card            = true
_optimizer_adjust_for_nulls         = true
_optimizer_degree                   = 0
_use_column_stats_for_function      = true
_subquery_pruning_enabled           = true
_subquery_pruning_mv_enabled        = false
_or_expand_nvl_predicate            = true
_like_with_bind_as_equality         = false
_table_scan_cost_plus_one           = true
_cost_equality_semi_join            = true
_default_non_equality_sel_check     = true
_new_initial_join_orders            = true
_oneside_colstat_for_equijoins      = true
_optim_peek_user_binds              = true
_minimal_stats_aggregation          = true
_force_temptables_for_gsets         = false
workarea_size_policy                = auto
_optimizer_or_expansion_subheap     = true
_optimizer_free_transformation_heap = true
_optimizer_reuse_cost_annotations   = true
_result_cache_auto_size_threshold   = 100
_result_cache_auto_time_threshold   = 1000
_optimizer_nested_rollup_for_gset   = 100
_nlj_batching_enabled               = 1
parallel_query_default_dop          = 0
is_recur_flags                      = 0
optimizer_use_invisible_indexes     = false
flashback_data_archive_internal_cursor = 0
_optimizer_extended_stats_usage_control = 240
Bug Fix Control Environment---bug 的修復資訊。
    fix  3834770 = 1      
    fix  3746511 = enabled
    fix  4519016 = enabled
    fix  3118776 = enabled
    ......

---cbo 進行計算的一些資訊,這個有點難看懂 。
  ***************************************
  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)
**************************
CBQT: Validity checks passed for a4a1q4c86ghkq.
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.
CNT:   Considering count(col) to count(*) on query block SEL$1 (#0)
*************************
Count(col) to Count(*) (CNT)
*************************
CNT:     COUNT() to COUNT(*) not done.
query block SEL$1 (#0) unchanged
Considering Query Transformations on query block SEL$1 (#0)
**************************
Query transformations (QT)
**************************
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).
query block SEL$1 (#0) unchanged
apadrv-start sqlid=11684648757439742550
  :
    call(in-use=376, alloc=16360), compile(in-use=58852, alloc=60944), execution(in-use=66496, alloc=69396)

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

CBQT: Considering cost-based transformation on query block SEL$1 (#0)
********************************
COST-BASED QUERY TRANSFORMATIONS
********************************
FPD: Considering simple filter push (pre rewrite) in query block SEL$1 (#0)
FPD:  Current where clause predicates  ??

OBYE:   Considering Order-by Elimination from view SEL$1 (#0)
***************************
Order-by elimination (OBYE)
***************************
OBYE:     OBYE bypassed: no order by to eliminate.
Considering Query Transformations on query block SEL$1 (#0)
**************************
Query transformations (QT)
**************************
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).
kkqctdrvTD-start on query block SEL$1 (#0)
kkqctdrvTD-start: :
    call(in-use=376, alloc=16360), compile(in-use=120876, alloc=122192), execution(in-use=127924, alloc=130824)

kkqctdrvTD-cleanup: transform(in-use=0, alloc=0) :
    call(in-use=376, alloc=16360), compile(in-use=121200, alloc=122192), execution(in-use=127924, alloc=130824)

kkqctdrvTD-end:
    call(in-use=376, alloc=16360), compile(in-use=121328, alloc=122192), execution(in-use=127924, alloc=130824)

SJC: Considering set-join conversion in query block SEL$1 (#1)
*************************
Set-Join Conversion (SJC)
*************************
SJC: not performed
CNT:   Considering count(col) to count(*) on query block SEL$1 (#1)
*************************
Count(col) to Count(*) (CNT)
*************************
CNT:     COUNT() to COUNT(*) not done.
PM: Considering predicate move-around in query block SEL$1 (#1)
**************************
Predicate Move-Around (PM)
**************************
PM:     PM bypassed: Outer query contains no views.
PM:     PM bypassed: Outer query contains no views.
kkqctdrvTD-start on query block SEL$1 (#1)
kkqctdrvTD-start: :
    call(in-use=520, alloc=16360), compile(in-use=121368, alloc=122192), execution(in-use=127924, alloc=130824)

kkqctdrvTD-cleanup: transform(in-use=0, alloc=0) :
    call(in-use=520, alloc=16360), compile(in-use=121660, alloc=126248), execution(in-use=132000, alloc=134900)

kkqctdrvTD-end:
    call(in-use=520, alloc=16360), compile(in-use=121780, alloc=126248), execution(in-use=132000, alloc=134900)

kkqctdrvTD-start on query block SEL$1 (#1)
kkqctdrvTD-start: :
    call(in-use=520, alloc=16360), compile(in-use=121780, alloc=126248), execution(in-use=132000, alloc=134900)

Registered qb: SEL$1 0x22ae1df4 (COPY SEL$1)
---------------------
QUERY BLOCK SIGNATURE
---------------------
  signature(): NULL
***********************************
Cost-Based Group By Placement
***********************************
GBP: Checking validity of GBP for query block SEL$1 (#1)
GBP: Checking validity of group-by placement for query block SEL$1 (#1)
GBP: Bypassed: Query has invalid constructs.
kkqctdrvTD-cleanup: transform(in-use=1852, alloc=4072) :
    call(in-use=520, alloc=16360), compile(in-use=128324, alloc=146580), execution(in-use=152432, alloc=155332)

kkqctdrvTD-end:
    call(in-use=520, alloc=16360), compile(in-use=124336, alloc=146580), execution(in-use=152432, alloc=155332)

GBP: Applying transformation directives
GBP: Checking validity of group-by placement for query block SEL$1 (#1)
GBP: Bypassed: Query has invalid constructs.
JPPD:  Considering Cost-based predicate pushdown from query block SEL$1 (#1)
************************************
Cost-based predicate pushdown (JPPD)
************************************
kkqctdrvTD-start on query block SEL$1 (#1)
kkqctdrvTD-start: :
    call(in-use=520, alloc=16360), compile(in-use=124336, alloc=146580), execution(in-use=152432, alloc=155332)

kkqctdrvTD-cleanup: transform(in-use=0, alloc=0) :
    call(in-use=520, alloc=16360), compile(in-use=124612, alloc=146580), execution(in-use=152432, alloc=155332)

kkqctdrvTD-end:
    call(in-use=520, alloc=16360), compile(in-use=124732, alloc=146580), execution(in-use=152432, alloc=155332)

JPPD: Applying transformation directives
query block SEL$1 (#1) unchanged
FPD: Considering simple filter push in query block SEL$1 (#1)
 ??
kkoqbc: optimizing query block SEL$1 (#1)
       
        :
    call(in-use=520, alloc=16360), compile(in-use=125392, alloc=146580), execution(in-use=152432, alloc=155332)

kkoqbc-subheap (create addr=0x0A69B0A0)
****************
QUERY BLOCK TEXT  ---執行的sql語句文字。
****************
select owner,object_name,object_id, count(*)
from t group by owner ,object_name,object_id
---------------------
QUERY BLOCK SIGNATURE
---------------------
signature (optimizer): qb_name=SEL$1 nbfros=1 flg=0
  fro(0): flg=0 bjn=69812 hint_alias="T"@"SEL$1"

系統的統計資訊
-----------------------------
SYSTEM STATISTICS INFORMATION
-----------------------------
  Using NOWORKLOAD Stats
  CPUSPEED: 1846 millions instructions/sec
  IOTFRSPEED: 4096 bytes per millisecond (default is 4096)
  IOSEEKTIM: 10 milliseconds (default is 10)

下面是表和索引的統計資訊。
***************************************
BASE STATISTICAL INFORMATION           -
***********************
Table Stats::
  Table:  T  Alias:  T
    #Rows: 203010  #Blks:  2973  AvgRowLen:  101.00
Index Stats::
  Index: IDX_T  Col#: 1 2 4
    LVLS: 2  #LB: 1306  #DK: 67670  LB/K: 1.00  DB/K: 3.00  CLUF: 203010.00
-----這是最重要的部分,關於路徑的選擇的部分。各種路徑的cost 值都會在這裡列出。最佳化器選擇最終的表的訪問路徑也在這裡顯示。
Access path analysis for T
***************************************
SINGLE TABLE ACCESS PATH
  Single Table Cardinality Estimation for T[T]
  Table: T  Alias: T
    Card: Original: 203010.000000  Rounded: 203010  Computed: 203010.00  Non Adjusted: 203010.00
  Access Path: TableScan
    Cost:  809.88  Resp: 809.88  Degree: 0
      Cost_io: 807.00  Cost_cpu: 63804141
      Resp_io: 807.00  Resp_cpu: 63804141
  Access Path: index (index (FFS))
    Index: IDX_T
    resc_io: 355.00  resc_cpu: 33661801
    ix_sel: 0.000000  ix_sel_with_filters: 1.000000
  Access Path: index (FFS)
    Cost:  356.52  Resp: 356.52  Degree: 1
      Cost_io: 355.00  Cost_cpu: 33661801
      Resp_io: 355.00  Resp_cpu: 33661801
  Access Path: index (FullScan)
    Index: IDX_T
    resc_io: 1308.00  resc_cpu: 49916844
    ix_sel: 1.000000  ix_sel_with_filters: 1.000000
    Cost: 1310.25  Resp: 1310.25  Degree: 1
  Best:: AccessPath: IndexFFS  ---最佳路徑。
  Index: IDX_T
         Cost: 356.52  Degree: 1  Resp: 356.52  Card: 203010.00  Bytes: 0

Grouping column cardinality [     OWNER]    22
Grouping column cardinality [OBJECT_NAM]    40356
Grouping column cardinality [ OBJECT_ID]    68480
***************************************


OPTIMIZER STATISTICS AND COMPUTATIONS
***************************************
GENERAL PLANS
***************************************
Considering cardinality-based initial join order.
Permutations for Starting Table :0
Join order[1]:  T[T]#0
GROUP BY sort
  ColGroup (#1, Index) IDX_T
    Col#: 1 2 4    CorStregth: 898459.22
  ColGroup Usage:: PredCnt: 3  Matches Full: #0  Partial:  Sel: 0.0000
GROUP BY adjustment factor: 0.000001
GROUP BY cardinality:  67670.000000, TABLE cardinality:  203010.000000
    SORT ressource         Sort statistics
      Sort width:         118 Area size:      131072 Max Area size:    20971520
      Degree:               1
      Blocks to Sort: 1243 Row size:     50 Total Rows:         203010
      Initial runs:   2 Merge passes:  1 IO Cost / pass:        674
      Total IO sort cost: 1089      Total CPU sort cost: 203830045
      Total Temp space used: 13067000
***********************
Best so far:  Table#: 0  cost: 1454.7215  card: 203010.0000  bytes: 7308360
***********************

****** Recost for ORDER BY (using index) ************
Access path analysis for T
***************************************
SINGLE TABLE ACCESS PATH
  Single Table Cardinality Estimation for T[T]
  Table: T  Alias: T
    Card: Original: 203010.000000  Rounded: 203010  Computed: 203010.00  Non Adjusted: 203010.00
  Access Path: TableScan
    Cost:  809.88  Resp: 809.88  Degree: 0
      Cost_io: 807.00  Cost_cpu: 63804141
      Resp_io: 807.00  Resp_cpu: 63804141
  Access Path: index (FullScan)
    Index: IDX_T
    resc_io: 1308.00  resc_cpu: 49916844
    ix_sel: 1.000000  ix_sel_with_filters: 1.000000
    Cost: 1310.25  Resp: 1310.25  Degree: 1
  Best:: AccessPath: IndexRange
  Index: IDX_T
         Cost: 1310.25  Degree: 1  Resp: 1310.25  Card: 203010.00  Bytes: 36

Join order[1]:  T[T]#0
***********************
Best so far:  Table#: 0  cost: 1310.2535  card: 203010.0000  bytes: 7308360
***********************
(newjo-stop-1) k:0, spcnt:0, perm:1, maxperm:2000

*********************************
Number of join permutations tried: 1
*********************************
  ColGroup Usage:: PredCnt: 3  Matches Full: #0  Partial:  Sel: 0.0000
GROUP BY adjustment factor: 0.000001
GROUP BY cardinality:  67670.000000, TABLE cardinality:  203010.000000
    SORT ressource         Sort statistics
      Sort width:         118 Area size:      131072 Max Area size:    20971520
      Degree:               1
      Blocks to Sort: 1243 Row size:     50 Total Rows:         203010
      Initial runs:   2 Merge passes:  1 IO Cost / pass:        674
      Total IO sort cost: 1089      Total CPU sort cost: 203830045
      Total Temp space used: 13067000
Trying or-Expansion on query block SEL$1 (#1)
Transfer Optimizer annotations for query block SEL$1 (#1)
  ColGroup Usage:: PredCnt: 3  Matches Full: #0  Partial:  Sel: 0.0000
GROUP BY adjustment factor: 0.000001
Final cost for query block SEL$1 (#1) - All Rows Plan:
  Best join order: 1
  Cost: 1310.2535  Degree: 1  Card: 203010.0000  Bytes: 7308360
  Resc: 1310.2535  Resc_io: 1308.0000  Resc_cpu: 49916844
  Resp: 1310.2535  Resp_io: 1308.0000  Resc_cpu: 49916844
kkoqbc-subheap (delete addr=0x0A69B0A0, in-use=9956, alloc=12132)
kkoqbc-end:
        :
    call(in-use=7804, alloc=32736), compile(in-use=132696, alloc=146580), execution(in-use=152432, alloc=155332)

kkoqbc: finish optimizing query block SEL$1 (#1)
apadrv-end
          :
    call(in-use=7804, alloc=32736), compile(in-use=133392, alloc=146580), execution(in-use=152432, alloc=155332)


Starting SQL statement dump

user_id=0 user_name=SYS module=sqlplus.exe action=
sql_id=a4a1q4c86ghkq plan_hash_value=-1110490754 problem_type=3
----- Current SQL Statement for this session (sql_id=a4a1q4c86ghkq) -----
EXPLAIN PLAN SET STATEMENT_ID='PLUS4294967295' FOR select owner,object_name,object_id, count(*)
from t group by owner ,object_name,object_id
sql_text_length=141
sql=EXPLAIN PLAN SET STATEMENT_ID='PLUS4294967295' FOR select owner,object_name,object_id, count(*)
from t group by owner ,object_name,object_id
----- Explain Plan Dump -----
----- Plan Table -----
 
============
Plan Table
============
----------------------------------------+-----------------------------------+
| Id  | Operation             | Name    | Rows  | Bytes | Cost  | Time      |
----------------------------------------+-----------------------------------+
| 0   | SELECT STATEMENT      |         |       |       |  1310 |           |
| 1   |  SORT GROUP BY NOSORT |         |   66K | 2379K |  1310 |  00:00:16 |
| 2   |   INDEX FULL SCAN     | IDX_T   |  198K | 7137K |  1310 |  00:00:16 |
----------------------------------------+-----------------------------------+
Predicate Information:
----------------------
 
Content of other_xml column
===========================
  db_version     : 11.1.0.6
  parse_schema   : SYS
  plan_hash      : 3184476542
  plan_hash_2    : 1989369395
  Outline Data:
  /*+
    BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('11.1.0.6')
      DB_VERSION('11.1.0.6')
      ALL_ROWS
      OUTLINE_LEAF(@"SEL$1")
      INDEX(@"SEL$1" " ("T"."OWNER" "T"."OBJECT_NAME" "T"."OBJECT_ID"))
    END_OUTLINE_DATA
  */

:
    call(in-use=9324, alloc=32736), compile(in-use=157848, alloc=256772), execution(in-use=264992, alloc=266064)

End of Optimizer State Dump
====================== END SQL Statement Dump ======================

*** 2010-10-19 14:32:30.703
KGX cleanup...
KGX Atomic Operation Log 24E02DCC
 Mutex 28DB24D8(164, 0) idn 425c9e31 oper EXAM
 Cursor Parent uid 164 efd 5 whr 26 slp 0
 oper=OPERATION_DEFAULT pt1=00000000 pt2=00000000 pt3=00000000
 pt4=00000000 u41=0 stt=0

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-676463/,如需轉載,請註明出處,否則將追究法律責任。

相關文章