Re: db file scattered read

  • From: Mladen Gogala <gogala@xxxxxxxxxxxxx>
  • To: oracle-l@xxxxxxxxxxxxx
  • Date: Sun, 15 Aug 2004 12:17:42 -0400

On 08/07/2004 11:27:17 AM, Wolfgang Breitling wrote:
 Nowhere in this list is there any indication that all tables will be 
> sampled. Only unanalyzed tables and "tables for which standard selectivity 
> estimation used a guess for some predicate" (whatever that means) and at 
> level 4 for tables with more than one predicate in an attempt to detect 
> attribute dependence. In the latter case the CBO will only sample the 
> combined selectivity of those predicates and in my experience is rarely 
> satisfied with the sampling results from 32 blocks. I usually have to go 
> much higher to the point where it practically scans the entire table. 
> Admittedly I haven't tested it on multi-million row tables, only on tables 
> where the 1024 or 4096 sampled blocks at level 8 or 9 are more than 50% of 
> the total blocks and thus a full scan is done instead of a sample even 
> before level 10.

Wolfgang, here is a little bit more detailed study of 
OPTIMIZER_DYNAMIC_SAMPLING.
First, I dropped statistics on the scott user and executed simple query. Just as
you have shown before, the database resorted to RBO and the trace was not 
generated.
When I forced CBO with the optimizer mode, dynamic sampling kicked in. The 
generated trace 
file is a bit longer, but please, bear with me.

/oracle/product/10g/admin/oracle/udump/10g_ora_16916.trc
Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /oracle/product/10g
System name:    Linux
Node name:      medo.noip.com
Release:        2.4.27
Version:        #1 Sun Aug 8 01:31:49 EDT 2004
Machine:        i686
Instance name: 10g
Redo thread mounted by this instance: 1
Oracle process number: 15
Unix process pid: 16916, image: oracle10g@xxxxxxxxxxxxx

*** 2004-08-15 12:01:01.054
*** ACTION NAME:() 2004-08-15 12:01:01.054
*** MODULE NAME:(SQL*Plus) 2004-08-15 12:01:01.054
*** SERVICE NAME:(oracle.noip.com) 2004-08-15 12:01:01.054
*** SESSION ID:(91.43) 2004-08-15 12:01:01.054
QUERY
select ename,job,dname,loc
from emp e, dept d
where e.deptno=d.deptno
order by e.empno
QUERY
BEGIN DBMS_OUTPUT.GET_LINES(:LINES, :NUMLINES); END;
*** 2004-08-15 12:08:06.773
QUERY
alter session set optimizer_mode=first_rows
QUERY
BEGIN DBMS_OUTPUT.GET_LINES(:LINES, :NUMLINES); END;
*******************************************
Peeked values of the binds in SQL statement
*******************************************
***************************************
PARAMETERS USED BY THE OPTIMIZER
********************************
  *************************************
  PARAMETERS WITH ALTERED VALUES
  ******************************
  hash_area_size                      = 1048576
  sort_area_size                      = 1048576
  db_file_multiblock_read_count       = 64
  optimizer_mode                      = first_rows
  star_transformation_enabled         = true
  optimizer_index_cost_adj            = 30
  optimizer_index_caching             = 70
  optimizer_dynamic_sampling          = 4
  *************************************
  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.1.0.3
  _optimizer_search_limit             = 5
  cpu_count                           = 1
  active_instance_count               = 1
  parallel_threads_per_cpu            = 2
  bitmap_merge_area_size              = 1048576
  sort_area_retained_size             = 0
  _sort_elimination_cost_ratio        = 0
  _optimizer_block_size               = 8192
  _sort_multiblock_read_count         = 2
  _hash_multiblock_io_count           = 0
  _optimizer_max_permutations         = 2000
  pga_aggregate_target                = 394743 KB
  _pga_max_size                       = 204800 KB
  _sort_space_for_write_buffers       = 1
  _query_rewrite_maxdisjunct          = 257
  _smm_auto_min_io_size               = 56 KB
  _smm_auto_max_io_size               = 248 KB
  _smm_min_size                       = 394 KB
  _smm_max_size                       = 19737 KB
  _smm_px_max_size                    = 118422 KB
  _cpu_to_io                          = 0
  _optimizer_undo_cost_change         = 10.1.0.3
  parallel_query_mode                 = enabled
  parallel_dml_mode                   = disabled
  parallel_ddl_mode                   = enabled
  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
  _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
  _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
  _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          = false
  _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_push_pred_cost_based     = true
