Apress.Cost.Based.Oracle.Fundamentals. 看中文翻译版看的很吃力. 当初不知10053事件,看完该书花费了很长的时间!

10053事件

1 创建测试表 create table zengmuansha_temp01 as select * from dba_objects ;

2 在PL/SQL工具的COMMAND窗口 或者SQLPLUS

3 获得会话id:SELECTSYS_CONTEXT ('USERENV', 'SID') sid FROM DUAL;

4 设置跟踪文件标识: altersession set tracefile_identifier='kk_flag';

5 alter session set events '10053 trace name context forever, level 1';

6 declare

typetype_owner istableofzengfankun_temp01.owner%typeindexbybinary_integer;

typetype_object_name istableofzengfankun_temp01.object_name%typeindexbybinary_integer;

typetype_object_id istableofzengfankun_temp01.object_id%typeindexbybinary_integer;

typetype_object_type istableofzengfankun_temp01.object_type%typeindexbybinary_integer;

typetype_last_ddl_time istableofzengfankun_temp01.last_ddl_time%typeindexbybinary_integer;

l_ary_owner type_owner;

l_ary_object_name type_object_name;

l_ary_object_id type_object_id;

l_ary_object_type type_object_type;

l_ary_last_ddl_time type_last_ddl_time;

cursorcur_object is

selectowner,object_name,object_id,object_type,last_ddl_time

from zengfankun_temp01

order by owner,object_name,object_id,object_type,last_ddl_time;

begin

open cur_object;

loop

fetchcur_object bulkcollectinto

l_ary_owner,

l_ary_object_name,

l_ary_object_id,

l_ary_object_type,

l_ary_last_ddl_time

limit100;

exitwhen cur_object%notfoundor cur_object%notfoundisnull;

endloop;

end;

/

7 altersession set events '10053 trace name context off';

8 获得跟踪文件名称和路径

