我们在查看一条sql语句的执行计划时,只看到了CBO最终告诉我们的执行计划结果,但是却不知道CBO为什么要这么做。特别是当执行计划明显失真时,我们一定非常想搞清楚到底是什么地方导致CBO作出了这样一个错误的执行计划。10053事件给我们提供了一种这样的方式,它允许我们深入到CBO的内部,去看看CBO是如何工作的,它究竟是按照什么样的依据得出最终的执行计划的。
SQL> conn u1/u1 已连接。 SQL> create table t as select rownum x from dba_objects; 表已创建。 SQL> create index ind_t on t(x); 索引已创建。 SQL> exec dbms_stats.gather_table_stats(user,'t',cascade=>true); PL/SQL 过程已成功完成。 SQL> create table t1 as select x,'T1' name from t where x < 10000; 表已创建。 SQL> alter session set events '10053 trace name context forever,level 1'; 会话已更改。 SQL> explain plan for select t1.* from t,t1 where t.x < 100 and t.x = t1.x; 已解释。 SQL> alter session set events '10053 trace name context off'; 会话已更改。10053事件的使用方法和10046是一样的,首先给事件设置一个级别level 1,然后运行sql(或者直接使用explain plan的方式产生执行计划),最后终止事件。10053事件产生的trace文件不能用tkprof工具格式话,tkprof工具只能格式化sql_trace和10046事件产生的trace文件,直接阅读这个原始文件就可以。
Trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_3127.trc Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1 System name: Linux Node name: linux Release: 2.6.18-164.el5 Version: #1 SMP Tue Aug 18 15:51:54 EDT 2009 Machine: i686 Instance name: orcl Redo thread mounted by this instance: 1 Oracle process number: 27 Unix process pid: 3127, image: oracle@linux (TNS V1-V3) *** 2011-12-17 14:38:30.574 *** SESSION ID:(36.165) 2011-12-17 14:38:30.574 *** CLIENT ID:() 2011-12-17 14:38:30.574 *** SERVICE NAME:(SYS$USERS) 2011-12-17 14:38:30.574 *** MODULE NAME:(SQL*Plus) 2011-12-17 14:38:30.574 *** ACTION NAME:() 2011-12-17 14:38:30.574 Registered qb: SEL$1 0x2739f8f8 (PARSER) --------------------- QUERY BLOCK SIGNATURE --------------------- signature (): qb_name=SEL$1 nbfros=2 flg=0 fro(0): flg=4 objn=73325 hint_alias="T"@"SEL$1" fro(1): flg=4 objn=73327 hint_alias="T1"@"SEL$1" SPM: statement not found in SMB SPM: statement not a candidate for auto-capture ************************** Automatic degree of parallelism (ADOP) ************************** Automatic degree of parallelism is disabled: Parameter. PM: Considering predicate move-around in query block SEL$1 (#0) ************************** Predicate Move-Around (PM) --从这里开始进入了10053的trace信息部分。 ************************** OPTIMIZER INFORMATION ****************************************** ----- Current SQL Statement for this session (sql_id=fr9667v88dwbt) ----- explain plan for select t1.* from t,t1 where t.x < 100 and t.x = t1.x --这里可以看见我们执行的sql语句。 *******************************************这是10053trace文件的第一部分,最上面的部分是trace文件通用的,包含了操作系统、数据库和会话的信息,在这里不再多说。接下来:
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 OST - old style star transformation ST - new (cbqt) star transformation CNT - count(col) to count(*) transformation JE - Join Elimination JF - join factorization SLP - select list pruning DP - distinct placement 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文件用到的一些缩写指标的含义。接下来的部分是一些修复的bug信息,以及和性能相关的初始化参数的值:
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.2.0.1 _optimizer_search_limit = 5 cpu_count = 1 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 = 8 _optimizer_max_permutations = 2000 pga_aggregate_target = 76800 KB _pga_max_size = 204800 KB _query_rewrite_maxdisjunct = 257 _smm_auto_min_io_size = 56 KB _smm_auto_max_io_size = 248 KB _smm_min_size = 128 KB _smm_max_size = 15360 KB _smm_px_max_size = 38400 KB _cpu_to_io = 0 _optimizer_undo_cost_change = 11.2.0.1 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 _optimizer_null_aware_antijoin = true _optimizer_extend_jppd_view_types = 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 _px_minus_intersect = true _fix_control_key = 0 _force_slave_mapping_intra_part_loads = false _force_tmp_segment_loads = false _query_mmvrewrite_maxpreds = 10 _query_mmvrewrite_maxintervals = 5 _query_mmvrewrite_maxinlists = 5 _query_mmvrewrite_maxdmaps = 10 _query_mmvrewrite_maxcmaps = 20 _query_mmvrewrite_maxregperm = 512 _query_mmvrewrite_maxmergedcmaps = 50 _query_mmvrewrite_maxqryinlistvals = 500 _disable_parallel_conventional_load = false _trace_virtual_columns = false _replace_virtual_columns = true _virtual_column_overload_allowed = true _kdt_buffering = true _first_k_rows_dynamic_proration = true _optimizer_sortmerge_join_inequality = true _optimizer_aw_stats_enabled = true _bloom_pruning_enabled = true result_cache_mode = MANUAL _px_ual_serial_input = true _optimizer_skip_scan_guess = false _enable_row_shipping = true _row_shipping_threshold = 80 _row_shipping_explain = false transaction_isolation_level = read_commited _optimizer_distinct_elimination = true _optimizer_multi_level_push_pred = true _optimizer_group_by_placement = true _optimizer_rownum_bind_default = 10 _enable_query_rewrite_on_remote_objs = true _optimizer_extended_cursor_sharing_rel = simple _optimizer_adaptive_cursor_sharing = true _direct_path_insert_features = 0 _optimizer_improve_selectivity = true optimizer_use_pending_statistics = false _optimizer_enable_density_improvements = true _optimizer_aw_join_push_enabled = true _optimizer_connect_by_combine_sw = true _enable_pmo_ctas = 0 _optimizer_native_full_outer_join = force _bloom_predicate_enabled = true _optimizer_enable_extended_stats = true _is_lock_table_for_ddl_wait_lock = 0 _pivot_implementation_method = choose optimizer_capture_sql_plan_baselines = false optimizer_use_sql_plan_baselines = true _optimizer_star_trans_min_cost = 0 _optimizer_star_trans_min_ratio = 0 _with_subquery = OPTIMIZER _optimizer_fkr_index_cost_bias = 10 _optimizer_use_subheap = true parallel_degree_policy = manual parallel_degree = 0 parallel_min_time_threshold = 10 _parallel_time_unit = 10 _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 = 224 _parallel_syspls_obey_force = true cell_offload_processing = true _rdbms_internal_fplib_enabled = false db_file_multiblock_read_count = 40 _bloom_folding_enabled = true _mv_generalized_oj_refresh_opt = true cell_offload_compaction = ADAPTIVE parallel_degree_limit = 65535 parallel_force_local = false parallel_max_degree = 2 total_cpu_count = 1 cell_offload_plan_display = AUTO _optimizer_coalesce_subqueries = true _optimizer_fast_pred_transitivity = true _optimizer_fast_access_pred_analysis = true _optimizer_unnest_disjunctive_subq = true _optimizer_unnest_corr_set_subq = true _optimizer_distinct_agg_transform = true _aggregation_optimization_settings = 0 _optimizer_connect_by_elim_dups = true _optimizer_eliminate_filtering_join = true _connect_by_use_union_all = true dst_upgrade_insert_conv = true advanced_queuing_internal_cursor = 0 _optimizer_unnest_all_subqueries = true _bloom_predicate_pushdown_to_storage = true _bloom_vector_elements = 0 _bloom_pushing_max = 524288 parallel_autodop = 0 parallel_ddldml = 0 _parallel_cluster_cache_policy = adaptive _parallel_scalability = 50 iot_internal_cursor = 0 _optimizer_instance_count = 0 _optimizer_connect_by_cb_whr_only = false _suppress_scn_chk_for_cqn = nosuppress_1466 _optimizer_join_factorization = true _optimizer_use_cbqt_star_transformation = true _optimizer_table_expansion = true _and_pruning_enabled = true _deferred_constant_folding_mode = DEFAULT _optimizer_distinct_placement = true partition_pruning_internal_cursor = 0 parallel_hinted = none _sql_compatibility = 0 _optimizer_use_feedback = true _optimizer_try_st_before_jppd = true Bug Fix Control Environment fix 3834770 = 1 fix 3746511 = enabled fix 4519016 = enabled fix 3118776 = enabled ... ...接下来:
*************************************** 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 fr9667v88dwbt. 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 "T1"."X" "X","T1"."NAME" "NAME" FROM "U1"."T" "T","U1"."T1" "T1" WHERE "T"."X"<100 AND "T"."X"="T1"."X" SQL:******* UNPARSED QUERY IS ******* SELECT "T1"."X" "X","T1"."NAME" "NAME" FROM "U1"."T" "T","U1"."T1" "T1" WHERE "T"."X"<100 AND "T"."X"="T1"."X" Query block SEL$1 (#0) unchanged CVM: Considering view merge in query block SEL$1 (#0) JE: Considering Join Elimination on query block SEL$1 (#0) ************************* Join Elimination (JE) ************************* SQL:******* UNPARSED QUERY IS ******* SELECT "T1"."X" "X","T1"."NAME" "NAME" FROM "U1"."T" "T","U1"."T1" "T1" WHERE "T"."X"<100 AND "T"."X"="T1"."X" SQL:******* UNPARSED QUERY IS ******* SELECT "T1"."X" "X","T1"."NAME" "NAME" FROM "U1"."T" "T","U1"."T1" "T1" WHERE "T"."X"<100 AND "T"."X"="T1"."X" 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 fr9667v88dwbt. 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 "T1"."X" "X","T1"."NAME" "NAME" FROM "U1"."T" "T","U1"."T1" "T1" WHERE "T"."X"<100 AND "T"."X"="T1"."X" SQL:******* UNPARSED QUERY IS ******* SELECT "T1"."X" "X","T1"."NAME" "NAME" FROM "U1"."T" "T","U1"."T1" "T1" WHERE "T"."X"<100 AND "T"."X"="T1"."X" 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) "T"."X"<100 AND "T"."X"="T1"."X" try to generate transitive predicate from check constraints for query block SEL$1 (#0) finally: "T"."X"<100 AND "T"."X"="T1"."X" AND "T1"."X"<100 --注意这里 FPD: transitive predicates are generated in query block SEL$1 (#0) "T"."X"<100 AND "T"."X"="T1"."X" AND "T1"."X"<100 apadrv-start sqlid=16979914468182389113 : call(in-use=1248, alloc=16360), compile(in-use=60584, alloc=60948), execution(in-use=77100, alloc=77552)这一部分主要是对sql语句的谓词进行分析、重写,把它改为最符合逻辑的sql语句。比如它将我们最初的谓词形式:
"T"."X"<100 AND "T"."X"="T1"."X"改写为:
"T"."X"<100 AND "T"."X"="T1"."X" AND "T1"."X"<100可以很容易的看出,从逻辑上,这两个谓词条件上的等价的,下一部分是绑定变量的描述:
******************************************* Peeked values of the binds in SQL statement ******************************************* Final query after transformations:******* UNPARSED QUERY IS ******* SELECT "T1"."X" "X","T1"."NAME" "NAME" FROM "U1"."T" "T","U1"."T1" "T1" WHERE "T"."X"<100 AND "T"."X"="T1"."X" AND "T1"."X"<100 --这里是解析完后最终执行的sql kkoqbc: optimizing query block SEL$1 (#0) : call(in-use=1364, alloc=16360), compile(in-use=61404, alloc=65004), execution(in-use=81176, alloc=81628) kkoqbc-subheap (create addr=0x54fb0c) **************** QUERY BLOCK TEXT **************** select t1.* from t,t1 where t.x < 100 and t.x = t1.x --------------------- QUERY BLOCK SIGNATURE --------------------- signature (optimizer): qb_name=SEL$1 nbfros=2 flg=0 fro(0): flg=0 objn=73325 hint_alias="T"@"SEL$1" fro(1): flg=0 objn=73327 hint_alias="T1"@"SEL$1" ----------------------------- SYSTEM STATISTICS INFORMATION ----------------------------- Using NOWORKLOAD Stats CPUSPEEDNW: 3462 millions instructions/sec (default is 100) IOTFRSPEED: 4096 bytes per millisecond (default is 4096) IOSEEKTIM: 10 milliseconds (default is 10) MBRC: -1 blocks (default is 8) ***************************************接下来:
BASE STATISTICAL INFORMATION *********************** Table Stats:: Table: T1 Alias: T1 (NOT ANALYZED) #Rows: 1716 #Blks: 21 AvgRowLen: 100.00 *********************** Table Stats:: Table: T Alias: T #Rows: 71913 #Blks: 120 AvgRowLen: 5.00 Index Stats:: Index: IND_T Col#: 1 LVLS: 1 #LB: 159 #DK: 71913 LB/K: 1.00 DB/K: 1.00 CLUF: 110.00这一部分共列出了3个对象,它们是T表,T1表,T表的索引IND_T。还可以看见T1表是没有做统计分析的(T1 (NOT ANALYZED))。接下来的部分展示了CBO计算的每个单独对象访问的代价:
Access path analysis for T *************************************** SINGLE TABLE ACCESS PATH Single Table Cardinality Estimation for T[T] Table: T Alias: T Card: Original: 71913.000000 Rounded: 99 Computed: 99.00 Non Adjusted: 99.00 Access Path: TableScan Cost: 34.37 Resp: 34.37 Degree: 0 Cost_io: 34.00 Cost_cpu: 15237173 Resp_io: 34.00 Resp_cpu: 15237173 Access Path: index (index (FFS)) --Index fast full scan Index: IND_T resc_io: 45.00 resc_cpu: 13357519 ix_sel: 0.000000 ix_sel_with_filters: 1.000000 Access Path: index (FFS) Cost: 45.32 Resp: 45.32 Degree: 1 Cost_io: 45.00 Cost_cpu: 13357519 Resp_io: 45.00 Resp_cpu: 13357519 Access Path: index (IndexOnly) Index: IND_T resc_io: 2.00 resc_cpu: 34243 ix_sel: 0.001377 ix_sel_with_filters: 0.001377 Cost: 2.00 Resp: 2.00 Degree: 1 Best:: AccessPath: IndexRange --最后结论,选择单独访问索引的方式。 Index: IND_T Cost: 2.00 Degree: 1 Resp: 2.00 Card: 99.00 Bytes: 0这里有两个指标对于我们分析执行计划比较重要:
Card: Original: 71913.000000 源记录数,也就是操作数据的输入记录数,在这里就是表的实际记录数71913。
Rounded: 99 输出的记录树,CBO计算出通过条件过滤,预计得到的记录数。我们知道表T安装条件小于100的记录数为99。这里估算出得也是99。
通过这一部分信息我们可以看到对于表T,CBO认为可能使用下面3中方式来访问数据。
Access Path: TableScan Cost: 34.37
Access Path: index (FFS) Cost: 45.32
Access Path: index (IndexOnly) Cost: 2.00
很显然,单独访问索引的方式是代价最低的,所以CBO得出结论,对于表T上的查询,选择单独访问索引的方式。
Access path analysis for T1 *************************************** SINGLE TABLE ACCESS PATH Single Table Cardinality Estimation for T1[T1] *** 2011-12-17 14:38:30.600 ** Performing dynamic sampling initial checks. ** ** Dynamic sampling initial checks returning TRUE (level = 2). ** Dynamic sampling updated table stats.: blocks=21 *** 2011-12-17 14:38:30.600 ** Generated dynamic sampling query: query text : SELECT /* OPT_DYN_SAMP */ /*+ ALL_ROWS IGNORE_WHERE_CLAUSE NO_PARALLEL(SAMPLESUB) opt_param('parallel_execution_enabled', 'false') NO_PARALLEL_INDEX(SAMPLESUB) NO_SQL_TUNE */ 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 /*+ IGNORE_WHERE_CLAUSE NO_PARALLEL("T1") FULL("T1") NO_PARALLEL_INDEX("T1") */ 1 AS C1, CASE WHEN "T1"."X"<100 THEN 1 ELSE 0 END AS C2, "T1"."X" AS C3 FROM "T1" "T1") SAMPLESUB *** 2011-12-17 14:38:30.660 ** Executed dynamic sampling query: --因为T1表没有执行统计分析,可以看见这里采用了动态采样,level 2. level : 2 sample pct. : 100.000000 actual sample size : 9999 filtered sample card. : 99 orig. card. : 1716 block cnt. table stat. : 21 block cnt. for sampling: 21 max. sample block cnt. : 64 sample block cnt. : 21 ndv C3 : 9999 scaled : 9999.00 nulls C4 : 0 scaled : 0.00 min. sel. est. : 0.05000000 ** Dynamic sampling col. stats.: Column (#1): X( Part#: 0 AvgLen: 22 NDV: 9999 Nulls: 0 Density: 0.000100 ** Using dynamic sampling NULLs estimates. ** Using dynamic sampling NDV estimates. Scaled NDVs using cardinality = 9999. ** Using dynamic sampling card. : 9999 ** Dynamic sampling updated table card. ** Using single table dynamic sel. est. : 0.00990099 Table: T1 Alias: T1 Card: Original: 9999.000000 Rounded: 99 Computed: 99.00 Non Adjusted: 99.00 --这里CBO估算出的值也和实际值一样。 Access Path: TableScan --因为T1表没有索引,这里只有一种访问方式。 Cost: 7.05 Resp: 7.05 Degree: 0 Cost_io: 7.00 Cost_cpu: 2151330 Resp_io: 7.00 Resp_cpu: 2151330 Best:: AccessPath: TableScan Cost: 7.05 Degree: 1 Resp: 7.05 Card: 99.00 Bytes: 0这一部分CBO计算了每个表单独进行数据访问代价最小的方式,为下一步两表关联查询提供了代价计算的数据依据。下面的部分CBO会列出T,T1表所有的关联方式,并计算出每一种关联方式的代价,最终选择代价最小的关联方式作为sql的执行计划,这里会有6种情况:
T关联T1 NESTED LOOPS JOIN SORT MERGE JOIN HASH JOIN T1管理T NESTED LOOPS JOIN SORT MERGE JOIN HASH JOIN下面是这一部分的trace信息:
OPTIMIZER STATISTICS AND COMPUTATIONS *************************************** GENERAL PLANS *************************************** Considering cardinality-based initial join order. Permutations for Starting Table :0 Join order[1]: T1[T1]#0 T[T]#1 --order[1]T1关联T *************** Now joining: T[T]#1 *************** NL Join Outer table: Card: 99.00 Cost: 7.05 Resp: 7.05 Degree: 1 Bytes: 17 Access path analysis for T Inner table: T Alias: T Access Path: TableScan NL Join: Cost: 3262.36 Resp: 3262.36 Degree: 1 Cost_io: 3226.00 Cost_cpu: 1510631437 Resp_io: 3226.00 Resp_cpu: 1510631437 Access Path: index (index (FFS)) Index: IND_T resc_io: 43.08 resc_cpu: 13357519 ix_sel: 0.000000 ix_sel_with_filters: 1.000000 Inner table: T Alias: T Access Path: index (FFS) NL Join: Cost: 4303.89 Resp: 4303.89 Degree: 1 Cost_io: 4272.00 Cost_cpu: 1324545707 Resp_io: 4272.00 Resp_cpu: 1324545707 kkofmx: index filter:"T"."X"<100 Access Path: index (AllEqJoinGuess) Index: IND_T resc_io: 1.00 resc_cpu: 8171 ix_sel: 0.000014 ix_sel_with_filters: 0.000000 ***** Logdef predicate Adjustment ****** Final IO cst 0.00 , CPU cst 50.00 ***** End Logdef Adjustment ****** NL Join : Cost: 106.07 Resp: 106.07 Degree: 1 Cost_io: 106.00 Cost_cpu: 2965253 Resp_io: 106.00 Resp_cpu: 2965253 Best NL cost: 106.07 --nested loops join方式最好的代价。 resc: 106.07 resc_io: 106.00 resc_cpu: 2965253 --串行 resp: 106.07 resp_io: 106.00 resc_cpu: 2965253 --并行 Join Card: 98.011363 = = outer (99.000000) * inner (99.001377) * sel (0.010000) Join Card - Rounded: 98 Computed: 98.01 Outer table: T1 Alias: T1 resc: 7.05 card 99.00 bytes: 17 deg: 1 resp: 7.05 Inner table: T Alias: T resc: 2.00 card: 99.00 bytes: 5 deg: 1 resp: 2.00 using dmeth: 2 #groups: 1 SORT ressource Sort statistics Sort width: 88 Area size: 131072 Max Area size: 15728640 Degree: 1 Blocks to Sort: 1 Row size: 29 Total Rows: 99 Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 Total IO sort cost: 0 Total CPU sort cost: 41570781 Total Temp space used: 0 SORT ressource Sort statistics Sort width: 88 Area size: 131072 Max Area size: 15728640 Degree: 1 Blocks to Sort: 1 Row size: 16 Total Rows: 99 Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 Total IO sort cost: 0 Total CPU sort cost: 41570781 Total Temp space used: 0 SM join: Resc: 11.05 Resp: 11.05 [multiMatchCost=0.00] SM Join SM cost: 11.05 --sort merge join的代价。 resc: 11.05 resc_io: 9.00 resc_cpu: 85327135 --串行 resp: 11.05 resp_io: 9.00 resp_cpu: 85327135 --并行 Outer table: T1 Alias: T1 resc: 7.05 card 99.00 bytes: 17 deg: 1 resp: 7.05 Inner table: T Alias: T resc: 2.00 card: 99.00 bytes: 5 deg: 1 resp: 2.00 using dmeth: 2 #groups: 1 Cost per ptn: 0.50 #ptns: 1 hash_area: 124 (max=3840) buildfrag: 1 probefrag: 1 ppasses: 1 Hash join: Resc: 9.55 Resp: 9.55 [multiMatchCost=0.00] HA Join HA cost: 9.55 --hash join的代价。 resc: 9.55 resc_io: 9.00 resc_cpu: 22980929 --串行 resp: 9.55 resp_io: 9.00 resp_cpu: 22980929 --并行 Best:: JoinMethod: Hash --order[1]T1关联T hash join的代价最小,所以最后选择hash join。 Cost: 9.55 Degree: 1 Resp: 9.55 Card: 98.01 Bytes: 22 *********************** Best so far: Table#: 0 cost: 7.0518 card: 99.0000 bytes: 1683 Table#: 1 cost: 9.5532 card: 98.0114 bytes: 2156 *********************** Join order[2]: T[T]#1 T1[T1]#0 --order[2]T关联T1 *************** Now joining: T1[T1]#0 *************** NL Join Outer table: Card: 99.00 Cost: 2.00 Resp: 2.00 Degree: 1 Bytes: 5 Access path analysis for T1 Inner table: T1 Alias: T1 Access Path: TableScan NL Join: Cost: 572.13 Resp: 572.13 Degree: 1 Cost_io: 567.00 Cost_cpu: 213015937 Resp_io: 567.00 Resp_cpu: 213015937 Best NL cost: 572.13 --nested loops join方式最好的代价。 resc: 572.13 resc_io: 567.00 resc_cpu: 213015937 --串行 resp: 572.13 resp_io: 567.00 resc_cpu: 213015937 --并行 Join Card: 98.011363 = = outer (99.001377) * inner (99.000000) * sel (0.010000) Join Card - Rounded: 98 Computed: 98.01 Outer table: T Alias: T resc: 2.00 card 99.00 bytes: 5 deg: 1 resp: 2.00 Inner table: T1 Alias: T1 resc: 7.05 card: 99.00 bytes: 17 deg: 1 resp: 7.05 using dmeth: 2 #groups: 1 SORT ressource Sort statistics Sort width: 88 Area size: 131072 Max Area size: 15728640 Degree: 1 Blocks to Sort: 1 Row size: 29 Total Rows: 99 Initial runs: 1 Merge passes: 0 IO Cost / pass: 0 Total IO sort cost: 0 Total CPU sort cost: 41570781 Total Temp space used: 0 SM join: Resc: 10.05 Resp: 10.05 [multiMatchCost=0.00] SM Join SM cost: 10.05 --sort merge join的代价。 resc: 10.05 resc_io: 9.00 resc_cpu: 43756354 --串行 resp: 10.05 resp_io: 9.00 resp_cpu: 43756354 --并行 Outer table: T Alias: T resc: 2.00 card 99.00 bytes: 5 deg: 1 resp: 2.00 Inner table: T1 Alias: T1 resc: 7.05 card: 99.00 bytes: 17 deg: 1 resp: 7.05 using dmeth: 2 #groups: 1 Cost per ptn: 0.50 #ptns: 1 hash_area: 124 (max=3840) buildfrag: 1 probefrag: 1 ppasses: 1 Hash join: Resc: 9.55 Resp: 9.55 [multiMatchCost=0.00] HA Join HA cost: 9.55 --hash join的代价。 resc: 9.55 resc_io: 9.00 resc_cpu: 22980929 --串行 resp: 9.55 resp_io: 9.00 resp_cpu: 22980929 --并行 Best:: JoinMethod: Hash --order[2]T关联T1 hash join的代价最小,所以最后选择hash join。 Cost: 9.55 Degree: 1 Resp: 9.55 Card: 98.01 Bytes: 22 *********************** Best so far: Table#: 1 cost: 2.0008 card: 99.0014 bytes: 495 Table#: 0 cost: 9.5532 card: 98.0114 bytes: 2156 *********************** (newjo-stop-1) k:0, spcnt:0, perm:2, maxperm:2000 ********************************* Number of join permutations tried: 2 ********************************* Consider using bloom filter between T[T] and T1[T1] kkoBloomFilter: join (lcdn:99 rcdn:99 jcdn:98 limit:4901) Computing bloom ndv for creator:T[T] ccdn:99.0 and user:T1[T1] ucdn:99.0 kkopqComputeBloomNdv: predicate (bndv:71913 ndv:100) and (bndv:9999 ndv:99) kkopqComputeBloomNdv: pred cnt:2 ndv:99 reduction:1 kkoBloomFilter: join ndv:0 reduction:1.000014 (limit:0.500000) rejected because distinct value ratio (newjo-save) [1 0 ] Trying or-Expansion on query block SEL$1 (#0) Transfer Optimizer annotations for query block SEL$1 (#0) id=0 frofkke[i] (index stop key) predicate="T"."X"<100 id=0 frofkksm[i] (sort-merge/hash) predicate="T"."X"="T1"."X" id=0 frosand (sort-merge/hash) predicate="T"."X"="T1"."X" id=0 frofand predicate="T1"."X"<100 Final cost for query block SEL$1 (#0) - All Rows Plan: Best join order: 2 --这里是最后确定的管理顺序:order[2]T关联T1 Cost: 9.5532 Degree: 1 Card: 98.0000 Bytes: 2156 Resc: 9.5532 Resc_io: 9.0000 Resc_cpu: 22980929 Resp: 9.5532 Resp_io: 9.0000 Resc_cpu: 22980929 kkoqbc-subheap (delete addr=0x54fb0c, in-use=22908, alloc=23628) kkoqbc-end: : call(in-use=13352, alloc=49168), compile(in-use=63052, alloc=65004), execution(in-use=81656, alloc=85704) kkoqbc: finish optimizing query block SEL$1 (#0) apadrv-end : call(in-use=13352, alloc=49168), compile(in-use=63748, alloc=65004), execution(in-use=81656, alloc=85704) Starting SQL statement dump user_id=84 user_name=U1 module=SQL*Plus action= sql_id=fr9667v88dwbt plan_hash_value=948419965 problem_type=3 ----- Current SQL Statement for this session (sql_id=fr9667v88dwbt) ----- explain plan for select t1.* from t,t1 where t.x < 100 and t.x = t1.x sql_text_length=70 sql=explain plan for select t1.* from t,t1 where t.x < 100 and t.x = t1.x ----- Explain Plan Dump ----- ----- Plan Table -----几种关联方式的代价如下:
T1[T1]#0 T[T]#1 --order[1]T1关联T Best NL cost: 106.07 --nested loops join方式最好的代价。 resc: 106.07 resc_io: 106.00 resc_cpu: 2965253 --串行 resp: 106.07 resp_io: 106.00 resc_cpu: 2965253 --并行 SM cost: 11.05 --sort merge join的代价。 resc: 11.05 resc_io: 9.00 resc_cpu: 85327135 --串行 resp: 11.05 resp_io: 9.00 resp_cpu: 85327135 --并行 HA cost: 9.55 --hash join的代价。 resc: 9.55 resc_io: 9.00 resc_cpu: 22980929 --串行 resp: 9.55 resp_io: 9.00 resp_cpu: 22980929 --并行 T[T]#1 T1[T1]#0 --order[2]T关联T1 Best NL cost: 572.13 --nested loops join方式最好的代价。 resc: 572.13 resc_io: 567.00 resc_cpu: 213015937 --串行 resp: 572.13 resp_io: 567.00 resc_cpu: 213015937 --并行 SM cost: 10.05 --sort merge join的代价。 resc: 10.05 resc_io: 9.00 resc_cpu: 43756354 --串行 resp: 10.05 resp_io: 9.00 resp_cpu: 43756354 --并行 HA cost: 9.55 --hash join的代价。 resc: 9.55 resc_io: 9.00 resc_cpu: 22980929 --串行 resp: 9.55 resp_io: 9.00 resp_cpu: 22980929 --并行下面的一部分就是通过上面的计算CBO给出的一个执行计划报告:
============ Plan Table ============ --------------------------------------+-----------------------------------+ | Id | Operation | Name | Rows | Bytes | Cost | Time | --------------------------------------+-----------------------------------+ | 0 | SELECT STATEMENT | | | | 10 | | | 1 | HASH JOIN | | 98 | 2156 | 10 | 00:00:01 | | 2 | INDEX RANGE SCAN | IND_T | 99 | 495 | 2 | 00:00:01 | | 3 | TABLE ACCESS FULL | T1 | 99 | 1683 | 7 | 00:00:01 | --------------------------------------+-----------------------------------+ Predicate Information: ---------------------- 1 - access("T"."X"="T1"."X") 2 - access("T"."X"<100) 3 - filter("T1"."X"<100)通过一系列的计算和比较,CBO最终选择了上面的执行计划作为sql语句的最终执行计划。trace文件的最后一部分信息依然是参数和修复bug的信息,在这里不再讨论。
Content of other_xml column =========================== db_version : 11.2.0.1 parse_schema : U1 dynamic_sampling: 2 plan_hash : 948419965 plan_hash_2 : 4127279571 Outline Data: /*+ BEGIN_OUTLINE_DATA IGNORE_OPTIM_EMBEDDED_HINTS OPTIMIZER_FEATURES_ENABLE('11.2.0.1') DB_VERSION('11.2.0.1') ALL_ROWS OUTLINE_LEAF(@"SEL$1") INDEX(@"SEL$1" "T"@"SEL$1" ("T"."X")) FULL(@"SEL$1" "T1"@"SEL$1") LEADING(@"SEL$1" "T"@"SEL$1" "T1"@"SEL$1") USE_HASH(@"SEL$1" "T1"@"SEL$1") END_OUTLINE_DATA */ Optimizer state dump: 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.2.0.1 _optimizer_search_limit = 5 cpu_count = 1 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 = 8 _optimizer_max_permutations = 2000 pga_aggregate_target = 76800 KB _pga_max_size = 204800 KB _query_rewrite_maxdisjunct = 257 _smm_auto_min_io_size = 56 KB _smm_auto_max_io_size = 248 KB _smm_min_size = 128 KB _smm_max_size = 15360 KB _smm_px_max_size = 38400 KB _cpu_to_io = 0 _optimizer_undo_cost_change = 11.2.0.1 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 _optimizer_null_aware_antijoin = true _optimizer_extend_jppd_view_types = 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 _px_minus_intersect = true _fix_control_key = 0 _force_slave_mapping_intra_part_loads = false _force_tmp_segment_loads = false _query_mmvrewrite_maxpreds = 10 _query_mmvrewrite_maxintervals = 5 _query_mmvrewrite_maxinlists = 5 _query_mmvrewrite_maxdmaps = 10 _query_mmvrewrite_maxcmaps = 20 _query_mmvrewrite_maxregperm = 512 _query_mmvrewrite_maxmergedcmaps = 50 _query_mmvrewrite_maxqryinlistvals = 500 _disable_parallel_conventional_load = false _trace_virtual_columns = false _replace_virtual_columns = true _virtual_column_overload_allowed = true _kdt_buffering = true _first_k_rows_dynamic_proration = true _optimizer_sortmerge_join_inequality = true _optimizer_aw_stats_enabled = true _bloom_pruning_enabled = true result_cache_mode = MANUAL _px_ual_serial_input = true _optimizer_skip_scan_guess = false _enable_row_shipping = true _row_shipping_threshold = 80 _row_shipping_explain = false transaction_isolation_level = read_commited _optimizer_distinct_elimination = true _optimizer_multi_level_push_pred = true _optimizer_group_by_placement = true _optimizer_rownum_bind_default = 10 _enable_query_rewrite_on_remote_objs = true _optimizer_extended_cursor_sharing_rel = simple _optimizer_adaptive_cursor_sharing = true _direct_path_insert_features = 0 _optimizer_improve_selectivity = true optimizer_use_pending_statistics = false _optimizer_enable_density_improvements = true _optimizer_aw_join_push_enabled = true _optimizer_connect_by_combine_sw = true _enable_pmo_ctas = 0 _optimizer_native_full_outer_join = force _bloom_predicate_enabled = true _optimizer_enable_extended_stats = true _is_lock_table_for_ddl_wait_lock = 0 _pivot_implementation_method = choose optimizer_capture_sql_plan_baselines = false optimizer_use_sql_plan_baselines = true _optimizer_star_trans_min_cost = 0 _optimizer_star_trans_min_ratio = 0 _with_subquery = OPTIMIZER _optimizer_fkr_index_cost_bias = 10 _optimizer_use_subheap = true parallel_degree_policy = manual parallel_degree = 0 parallel_min_time_threshold = 10 _parallel_time_unit = 10 _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 = 224 _parallel_syspls_obey_force = true cell_offload_processing = true _rdbms_internal_fplib_enabled = false db_file_multiblock_read_count = 40 _bloom_folding_enabled = true _mv_generalized_oj_refresh_opt = true cell_offload_compaction = ADAPTIVE parallel_degree_limit = 65535 parallel_force_local = false parallel_max_degree = 2 total_cpu_count = 1 cell_offload_plan_display = AUTO _optimizer_coalesce_subqueries = true _optimizer_fast_pred_transitivity = true _optimizer_fast_access_pred_analysis = true _optimizer_unnest_disjunctive_subq = true _optimizer_unnest_corr_set_subq = true _optimizer_distinct_agg_transform = true _aggregation_optimization_settings = 0 _optimizer_connect_by_elim_dups = true _optimizer_eliminate_filtering_join = true _connect_by_use_union_all = true dst_upgrade_insert_conv = true advanced_queuing_internal_cursor = 0 _optimizer_unnest_all_subqueries = true _bloom_predicate_pushdown_to_storage = true _bloom_vector_elements = 0 _bloom_pushing_max = 524288 parallel_autodop = 0 parallel_ddldml = 0 _parallel_cluster_cache_policy = adaptive _parallel_scalability = 50 iot_internal_cursor = 0 _optimizer_instance_count = 0 _optimizer_connect_by_cb_whr_only = false _suppress_scn_chk_for_cqn = nosuppress_1466 _optimizer_join_factorization = true _optimizer_use_cbqt_star_transformation = true _optimizer_table_expansion = true _and_pruning_enabled = true _deferred_constant_folding_mode = DEFAULT _optimizer_distinct_placement = true partition_pruning_internal_cursor = 0 parallel_hinted = none _sql_compatibility = 0 _optimizer_use_feedback = true _optimizer_try_st_before_jppd = true Bug Fix Control Environment fix 3834770 = 1 fix 3746511 = enabled fix 4519016 = enabled fix 3118776 = enabled fix 7556098 = enabled ... ... fix 8580883 = enabled fix 5892599 = disabled fix 8609714 = enabled fix 8514561 = enabled fix 8619631 = disabled Query Block Registry: SEL$1 0x2739f8f8 (PARSER) [FINAL] : call(in-use=19408, alloc=49168), compile(in-use=90196, alloc=187356), execution(in-use=208012, alloc=208656) End of Optimizer State Dump Dumping Hints ============= ====================== END SQL Statement Dump ======================