***************************************
Column Usage Monitoring is ON: tracking level = 1
***************************************
QUERY BLOCK SIGNATURE
*********************
qb name was generated
signature (optimizer): qb_name=SEL$1 nbfros=2 flg=0
  fro(0): flg=0 objn=45599 hint_alias="D"@"SEL$1"
  fro(1): flg=0 objn=45601 hint_alias="E"@"SEL$1"
***************************************
BASE STATISTICAL INFORMATION
***********************
Table stats    Table: DEPT   Alias:  D
  TOTAL ::  (NOT ANALYZED)    CDN: 409  NBLKS:  5  AVG_ROW_LEN:  100
  COLUMN:     DEPTNO(NUMBER)  Col#: 1      Table: DEPT   Alias: D
    NO STATISTICS  (using defaults)
    Size: 22  NDV: 13  Nulls: 0  Density: 7.8240e-02
    No Histogram: #BKT: 0
        (0 uncompressed buckets and 0 endpoint values)
Index stats
  Index: PK_DEPT  COL#: 1 
    TOTAL ::  LVLS: 1   #LB: 25  #DK: 100  LB/K: 1  DB/K: 1  CLUF: 800
***********************
Table stats    Table: EMP   Alias:  E
  TOTAL ::  (NOT ANALYZED)    CDN: 409  NBLKS:  5  AVG_ROW_LEN:  100
  COLUMN:     DEPTNO(NUMBER)  Col#: 8      Table: EMP   Alias: E
    NO STATISTICS  (using defaults)
    Size: 22  NDV: 13  Nulls: 0  Density: 7.8240e-02
    No Histogram: #BKT: 0
        (0 uncompressed buckets and 0 endpoint values)
Index stats
  Index: PK_EMP  COL#: 1 
    TOTAL ::  LVLS: 1   #LB: 25  #DK: 100  LB/K: 1  DB/K: 1  CLUF: 800
_OPTIMIZER_PERCENT_PARALLEL = 0
***************************************
SINGLE TABLE ACCESS PATH
*** 2004-08-15 12:08:14.530
** Performing dynamic sampling initial checks. **
** Dynamic sampling initial checks returning TRUE (level = 4).
** Dynamic sampling updated table stats.: blocks=5
*** 2004-08-15 12:08:14.531
** Generated dynamic sampling query:
    query text : 
SELECT /* OPT_DYN_SAMP */ /*+ ALL_ROWS IGNORE_WHERE_CLAUSE 
NO_PARALLEL(SAMPLESUB) NO_PARALLEL_INDEX(SAMPLESUB) */ NVL(SUM(C1),0), 
NVL(SUM(C2),0), COUNT(DISTINCT C3), NVL(SUM(CASE WHEN C3 IS NULL THEN 1 ELSE 0 
END),0) FROM (SELECT /*+ NO_PARALLEL("E") FULL("E") NO_PARALLEL_INDEX("E") */ 1 
AS C1, 1 AS C2, "E"."DEPTNO" AS C3 FROM "EMP" "E") SAMPLESUB
*** 2004-08-15 12:08:14.568
** Executed dynamic sampling query:
    level : 4
    sample pct. : 100.000000
    actual sample size : 14
    filtered sample card. : 14
    orig. card. : 409
    block cnt. table stat. : 5
    block cnt. for sampling: 5
    max. sample block cnt. : 64
    sample block cnt. : 5
    ndv C3 : 3
        scaled : 3.00
    nulls C4 : 0
        scaled : 0.00
    min. sel. est. : -1.00000000