SelectRtrim(c.Value, '/') || Decode(e.Plat_Id, 1, '\', '/') ||

d.Instance_Name || '_ora_' || Ltrim(To_Char(a.Spid))|| '.trc' Trace_File

From V$process a,

V$session b,

V$parameter c,

V$instance d,

(SelectCase

When t.Banner Like'%Windows%'Then

1

When t.Banner Like'%Linux%'Then

2

When t.Banner Like'%AIX%'Then

3

When t.Banner Like'%Solaris%'Then

4

End Plat_Id

From V$version t

Where t.BANNER Like'%TNS%') e

Where a.Addr = b.Paddr

And b.Sid = &P_SID

And c.Name = 'user_dump_dest';

9 跟踪文件内容

/home/oracle/app/oracle/admin/oss2/udump/oss2_ora_13859_kk_flag.trc

OracleDatabase 10g EnterpriseEdition Release 10.2.0.3.0 - 64bit Production

Withthe Partitioning, OLAP and Data Mining options

ORACLE_HOME= /home/oracle/app/oracle/product/10.2.0/db_1

Systemname:    Linux

Nodename:      db101

Release:        2.6.18-164.el5

Version:        #1 SMP Tue Aug 18 15:51:48 EDT 2009

Machine:        x86_64

Instancename: oss2

Redothread mounted by this instance: 1

Oracleprocess number: 58

Unixprocess pid: 13859, image: oracleoss2@db101

***2012-08-14 09:29:04.559

***ACTION NAME:(Command Window - New) 2012-08-14 09:29:04.559

*** MODULENAME:(PL/SQL Developer) 2012-08-14 09:29:04.559

***SERVICE NAME:(oss2) 2012-08-14 09:29:04.559

***SESSION ID:(1598.1946) 2012-08-14 09:29:04.559

Registeredqb: MISC$1 0x287158f8(PARSER)

signature(): NULL

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

PredicateMove-Around (PM)

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

PM:Considering predicate move-around in MISC$1 (#0).

PM:   Checking validity of predicate move-aroundin MISC$1 (#0).

CBQT:Validity checks failed for 5q23guhp5t335.

CVM:Considering view merge in query block MISC$1 (#0)

CBQT:Validity checks failed for 5q23guhp5t335.

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

SubqueryUnnest

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

SU:Considering subquery unnesting in query block MISC$1 (#0)

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

Set-JoinConversion (SJC)

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

SJC:Considering set-join conversion in MISC$1 (#0).

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

PredicateMove-Around (PM)

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

PM:Considering predicate move-around in MISC$1 (#0).

PM:   Checking validity of predicate move-aroundin MISC$1 (#0).

PM:     PM bypassed: Outer query contains noviews.

Registeredqb: SEL$1 0x28712428 (PARSER)

signature (): qb_name=SEL$1 nbfros=1 flg=0

fro(0): flg=4 objn=440475hint_alias="ZENGFANKUN_TEMP01"@"SEL$1"

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

PredicateMove-Around (PM)

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

PM:Considering predicate move-around in SEL$1 (#0).

PM:   Checking validity of predicate move-aroundin SEL$1 (#0).

CBQT:Validity checks failed for 7nvfsndyywp50.

CVM:Considering view merge in query block SEL$1 (#0)

CBQT:Validity checks failed for 7nvfsndyywp50.

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

SubqueryUnnest

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

SU:Considering subquery unnesting in query block SEL$1 (#0)

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

Set-JoinConversion (SJC)

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

SJC:Considering set-join conversion in SEL$1 (#0).

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

PredicateMove-Around (PM)

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

PM:Considering predicate move-around in SEL$1 (#0).

PM:   Checking validity of predicate move-aroundin SEL$1 (#0).

PM:     PM bypassed: Outer query contains no views.

FPD:Considering simple filter push in SEL$1 (#0)

FPD:   Current where clause predicates in SEL$1(#0) :

apadrv-start: call(in-use=600,alloc=16344), compile(in-use=40192, alloc=41240)

kkoqbc-start

: call(in-use=600, alloc=16344), compile(in-use=41040,alloc=41240)

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

CurrentSQL statement for this session:

SELECTOWNER,OBJECT_NAME,OBJECT_ID,OBJECT_TYPE,LAST_DDL_TIME FROM ZENGFANKUN_TEMP01ORDER BY OWNER,OBJECT_NAME,OBJECT_TYPE,LAST_DDL_TIME

-----PL/SQL Call Stack -----

object     line  object

handle   number  name

0x74772a68        15 anonymous block

0x74772a68        19 anonymous block

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

Legend

Thefollowing abbreviations are used by optimizer trace.

CBQT- cost-based query transformation

JPPD- join predicate push-down

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

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)

CPUCSPEED- 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)

512: left is random (round-robin)

8: broadcast right and partition left

16: broadcast left and partition right

32: partition left using partitioning ofright

64: partition right using partitioning ofleft

128: use hash partitioning dimension

256: use range partitioning dimension

2048: use list partitioning dimension

1024: run the join in serial

0: invalid distribution method

sel- selectivity

ptn- partition

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

Peekedvalues of the binds in SQL statement

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

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

PARAMETERSUSED BY THE OPTIMIZER

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

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

PARAMETERS WITH ALTERED VALUES

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

_pga_max_size                       = 2097140 KB

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

Bug Fix Control Environment

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

fix 4611850 = enabled

fix 4908162 = enabled

fix 5015557 = enabled

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

PARAMETERS WITH DEFAULT VALUES

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

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           = 10.2.0.3

_optimizer_search_limit             = 5

cpu_count                           = 8

active_instance_count               = 1

parallel_threads_per_cpu            = 2

hash_area_size                      = 131072

bitmap_merge_area_size              = 1048576

sort_area_size                      = 65536

sort_area_retained_size             = 0

_sort_elimination_cost_ratio        = 0

_optimizer_block_size               = 8192

_sort_multiblock_read_count         = 2

_hash_multiblock_io_count           = 0

_db_file_optimizer_read_count       = 16

_optimizer_max_permutations         = 2000

pga_aggregate_target                = 10485760 KB

_query_rewrite_maxdisjunct          = 257

_smm_auto_min_io_size               = 56 KB

_smm_auto_max_io_size               = 248 KB

_smm_min_size                       = 1024 KB

_smm_max_size                       = 1048570 KB

_smm_px_max_size                    = 5242880 KB

_cpu_to_io                          = 0

_optimizer_undo_cost_change         = 10.2.0.3

parallel_query_mode                 = enabled

parallel_dml_mode                   = disabled

parallel_ddl_mode                   = enabled

optimizer_mode                      = all_rows

sqlstat_enabled                     = false

_optimizer_percent_parallel         = 101

_always_anti_join                   = choose

_always_semi_join                   = choose

_optimizer_mode_force               = true

_partition_view_enabled             = true

_always_star_transformation         = false

_query_rewrite_or_error             = false

_hash_join_enabled                  = true

cursor_sharing                      = exact

_b_tree_bitmap_plans                = true

star_transformation_enabled         = false

_optimizer_cost_model               = choose

_new_sort_cost_estimate             = true

_complex_view_merging               = true

_unnest_subquery                    = true

_eliminate_common_subexpr           = true

_pred_move_around                   = true

_convert_set_to_join                = false

_push_join_predicate                = true

_push_join_union_view               = true

_fast_full_scan_enabled             = true

_optim_enhance_nnull_detection      = true

_parallel_broadcast_enabled         = true

_px_broadcast_fudge_factor          = 100

_ordered_nested_loop                = true

_no_or_expansion                    = false

optimizer_index_cost_adj            = 100

optimizer_index_caching             = 0

_system_index_caching               = 0

_disable_datalayer_sampling         = false

query_rewrite_enabled               = true

query_rewrite_integrity             = enforced

_query_cost_rewrite                 = true

_query_rewrite_2                    = true

_query_rewrite_1                    = true

_query_rewrite_expression           = true

_query_rewrite_jgmigrate            = true

_query_rewrite_fpc                  = true

_query_rewrite_drj                  = 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

_smm_auto_cost_enabled              = true

_gs_anti_semi_join_allowed          = true

_optim_new_default_join_sel         = true

optimizer_dynamic_sampling          = 2

_pre_rewrite_push_pred              = true

_optimizer_new_join_card_computation = true

_union_rewrite_for_gs               = yes_gset_mvs

_generalized_pruning_enabled        = true

_optim_adjust_for_part_skews        = true

_force_datefold_trunc               = false

statistics_level                    = typical

_optimizer_system_stats_usage       = true

skip_unusable_indexes               = true

_remove_aggr_subquery               = true

_optimizer_push_down_distinct       = 0

_dml_monitoring_enabled             = true

_optimizer_undo_changes             = false

_predicate_elimination_enabled      = true

_nested_loop_fudge                  = 100

_project_view_columns               = true

_local_communication_costing_enabled = true

_local_communication_ratio          = 50

_query_rewrite_vop_cleanup          = true

_slave_mapping_enabled              = true

_optimizer_cost_based_transformation = linear

_optimizer_mjc_enabled              = true

_right_outer_hash_enable            = true

_spr_push_pred_refspr               = true

_optimizer_cache_stats              = false

_optimizer_cbqt_factor              = 50

_optimizer_squ_bottomup             = true

_fic_area_size                      = 131072

_optimizer_skip_scan_enabled        = true

_optimizer_cost_filter_pred         = false

_optimizer_sortmerge_join_enabled   = true

_optimizer_join_sel_sanity_check    = true

_mmv_query_rewrite_enabled          = true

_bt_mmv_query_rewrite_enabled       = true

_add_stale_mv_to_dependency_list    = true

_distinct_view_unnesting            = false

_optimizer_dim_subq_join_sel        = true

_optimizer_disable_strans_sanity_checks = 0

_optimizer_compute_index_stats      = true

_push_join_union_view2              = true

_optimizer_ignore_hints             = false

_optimizer_random_plan              = 0

_query_rewrite_setopgrw_enable      =true

_optimizer_correct_sq_selectivity   = true

_disable_function_based_index       = false

_optimizer_join_order_control       = 3

_optimizer_cartesian_enabled        = true

_optimizer_starplan_enabled         = true

_extended_pruning_enabled           = true

_optimizer_push_pred_cost_based     = true

_sql_model_unfold_forloops          = run_time

_enable_dml_lock_escalation         = false

_bloom_filter_enabled               = true

_update_bji_ipdml_enabled           = 0

_optimizer_extended_cursor_sharing  = udo

_dm_max_shared_pool_pct             = 1

_optimizer_cost_hjsmj_multimatch    = true

_optimizer_transitivity_retain      = true

_px_pwg_enabled                     = true

optimizer_secure_view_merging       = true

_optimizer_join_elimination_enabled = true

flashback_table_rpi                 = non_fbt

_optimizer_cbqt_no_size_restriction = true

_optimizer_enhanced_filter_push     = true

_optimizer_filter_pred_pullup       = true

_rowsrc_trace_level                 = 0

_simple_view_merging                = true

_optimizer_rownum_pred_based_fkr    = true

_optimizer_better_inlist_costing    = all

_optimizer_self_induced_cache_cost  = false

_optimizer_min_cache_blocks         = 10

_optimizer_or_expansion             = depth

_optimizer_order_by_elimination_enabled =true

_optimizer_outer_to_anti_enabled    = true

_selfjoin_mv_duplicates             = true

_dimension_skip_null                = true

_force_rewrite_enable               = false

_optimizer_star_tran_in_with_clause = true

_optimizer_complex_pred_selectivity = true

_optimizer_connect_by_cost_based    = true

_gby_hash_aggregation_enabled       = true

_globalindex_pnum_filter_enabled    = true

_fix_control_key                    = 0

_optimizer_skip_scan_guess          = false

_enable_row_shipping                = false

_row_shipping_threshold             = 80

_row_shipping_explain               = false

_optimizer_rownum_bind_default      = 10

_first_k_rows_dynamic_proration     = true

_optimizer_native_full_outer_join   = off

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

Bug Fix Control Environment

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

fix 4611850 = enabled

fix 4663804 = enabled

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

PARAMETERS IN OPT_PARAM HINT

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

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

ColumnUsage Monitoring is ON: tracking level = 1

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

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

QUERYBLOCK TEXT

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

SELECTOWNER,OBJECT_NAME,OBJECT_ID,OBJECT_TYPE,LAST_DDL_TIME FROM ZENGFANKUN_TEMP01

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

QUERYBLOCK SIGNATURE

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

qbname was generated

signature(optimizer): qb_name=SEL$1 nbfros=1 flg=0

fro(0): flg=0 objn=440475 hint_alias="ZENGFANKUN_TEMP01"@"SEL$1"

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

SYSTEMSTATISTICS INFORMATION

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

Using WORKLOAD Stats

CPUSPEED: 1042 millions instructions/sec

SREADTIM: 21 milliseconds

MREADTIM: 45 millisecons

MBRC: 12.000000 blocks

MAXTHR: 54754304 bytes/sec

SLAVETHR: -1 bytes/sec

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

BASESTATISTICAL INFORMATION

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

TableStats::

Table: ZENGFANKUN_TEMP01  Alias: ZENGFANKUN_TEMP01

#Rows: 126826  #Blks: 2099  AvgRowLen:  114.00

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

SINGLETABLE ACCESS PATH

Table: ZENGFANKUN_TEMP01  Alias: ZENGFANKUN_TEMP01

Card: Original: 126826  Rounded: 126826  Computed: 126826.00  Non Adjusted: 126826.00

Access Path: TableScan

Cost: 381.36  Resp: 381.36  Degree: 0

Cost_io: 379.00  Cost_cpu: 51727443

Resp_io: 379.00  Resp_cpu: 51727443

Best:: AccessPath: TableScan

Cost: 381.36  Degree: 1 Resp: 381.36  Card: 126826.00  Bytes: 0

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

OPTIMIZERSTATISTICS AND COMPUTATIONS

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

GENERALPLANS

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

Consideringcardinality-based initial join order.

Permutationsfor Starting Table :0

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

Joinorder[1]: ZENGFANKUN_TEMP01[ZENGFANKUN_TEMP01]#0

ORDERBY sort

SORT resource      Sort statistics

Sort width:        6142 Area size:     1048576 Max Area size:  1073735680

Degree:               1

Blocks to Sort:    1056 Row size:           68 Total Rows:         126826

Initial runs:         2 Merge passes:        1 IO Cost / pass:        460

Total IO sort cost: 1516      Total CPU sort cost: 144803056

Total Temp space used: 17327000

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

Bestso far: Table#: 0  cost: 1903.9617  card: 126826.0000  bytes: 6594952

(newjo-stop-1)k:0, spcnt:0, perm:1, maxperm:80000

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

Numberof join permutations tried: 1

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

SORT resource      Sort statistics

Sort width:        6142 Area size:     1048576 Max Area size:  1073735680

Degree:               1

Blocks to Sort:    1056 Row size:           68 Total Rows:         126826

Initial runs:         2 Merge passes:        1 IO Cost / pass:        460

Total IO sort cost: 1516      Total CPU sort cost: 144803056

Total Temp space used: 17327000

Final- All Rows Plan:  Best join order: 1

Cost: 1903.9617  Degree: 1 Card: 126826.0000  Bytes: 6594952

Resc: 1903.9617  Resc_io: 1895.0000  Resc_cpu: 196530498

Resp: 1903.9617  Resp_io: 1895.0000  Resc_cpu: 196530498

kkoipt:Query block SEL$1 (#0)

*******UNPARSED QUERY IS *******

SELECT"ZENGFANKUN_TEMP01"."OWNER""OWNER","ZENGFANKUN_TEMP01"."OBJECT_NAME""OBJECT_NAME","ZENGFANKUN_TEMP01"."OBJECT_ID""OBJECT_ID","ZENGFANKUN_TEMP01"."OBJECT_TYPE""OBJECT_TYPE","ZENGFANKUN_TEMP01"."LAST_DDL_TIME""LAST_DDL_TIME"

FROM"OSS03"."ZENGFANKUN_TEMP01" "ZENGFANKUN_TEMP01"

ORDERBY"ZENGFANKUN_TEMP01"."OWNER","ZENGFANKUN_TEMP01"."OBJECT_NAME","ZENGFANKUN_TEMP01"."OBJECT_TYPE","ZENGFANKUN_TEMP01"."LAST_DDL_TIME"

kkoqbc-end

: call(in-use=26184, alloc=49080),compile(in-use=41544, alloc=45384)

apadrv-end:call(in-use=26184, alloc=49080), compile(in-use=42392, alloc=45384)

sql_id=7nvfsndyywp50.

CurrentSQL statement for this session:

SELECTOWNER,OBJECT_NAME,OBJECT_ID,OBJECT_TYPE,LAST_DDL_TIME FROM ZENGFANKUN_TEMP01ORDER BY OWNER,OBJECT_NAME,OBJECT_TYPE,LAST_DDL_TIME

-----PL/SQL Call Stack -----

object     line  object

handle   number  name

0x74772a68        15 anonymous block

0x74772a68        19 anonymous block

============

PlanTable

============

-----------------------------------------------+-----------------------------------+

|Id  | Operation           | Name             | Rows  | Bytes | Cost  | Time     |

-----------------------------------------------+-----------------------------------+

|0   | SELECT STATEMENT    |                  |       |      |  1904 |           |

|1   | SORT ORDER BY      |                  | 124K | 6440K |  1904 |  00:00:41 |

|2   |  TABLE ACCESS FULL | ZENGFANKUN_TEMP01| 124K | 6440K |   381 |  00:00:09 |

-----------------------------------------------+-----------------------------------+

PredicateInformation:

----------------------

Contentof other_xml column

===========================

db_version    : 10.2.0.3

parse_schema  : OSS03

plan_hash     : 3659189292

Outline Data:

/*+

BEGIN_OUTLINE_DATA

IGNORE_OPTIM_EMBEDDED_HINTS

OPTIMIZER_FEATURES_ENABLE('10.2.0.3')

ALL_ROWS

OUTLINE_LEAF(@"SEL$1")

FULL(@"SEL$1""ZENGFANKUN_TEMP01"@"SEL$1")

END_OUTLINE_DATA

*/

Optimizerenvironment:

optimizer_mode_hinted               = false

optimizer_features_hinted           = 0.0.0

 …………………………………………………………

_optimizer_native_full_outer_join   = off

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

Bug Fix Control Environment

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

fix 4611850 = enabled

fix 5015557 = enabled

QueryBlock Registry:

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

SEL$10x28712428 (PARSER) [FINAL]

Optimizer State Dump: call(in-use=28536,alloc=49080), compile(in-use=65344, alloc=115056)

10  如何设置10053 事件设置本session的10053

  开启:

  Alter session set events’10053 trace namecontext forever[,level {1/2}]’;

  关闭:

  Alter session set events’10053 trace namecontext off’;

  设置其他session 的10053

  开启:

  SYS.DBMS_SYSTEM.SET_EV (, , 10053, {1|2}, '''')

  关闭:

  SYS.DBMS_SYSTEM.SET_EV (, , 10053,0, '''')

跟其他跟踪事件不同,10053 提供了两个跟踪级别,但是级别2 的跟踪信息比级别1 少

11记载了所有影响成本计算的参数

***************************************  PARAMETERS USEDBYTHE OPTIMIZER********************************

12基本统计信息:

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

 表

  Trace label dba_tables column

  CDN NUM_ROWS 表记录数

  NBLKS BLOCKS 高水位以下的block 数

  TABLE_SCAN_CST 全表扫描的I/O 成本

  AVG_ROW_LEN AVG_ROW_LEN 平均行长

  索引

  Trace label dba_indexes column

  Index#, col# 索引号及表列号

  LVLS BLEVEL BTREE 索引高度

  #LB LEAF_BLOCKS 索引叶块数

  #DK DISTINCT_KEYS 不重复索引关键字

  LB/K AVG_LEAF_BLOCKS_PER_KEY 叶块/关键字

  DB/K AVG_DATA_BLOCKS_PER_KEY 数据块/关键字

  CLUF CLUSTERING_FACTOR 索引聚合因子 

 

 基本表访问成本:这里开始CBO 将会计算单表访问的成本

  单表访问路径 

SINGLETABLEACCESS

  PATH..................................................................1

  Column: ENAME Col#:2Table: EMP Alias:

  EMP.....................................................................2

  NDV:42NULLS:0DENS:2.3810e-002...........................................3

  TABLE: EMP ORIG CDN:7213CMPTD CDN:

  172.......................................................................4

  Access path: tsc Resc:6Resp:

  6........................................................................5

  Access path:index

  (equal).................................................................6

  INDEX#:23575TABLE:

  EMP .....................................................................7

  CST:39IXSEL:0.0000e+000TBSEL:

  2.3810e-002..............................................................8

  BEST_CST:6.00PATH:2Degree:

  1.......................................................................9

  我们看一下上面是什么意思。首先CBO 列出了ename 列的统计信息(第2,3 行),这些

  统计信息来自dba_tab_columns。

  列的统计信息和dba_tab_columns 中对应的列名如下 

Trace label dba_tablescolumn

  NDV NUM_DISTINCT 列的不重复值数

  NULLS NUM_NULLS 列的空行数

  DENS DENSITY 列密度,没有直方图的情况下=1/NDV

  LO LOW_VALUE 列的最小值 (只对数字列)

  HI HIGH_VALUE 列的最大值(只对数字列)

  第4 行出现了表的行数ORIG CDN 和计算过的行数 CMPTD CDN (computed

  cardinality). 计算公式如下,

  CMPTD CDN = ORIG CDN * FF

  在这里 FF 表示过滤因子(FilterFactor)。我们稍后再来看FF 是什么及如何计算的。

  第5 行表示了全表扫描的成本。 这里的成本是62, 是由NBLKS 和

  db_file_multi_block_read_count 初始化参数计算出来的。.

  第6-8 行是索引访问的成本。

  第9 行是总结了以上信息并选出了最优的访问路径为全表扫描,成本为6。

  表扫描成本

  让我们来看一下全表扫描成本(tsc)是如何计算的 这里有其他两个大表的基本统计信息。

  TOTAL :: CDN: 115630 NBLKS: 4339TABLE_SCAN_CST: 265 AVG_ROW_LEN: 272

  TOTAL :: CDN: 454503 NBLKS: 8975 TABLE_SCAN_CST:548 AVG_ROW_LEN: 151

  你可能曾经看到过全表扫描成本=访问的块数目/db_file_multi_block_read_count.

看起来这个等式很有意义因为oracle在做全表扫描时每个I/O请求将会读取db_file_multi_block_read_count个块。

但是,我们计算以上统计信息得到

NBLKS / TABLE_SCAN_CST = 4339 / 265 = 16.373 ≠db_file_multi_block_read_count

(这里的值是32,可以看前面参数)

  另外一个表为NBLKS / TABLE_SCAN_CST = 8975 / 548 =16.377

  全表扫描成本和db_file_multi_block_read_count

  CBO 将会根据NBLKS 和db_file_multiblock_read_count 来估计全表扫描成本,但是

  db_file_multiblock_read_count 通常会被打上折扣。实际上我们可以认为等式会是

  TABLE_SCAN_CST = NBLKS / k

  我们来看一下k 和db_file_multiblock_read_count究竟有什么规律可寻。

我们来做一个实验,使用不同的db_file_multiblock_read_count 值4, 6,8,12,16, 24,32 来测试。

  过滤因子(FF)

  为了理解索引访问成本我们需要了解一下过滤因子。 过滤因子是一个介于0 和1 之

  间的数字,反映了记录的可选择性。如果一个列有10 种不同的值,我们需要查询等

  于其中某一个值的记录时,如果这10 种值平均分 布的话,你将得到1/10 的行数。

  如果没有直方图,过滤因子为FF = 1/NDV = density

  再来看一下过滤因子和查询条件的关系

  不使用绑定变量的情况: 

predicate Filter factor

  c1=value1/c1.num_distinct4

  c1likevalue1/c1.num_distinct

  c1>value (Hi-value)/(Hi-Lo)

  c1>=value (Hi-value)/(Hi-Lo)+

  c1<value (value-Lo)/(Hi-Lo)

  c1<=value (value-Lo)/(Hi-Lo)+

  c1betweenval1andval2 (val2 – val1)/(Hi-Lo)+

  使用绑定变量的情况(8i): 

predicate Filter factor

  col1=:b1 col1.density

  col1 {like|>|>=|<|<=} :b1{5.0000e-02|col1.col1 between:b1and:b25.0000e-02*5.0000e-

  包含and 和or 的情况: 

predicate Filter factor

  predicate1andpredicate2FF1*FF2

  predicate1orpredicate2FF1+FF2 – FF1*FF2

  索引访问成本

  现在我们知道了聚合因子的概念,我们再来看一看索引访问的成本

 SINGLETABLEACCESS

  PATH.............................................................1

  Column: ENAME Col#:2Table: EMP Alias:

  EMP...............................................................2

  NDV:42NULLS:0DENS:2.3810e-002.....................................3

  TABLE: EMP ORIG CDN:7213CMPTD CDN:

  172...............................................................4

  Access path: tsc Resc:6Resp:

  6.................................................................5

  Access path:index

  (equal)..........................................................6

  INDEX#:23575TABLE:

  EMP ..............................................................7

  CST:39IXSEL:0.0000e+000TBSEL:

  2.3810e-002.......................................................8

  BEST_CST:6.00PATH:2Degree:

  1.................................................................9

  我们来看6-8 行,这里表示了索引访问的成本。第6 行表示这里采取索引equal 的方

  法来访问,再来回忆一下索引的基本统计信息

  INDEX#: 23575 COL#: 2

  TOTAL :: LVLS: 1 #LB: 48 #DK: 42 LB/K: 1 DB/K: 36 CLUF: 1534

  根据索引成本计算公式

  blevel + FF*leaf_blocks +FF*clustering_factor

  1 + 2.3810e-002-2*48 + 2.3810e-002-2*1534 =1 + 1.1429 + 36.5245 = 38.6674

  这里的FF 就等于TBSEL=DENS=2.3810e-002,由于我们的查询条件为ename = :b1 所

  以得出FF 为ENAME 列的DENS, 其实索引访问方式的成本计算公式

  . Unique scan blevel+1

  . Fast full scan leaf_blocks / k ( k =1.6765x0.6581 )

  . Index-only blevel + FF*leaf_blocks

  让我们用别的例子证明一下索引成本计算,语句为

  select…fromtbl a

  wherea.col#1=:b1

  anda.col#12=:b2

  anda.col#8=:b3

  索引和列的基本统计数据如下

INDEX# COL#LVLS #LB #DK LB/K DB/K CLUF

  841727,1113100665001221469200

  84181,12,7219000747001151176500

  84193,1,4,22310004970012118000

  157551,12,8112600188001301890275

  84161,2,33,4,5,622580018903001183900

  Col#:1NDV:10NULLS:0DENS:1.0000e-001-1

  Col#:12NDV:8NULLS:0DENS:1.2500e-001

  Col#:8NDV:33NULLS:0DENS:3.0303e-001

  Access path:index

  (scan)....................................1

  INDEX#:8418CST:14947IXSEL:1.2500e-002TBSEL:

  1.2500e-002...............................2

  Access path:index

  (equal) ...................................

Oracle 1053事件 主要看是成本如何计算的?相关推荐

  1. oracle成本类型,Oracle 1053事件 主要看是成本怎么计算的

    Oracle 1053事件 主要看是成本如何计算的? Apress.Cost.Based.Oracle.Fundamentals. 看中文翻译版看的很吃力. 当初不知10053事件,看完该书花费了很长 ...

  2. ORACLE 等待事件的分类

    等待事件是总个性能调优的入口. 在总体查看ORACLE数据库性能时,总是会先看TOP  N WAIT,比如: 下面我切了一段我的AWR报表内容: Top Timed Events      '*' C ...

  3. ORACLE等待事件相关

    一.等待事件发展 oracle等待事件引入,可以更加细粒度直观地观察Oracle行为,提供oracle优化入口,大致分为三个阶段: 以命中为主要参考指标:以各种命中率为主要的优化入口依据,常见的有&q ...

  4. oracle enq ta,【案例】Oracle等待事件event enq: KO - fast object checkpoint解决办法

    [案例]Oracle等待事件event enq: KO - fast object checkpoint解决办法 时间:2016-11-03 10:11   来源:Oracle研究中心   作者:HT ...

  5. Oracle 下马观花看redo

    ----------------------------------------- --Lerning Content :Oracle 下马观花看redo --Author :如人饮水冷暖自知 --版 ...

  6. 浅析Oracle等待事件

    oracle 等待事件 一.简述 Oracle等待事件是在Oracle 7.0.12中引入的,当时等待事件大致有100多个:在Oracle 8.0中Oracle等待事件数目增加到150多个,在Orac ...

  7. oracle library cache lock,【案例】Oracle等待事件library cache lock产生原因和解决办法...

    [案例]Oracle等待事件library cache lock产生原因和解决办法 时间:2016-12-07 18:56   来源:Oracle研究中心   作者:网络   点击: 次 天萃荷净 O ...

  8. CPU值满resmgr:cpu quantum造成的Oracle等待事件解决办法

    cpu quantum造成的Oracle等待事件解决办法 不少接触数据库的朋友有一个困扰已久的问题--resmgr:cpu quantum.已经遇过不少次这种CPU突然全绿的情况,通过隐含参数屏蔽了一 ...

  9. Oracle Study之--Oracle等待事件(3)

    Oracle Study之--Oracle等待事件(3) Db file parallel read 这是一个很容易引起误导的等待事件,实际上这个等待事件和并行操作(比如并行查询,并行DML)没有关系 ...

最新文章

  1. shell脚本批量追踪ip路由走向
  2. python random函数sample_Python random.seed() random.sample()函数使用
  3. 分布式监控系统开发【day38】:监控trigger表结构设计(一)
  4. 软件测试岗位,BAT大厂面试题集锦
  5. HDUOJ3549 - Flow Problem(网络流+最大流最小割+模板)
  6. 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 E. Half-consecutive Numbers
  7. 求1到100的奇数之和c语言,C语言实现1到100的和奇数与偶数和
  8. 服装管理解决方案丨汇信
  9. java:xml数据转json
  10. 腾讯因“在岗时间不满8小时”辞退41岁员工,遭追讨1200多万
  11. Python安装word2vec环境依赖
  12. 求一元二次方程的解法c语言,有什么方法求一元二次方程求解決一元二次方程的解法要详细...
  13. 【CVPR2022论文阅读】Learning Affinity from Attention(待更新)
  14. cuda 原子锁多线程操作通用原子操作
  15. 通过表的.frm和.idb文件备份MySQL表
  16. postgresql中recovery.conf分析
  17. 在fpga中用Cordic算法来产生正弦函数
  18. VSCode 居然是个娱乐软件?让你 high 到爆的几款插件
  19. 谷歌学术403:某URL没有权限访问
  20. CentOS7 配置BBR加速

热门文章

  1. 【Y忍冬草】Qt之客户端实现数据的接收和发送
  2. ahb总线协议主机_AHB总线协议
  3. 搭建webassembly网页播放器(二)---emcc环境搭建
  4. 各大宗教如何看待奇点来临?
  5. 复变函数--------第二章
  6. uint8类型对应java_uint8_t和int8_t的JNA映射 - java
  7. Application Performance Management(APM)
  8. 中国健康服务产业发展分析及投资前景可行性评估报告2022-2028年版
  9. 2007-2020年上市公司商誉减值损失数据
  10. 2023年IDC互联网数据中心研究报告