** Dynamic sampling col. stats.:
  COLUMN:     DEPTNO(NUMBER)  Col#: 8      Part#: 0     Table: EMP   Alias: E
    Size: 22  NDV: 3  Nulls: 0  Density: 3.3333e-01
    No Histogram: #BKT: 1
        (1 uncompressed buckets and 0 endpoint values)
** Using dynamic sampling NULLs estimates.
** Using dynamic sampling NDV estimates.
   Scaled NDVs using cardinality = 14.
** Using dynamic sampling card. : 14
** Dynamic sampling updated table card.
  TABLE: EMP  Alias: E     
    Original Card: 14   Rounded: 14  Computed: 14.00  Non Adjusted: 14.00
  Access Path: table-scan  Resc:  3  Resp:  3
  BEST_CST: 3.01  PATH: 2  Degree:  1
***************************************
SINGLE TABLE ACCESS PATH
*** 2004-08-15 12:08:14.569
** Performing dynamic sampling initial checks. **
** Dynamic sampling initial checks returning TRUE (level = 4).
** Dynamic sampling updated index stats.: PK_DEPT, blocks=1
** Dynamic sampling updated table stats.: blocks=5
*** 2004-08-15 12:08:14.573
** Generated dynamic sampling query:
    query text : 
SELECT /* OPT_DYN_SAMP */ /*+ ALL_ROWS IGNORE_WHERE_CLAUSE 
NO_PARALLEL(SAMPLESUB) NO_PARALLEL_INDEX(SAMPLESUB) */ NVL(SUM(C1),0), 
NVL(SUM(C2),0), COUNT(DISTINCT C3), NVL(SUM(CASE WHEN C3 IS NULL THEN 1 ELSE 0 
END),0) FROM (SELECT /*+ NO_PARALLEL("D") FULL("D") NO_PARALLEL_INDEX("D") */ 1 
AS C1, 1 AS C2, "D"."DEPTNO" AS C3 FROM "DEPT" "D") SAMPLESUB
*** 2004-08-15 12:08:14.577
** Executed dynamic sampling query:
    level : 4
    sample pct. : 100.000000
    actual sample size : 4
    filtered sample card. : 4
    orig. card. : 409
    block cnt. table stat. : 5
    block cnt. for sampling: 5
    max. sample block cnt. : 64
    sample block cnt. : 5
    ndv C3 : 4
        scaled : 4.00
    nulls C4 : 0
        scaled : 0.00
    min. sel. est. : -1.00000000
** Dynamic sampling col. stats.:
  COLUMN:     DEPTNO(NUMBER)  Col#: 1      Part#: 0     Table: DEPT   Alias: D
    Size: 22  NDV: 4  Nulls: 0  Density: 2.5000e-01
    No Histogram: #BKT: 1
        (1 uncompressed buckets and 0 endpoint values)
** Using dynamic sampling NULLs estimates.
** Using dynamic sampling NDV estimates.
   Scaled NDVs using cardinality = 4.
** Using dynamic sampling card. : 4
** Dynamic sampling updated table card.
  TABLE: DEPT  Alias: D     
    Original Card: 4   Rounded: 4  Computed: 4.00  Non Adjusted: 4.00
  Access Path: table-scan  Resc:  3  Resp:  3
  BEST_CST: 3.01  PATH: 2  Degree:  1
***************************************
OPTIMIZER STATISTICS AND COMPUTATIONS
***************************************
GENERAL PLANS
***********************
Join order[1]:  DEPT[D]#0  EMP[E]#1
Now joining: EMP[E]#1 *******
NL Join
  Outer table: cost: 3  cdn: 4  rcz: 30  resp:  3
  Inner table: EMP  Alias: E
    Access Path: table-scan  Resc: 2
    Join:  Resc:  9  Resp:  9
  Best NL cost: 9  resp: 9
Join Card:  14.00 = outer (4.00) * inner (14.00) * sel (2.5000e-01)
SM Join
  Outer table: 
    resc: 3  cdn: 4  rcz: 30  deg: 1  resp: 3
  Inner table: EMP  Alias: E
    resc: 3  cdn: 14  rcz: 39  deg:  1  resp: 3
    using join:1 distribution:2 #groups:1
    SORT resource      Sort statistics
      Sort width:         113 Area size:      403456 Max Area size:    20210688
      Degree:               1
      Blocks to Sort:       1 Row size:           43 Total Rows:              4
      Initial runs:         1 Merge passes:        0 IO Cost / pass:          0
      Total IO sort cost: 0      Total CPU sort cost: 3587400
      Total Temp space used: 0
    SORT resource      Sort statistics
      Sort width:         113 Area size:      403456 Max Area size:    20210688
      Degree:               1
      Blocks to Sort:       1 Row size:           53 Total Rows:             14
      Initial runs:         1 Merge passes:        0 IO Cost / pass:          0
      Total IO sort cost: 0      Total CPU sort cost: 3589442
      Total Temp space used: 0
  Merge join  Cost:  8  Resp:  8
SM Join (with index on outer)
  Access Path: index (no start/stop keys)
    Index: PK_DEPT
    rsc_cpu: 6536395   rsc_io: 802
    ix_sel:  1.0000e+00    ix_sel_with_filters:  1.0000e+00
  Outer table: 
    resc: 241  cdn: 4  rcz: 30  deg: 1  resp: 241
  Inner table: EMP  Alias: E
    resc: 3  cdn: 14  rcz: 39  deg:  1  resp: 3
    using join:1 distribution:2 #groups:1
    SORT resource      Sort statistics
      Sort width:         113 Area size:      403456 Max Area size:    20210688
      Degree:               1
      Blocks to Sort:       1 Row size:           53 Total Rows:             14
      Initial runs:         1 Merge passes:        0 IO Cost / pass:          0
      Total IO sort cost: 0      Total CPU sort cost: 3589442
      Total Temp space used: 0
  Merge join  Cost:  245  Resp:  245
HA Join
  Outer table: 
    resc: 3  cdn: 4  rcz: 30  deg: 1  resp: 3
  Inner table: EMP  Alias: E
    resc: 3  cdn: 14  rcz: 39  deg:  1  resp: 3
    using join:8 distribution:2 #groups:1
  Hash join one ptn Resc: 1   Deg: 1
    hash_area: 124 (max=4935)  buildfrag: 1  probefrag: 1 ppasses: 1
  Hash join   Resc: 7   Resp: 7
ORDER BY sort
    SORT resource      Sort statistics
      Sort width:         113 Area size:      403456 Max Area size:    20210688
      Degree:               1
      Blocks to Sort:       1 Row size:           86 Total Rows:             14
      Initial runs:         1 Merge passes:        0 IO Cost / pass:          0
      Total IO sort cost: 0      Total CPU sort cost: 3589442
      Total Temp space used: 0
Join result: cost: 8  cdn: 14  rcz: 69
Best so far: TABLE#: 0  CST:          3  CDN:          4  BYTES:        120
Best so far: TABLE#: 1  CST:          8  CDN:         14  BYTES:        966
***********************
Join order[2]:  EMP[E]#1  DEPT[D]#0
Now joining: DEPT[D]#0 *******
NL Join
  Outer table: cost: 3  cdn: 14  rcz: 39  resp:  3
  Inner table: DEPT  Alias: D
    Access Path: table-scan  Resc: 1
    Join:  Resc:  20  Resp:  20
OPTIMIZER PERCENT INDEX CACHING = 70
  Access Path: index (unique)
    Index: PK_DEPT
    rsc_cpu: 15483   rsc_io: 1
    ix_sel:  2.5000e-01    ix_sel_with_filters:  2.5000e-01
    NL Join:  resc: 7  resp: 7
OPTIMIZER PERCENT INDEX CACHING = 70
  Access Path: index (eq-unique)
    Index: PK_DEPT
    rsc_cpu: 15683   rsc_io: 1
    ix_sel:  0.0000e+00    ix_sel_with_filters:  0.0000e+00
    NL Join:  resc: 7  resp: 7
  Best NL cost: 7  resp: 7
Join Card:  14.00 = outer (14.00) * inner (4.00) * sel (2.5000e-01)
ORDER BY sort
    SORT resource      Sort statistics
      Sort width:         113 Area size:      403456 Max Area size:    20210688
      Degree:               1
      Blocks to Sort:       1 Row size:           86 Total Rows:             14
      Initial runs:         1 Merge passes:        0 IO Cost / pass:          0
      Total IO sort cost: 0      Total CPU sort cost: 3589442
      Total Temp space used: 0
Join result: cost: 8  cdn: 14  rcz: 69
Best so far: TABLE#: 1  CST:          3  CDN:         14  BYTES:        546
Best so far: TABLE#: 0  CST:          8  CDN:         14  BYTES:        966
****** Recost for ORDER BY (using index) ************
***************************************
SINGLE TABLE ACCESS PATH
*** 2004-08-15 12:08:14.580
** Performing dynamic sampling initial checks. **
** TABLE EMP  Alias: E : reused cached dynamic sampling result (success).
    cardinality : 14
  TABLE: EMP  Alias: E     
    Original Card: 14   Rounded: 14  Computed: 14.00  Non Adjusted: 14.00
  Access Path: table-scan  Resc:  3  Resp:  3
  Access Path: index (no start/stop keys)
    Index: PK_EMP
    rsc_cpu: 6707309   rsc_io: 826
    ix_sel:  1.0000e+00    ix_sel_with_filters:  1.0000e+00
  BEST_CST: 248.36  PATH: 4  Degree:  1
***********************
Join order[2]:  EMP[E]#1  DEPT[D]#0
Now joining: DEPT[D]#0 *******
NL Join
  Outer table: cost: 248  cdn: 14  rcz: 39  resp:  248
  Inner table: DEPT  Alias: D
    Access Path: table-scan  Resc: 1
    Join:  Resc:  266  Resp:  266
OPTIMIZER PERCENT INDEX CACHING = 70
  Access Path: index (unique)
    Index: PK_DEPT
    rsc_cpu: 15483   rsc_io: 1
    ix_sel:  2.5000e-01    ix_sel_with_filters:  2.5000e-01
    NL Join:  resc: 253  resp: 253
OPTIMIZER PERCENT INDEX CACHING = 70
  Access Path: index (eq-unique)
    Index: PK_DEPT
    rsc_cpu: 15683   rsc_io: 1
    ix_sel:  0.0000e+00    ix_sel_with_filters:  0.0000e+00
    NL Join:  resc: 253  resp: 253
  Best NL cost: 253  resp: 253
Join Card:  14.00 = outer (14.00) * inner (4.00) * sel (2.5000e-01)
Join result: cost: 253  cdn: 14  rcz: 69
Best so far: TABLE#: 1  CST:        248  CDN:         14  BYTES:        546
Best so far: TABLE#: 0  CST:        253  CDN:         14  BYTES:        966
(newjo-save)    [1 0 ]
    SORT resource      Sort statistics
      Sort width:         113 Area size:      403456 Max Area size:    20210688
      Degree:               1
      Blocks to Sort:       1 Row size:           86 Total Rows:             14
      Initial runs:         1 Merge passes:        0 IO Cost / pass:          0
      Total IO sort cost: 0      Total CPU sort cost: 3589442
      Total Temp space used: 0
Final - First Rows Plan:
  JOIN ORDER: 2
  CST: 253  CDN: 14  RSC: 253  RSP: 253  BYTES: 966
  IO-RSC: 252  IO-RSP: 252  CPU-RSC: 2077221  CPU-RSP: 2077221
QUERY
select ename,job,dname,loc
from emp e, dept d
where e.deptno=d.deptno
order by e.empno
QUERY
BEGIN DBMS_OUTPUT.GET_LINES(:LINES, :NUMLINES); END;



-- 
Mladen Gogala
Oracle DBA
----------------------------------------------------------------
Please see the official ORACLE-L FAQ: http://www.orafaq.com
----------------------------------------------------------------
To unsubscribe send email to:  oracle-l-request@xxxxxxxxxxxxx
put 'unsubscribe' in the subject line.
--
Archives are at //www.freelists.org/archives/oracle-l/
FAQ is at //www.freelists.org/help/fom-serve/cache/1.html
-----------------------------------------------------------------

Other related posts: