O CBO é um componente complexo e imperfeito. Para os momentos em que ele é imperfeito, há os meios de controle da Estabilidade de Plano. Os métodos de Estabilidade de Plano utilizados no Oracle Database 11gR2 / 12cR1 são:
– Fix: na versão 12.1.0.2, há 1071 Fix que influenciam o comportamento do CBO (de acordo com o Trace 10053);
– Parâmetros (ocultos ou não) de Controle do CBO: na versão 12.1.0.2, há 469 parâmetros que influenciam o comportamento do CBO (de acordo com o Trace 10053);
– HINTs: na versão 12.1.0.2, há 332 HINTs;
– Stored Outlines;
– SQL Profiles;
– SQL Plan Baselines.
A direção atual da Oracle para Estabilidade do Plano são as Baselines, mas mesmo assim outros métodos continuam sendo utilizados pelo próprio produto: por exemplo, a Feature Tuning Pack (através da Package DBMS_SQLTUNE) utiliza Profiles, e novas HINTs continuam a aparecer a cada versão.
Por exemplo, a Feature Adaptive Plan foi lançada no PatchSet 12.1.0.2, e como toda nova funcionalidade, vem com uma HINT para forçar ou desabilitar seu uso, em caso de uma decisão não desejada do CBO.
A View $SQL_HINT é útil para conhecer estas alterações, assim como para saber se a versão do Oracle Database que você está utilizando suporta uma HINT que você está precisando, e qual a forma inversa de uma determinada HINT (por exemplo, INMEMORY / NO_INMEMORY).
SQL> SELECT NAME, INVERSE, VERSION FROM V$SQL_HINT ORDER BY 1; NAME INVERSE VERSION ---------------------------------------- ---------------------------------------- ------------------------- ADAPTIVE_PLAN NO_ADAPTIVE_PLAN 12.1.0.2 ALL_ROWS 8.1.0 AND_EQUAL 8.1.0 ANSI_REARCH NO_ANSI_REARCH 12.1.0.2 ANTIJOIN 9.0.0 APPEND NOAPPEND 8.1.0 APPEND_VALUES NOAPPEND 11.2.0.1 AUTO_REOPTIMIZE NO_AUTO_REOPTIMIZE 12.1.0.1 BATCH_TABLE_ACCESS_BY_ROWID NO_BATCH_TABLE_ACCESS_BY_ROWID 12.1.0.1 BIND_AWARE NO_BIND_AWARE 11.1.0.7 BITMAP 8.1.0 BITMAP_AND 12.1.0.1 BITMAP_TREE 10.2.0.1 BUFFER NO_BUFFER 8.1.5 BYPASS_RECURSIVE_CHECK 9.0.0 BYPASS_UJVC 8.1.5 CACHE NOCACHE 8.1.0 CACHE_CB NOCACHE 8.1.5 CACHE_TEMP_TABLE NOCACHE 8.1.5 CARDINALITY 9.0.0 CHANGE_DUPKEY_ERROR_INDEX 11.1.0.7 CHECK_ACL_REWRITE NO_CHECK_ACL_REWRITE 11.1.0.6 CHOOSE 8.1.0 CLUSTER 8.0.0 CLUSTER_BY_ROWID NO_CLUSTER_BY_ROWID 12.1.0.1 CLUSTERING NO_CLUSTERING 12.1.0.1 COALESCE_SQ NO_COALESCE_SQ 11.2.0.1 COLUMN_STATS 10.1.0.3 CONNECT_BY_CB_WHR_ONLY NO_CONNECT_BY_CB_WHR_ONLY 10.2.0.5 CONNECT_BY_COMBINE_SW NO_CONNECT_BY_COMBINE_SW 10.2.0.4 CONNECT_BY_COST_BASED NO_CONNECT_BY_COST_BASED 10.2.0.2 CONNECT_BY_ELIM_DUPS NO_CONNECT_BY_ELIM_DUPS 11.2.0.1 CONNECT_BY_FILTERING NO_CONNECT_BY_FILTERING 10.2.0.2 COST_XML_QUERY_REWRITE NO_COST_XML_QUERY_REWRITE 11.1.0.6 CPU_COSTING NO_CPU_COSTING 9.0.0 CUBE_AJ 12.1.0.1 CUBE_GB 8.1.5 CUBE_SJ 12.1.0.1 CURSOR_SHARING_EXACT 9.0.0 DATA_SECURITY_REWRITE_LIMIT NO_DATA_SECURITY_REWRITE 12.1.0.1 DBMS_STATS 10.2.0.1 DB_VERSION 11.1.0.6 DECORRELATE NO_DECORRELATE 12.1.0.1 DEREF_NO_REWRITE 8.1.0 DISABLE_PARALLEL_DML ENABLE_PARALLEL_DML 11.2.0.4 DML_UPDATE 9.0.0 DOMAIN_INDEX_FILTER NO_DOMAIN_INDEX_FILTER 11.1.0.6 DOMAIN_INDEX_NO_SORT DOMAIN_INDEX_SORT 8.1.5 DOMAIN_INDEX_SORT DOMAIN_INDEX_NO_SORT 8.1.5 DRIVING_SITE 8.1.0 DST_UPGRADE_INSERT_CONV NO_DST_UPGRADE_INSERT_CONV 11.2.0.1 DYNAMIC_SAMPLING 9.2.0 DYNAMIC_SAMPLING_EST_CDN 9.2.0 ELIM_GROUPBY NO_ELIM_GROUPBY 12.1.0.2 ELIMINATE_JOIN NO_ELIMINATE_JOIN 10.2.0.1 ELIMINATE_OBY NO_ELIMINATE_OBY 10.2.0.1 ENABLE_PARALLEL_DML DISABLE_PARALLEL_DML 11.2.0.4 EXPAND_GSET_TO_UNION NO_EXPAND_GSET_TO_UNION 9.2.0 EXPAND_TABLE NO_EXPAND_TABLE 11.2.0.1 EXPR_CORR_CHECK 8.0.0 FACT NO_FACT 8.1.0 FACTORIZE_JOIN NO_FACTORIZE_JOIN 11.2.0.1 FBTSCAN 10.1.0.3 FIRST_ROWS 8.1.0 FORCE_XML_QUERY_REWRITE NO_XML_QUERY_REWRITE 9.2.0 FULL 8.1.0 FULL_OUTER_JOIN_TO_OUTER NO_FULL_OUTER_JOIN_TO_OUTER 11.2.0.3 GATHER_OPTIMIZER_STATISTICS NO_GATHER_OPTIMIZER_STATISTICS 12.1.0.1 GATHER_PLAN_STATISTICS 10.1.0.3 GBY_CONC_ROLLUP 9.0.0 GBY_PUSHDOWN NO_GBY_PUSHDOWN 10.2.0.5 HASH 8.1.0 HASH_AJ 8.1.0 HASH_SJ 8.1.0 HWM_BROKERED 9.0.0 IGNORE_OPTIM_EMBEDDED_HINTS 10.1.0.3 IGNORE_ROW_ON_DUPKEY_INDEX 11.1.0.7 IGNORE_WHERE_CLAUSE 9.2.0 INCLUDE_VERSION 10.1.0.3 INDEX NO_INDEX 8.0.0 INDEX_ASC NO_INDEX 8.1.0 INDEX_COMBINE 8.1.0 INDEX_DESC NO_INDEX 8.1.0 INDEX_FFS 8.1.0 INDEX_JOIN 8.1.5 INDEX_RRS 9.0.0 INDEX_RS_ASC 11.1.0.6 INDEX_RS_DESC 11.1.0.6 INDEX_SS NO_INDEX_SS 9.0.0 INDEX_SS_ASC NO_INDEX_SS 9.0.0 INDEX_SS_DESC NO_INDEX_SS 9.0.0 INDEX_STATS 10.1.0.3 INLINE MATERIALIZE 9.0.0 INLINE_XMLTYPE_NT 10.2.0.1 INMEMORY NO_INMEMORY 12.1.0.2 INMEMORY_PRUNING NO_INMEMORY_PRUNING 12.1.0.2 LEADING 8.1.6 LIKE_EXPAND 8.1.7 LOCAL_INDEXES 9.0.0 MATERIALIZE INLINE 9.0.0 MERGE NO_MERGE 8.1.0 MERGE_AJ 8.1.0 MERGE_CONST_ON 8.0.0 MERGE_SJ 8.1.0 MODEL_COMPILE_SUBQUERY 10.2.0.1 MODEL_DONTVERIFY_UNIQUENESS 10.1.0.3 MODEL_DYNAMIC_SUBQUERY 10.2.0.1 MODEL_MIN_ANALYSIS 10.1.0.3 MODEL_NO_ANALYSIS 10.1.0.3 MODEL_PUSH_REF NO_MODEL_PUSH_REF 10.1.0.3 MONITOR NO_MONITOR 11.1.0.6 MV_MERGE 9.0.0 NATIVE_FULL_OUTER_JOIN NO_NATIVE_FULL_OUTER_JOIN 10.2.0.3 NESTED_TABLE_FAST_INSERT 10.1.0.3 NESTED_TABLE_GET_REFS 8.1.0 NESTED_TABLE_SET_SETID 8.1.5 NL_AJ 8.0.0 NLJ_BATCHING NO_NLJ_BATCHING 11.1.0.6 NLJ_PREFETCH NO_NLJ_PREFETCH 11.1.0.6 NL_SJ 8.0.0 NO_ACCESS 8.1.5 NO_ADAPTIVE_PLAN ADAPTIVE_PLAN 12.1.0.2 NO_ANSI_REARCH ANSI_REARCH 12.1.0.2 NOAPPEND APPEND 8.1.0 NO_AUTO_REOPTIMIZE AUTO_REOPTIMIZE 12.1.0.1 NO_BASETABLE_MULTIMV_REWRITE REWRITE 10.1.0.3 NO_BATCH_TABLE_ACCESS_BY_ROWID BATCH_TABLE_ACCESS_BY_ROWID 12.1.0.1 NO_BIND_AWARE BIND_AWARE 11.1.0.7 NO_BUFFER BUFFER 8.1.5 NOCACHE CACHE 8.1.0 NO_CARTESIAN 10.2.0.1 NO_CHECK_ACL_REWRITE CHECK_ACL_REWRITE 11.1.0.6 NO_CLUSTER_BY_ROWID CLUSTER_BY_ROWID 12.1.0.1 NO_CLUSTERING CLUSTERING 12.1.0.1 NO_COALESCE_SQ COALESCE_SQ 11.2.0.1 NO_CONNECT_BY_CB_WHR_ONLY CONNECT_BY_CB_WHR_ONLY 10.2.0.5 NO_CONNECT_BY_COMBINE_SW CONNECT_BY_COMBINE_SW 10.2.0.4 NO_CONNECT_BY_COST_BASED CONNECT_BY_COST_BASED 10.2.0.2 NO_CONNECT_BY_ELIM_DUPS CONNECT_BY_ELIM_DUPS 11.2.0.1 NO_CONNECT_BY_FILTERING CONNECT_BY_FILTERING 10.2.0.2 NO_COST_XML_QUERY_REWRITE COST_XML_QUERY_REWRITE 11.1.0.6 NO_CPU_COSTING CPU_COSTING 9.0.0 NO_DATA_SECURITY_REWRITE DATA_SECURITY_REWRITE_LIMIT 12.1.0.1 NO_DECORRELATE DECORRELATE 12.1.0.1 NO_DOMAIN_INDEX_FILTER DOMAIN_INDEX_FILTER 11.1.0.6 NO_DST_UPGRADE_INSERT_CONV DST_UPGRADE_INSERT_CONV 11.2.0.1 NO_ELIM_GROUPBY ELIM_GROUPBY 12.1.0.2 NO_ELIMINATE_JOIN ELIMINATE_JOIN 10.2.0.1 NO_ELIMINATE_OBY ELIMINATE_OBY 10.2.0.1 NO_EXPAND USE_CONCAT 8.1.0 NO_EXPAND_GSET_TO_UNION EXPAND_GSET_TO_UNION 9.2.0 NO_EXPAND_TABLE EXPAND_TABLE 11.2.0.1 NO_FACT FACT 8.1.0 NO_FACTORIZE_JOIN FACTORIZE_JOIN 11.2.0.1 NO_FULL_OUTER_JOIN_TO_OUTER FULL_OUTER_JOIN_TO_OUTER 11.2.0.3 NO_GATHER_OPTIMIZER_STATISTICS GATHER_OPTIMIZER_STATISTICS 12.1.0.1 NO_GBY_PUSHDOWN GBY_PUSHDOWN 10.2.0.5 NO_INDEX INDEX 8.1.5 NO_INDEX_FFS INDEX_FFS 10.1.0.3 NO_INDEX_SS INDEX_SS 10.1.0.3 NO_INMEMORY INMEMORY 12.1.0.2 NO_INMEMORY_PRUNING INMEMORY_PRUNING 12.1.0.2 NO_LOAD 11.1.0.6 NO_MERGE MERGE 8.0.0 NO_MODEL_PUSH_REF MODEL_PUSH_REF 10.1.0.3 NO_MONITOR MONITOR 11.1.0.6 NO_MONITORING 8.0.0 NO_MULTIMV_REWRITE REWRITE 10.1.0.3 NO_NATIVE_FULL_OUTER_JOIN NATIVE_FULL_OUTER_JOIN 10.2.0.3 NO_NLJ_BATCHING NLJ_BATCHING 11.1.0.6 NO_NLJ_PREFETCH NLJ_PREFETCH 11.1.0.6 NO_ORDER_ROLLUPS 8.0.0 NO_OUTER_JOIN_TO_ANTI OUTER_JOIN_TO_ANTI 11.2.0.3 NO_OUTER_JOIN_TO_INNER OUTER_JOIN_TO_INNER 11.1.0.6 NO_PARALLEL SHARED 10.1.0.3 NOPARALLEL SHARED 8.1.0 NO_PARALLEL_INDEX PARALLEL_INDEX 8.1.0 NO_PARTIAL_COMMIT 10.1.0.3 NO_PARTIAL_JOIN PARTIAL_JOIN 12.1.0.1 NO_PARTIAL_ROLLUP_PUSHDOWN PARTIAL_ROLLUP_PUSHDOWN 12.1.0.1 NO_PLACE_DISTINCT PLACE_DISTINCT 11.2.0.1 NO_PLACE_GROUP_BY PLACE_GROUP_BY 11.1.0.6 NO_PQ_CONCURRENT_UNION PQ_CONCURRENT_UNION 12.1.0.1 NO_PQ_REPLICATE PQ_REPLICATE 12.1.0.1 NO_PQ_SKEW PQ_SKEW 12.1.0.1 NO_PRUNE_GSETS 9.0.0 NO_PULL_PRED PULL_PRED 10.2.0.1 NO_PUSH_PRED PUSH_PRED 8.1.0 NO_PUSH_SUBQ PUSH_SUBQ 9.2.0 NO_PX_FAULT_TOLERANCE PX_FAULT_TOLERANCE 12.1.0.1 NO_PX_JOIN_FILTER PX_JOIN_FILTER 10.2.0.1 NO_QKN_BUFF 9.2.0 NO_QUERY_TRANSFORMATION 10.1.0.3 NO_REF_CASCADE REF_CASCADE_CURSOR 9.2.0 NO_RESULT_CACHE RESULT_CACHE 11.1.0.6 NO_REWRITE REWRITE 8.1.5 NO_SEMIJOIN SEMIJOIN 9.0.0 NO_SEMI_TO_INNER SEMI_TO_INNER 11.2.0.3 NO_SET_TO_JOIN SET_TO_JOIN 10.1.0.3 NO_SQL_TUNE 10.2.0.1 NO_STAR_TRANSFORMATION STAR_TRANSFORMATION 10.1.0.3 NO_STATEMENT_QUEUING STATEMENT_QUEUING 11.2.0.1 NO_STATS_GSETS 8.0.0 NO_SUBQUERY_PRUNING SUBQUERY_PRUNING 11.1.0.6 NO_SUBSTRB_PAD 11.2.0.1 NO_SWAP_JOIN_INPUTS SWAP_JOIN_INPUTS 10.1.0.3 NO_TABLE_LOOKUP_BY_NL TABLE_LOOKUP_BY_NL 11.2.0.2 NO_TRANSFORM_DISTINCT_AGG TRANSFORM_DISTINCT_AGG 11.2.0.1 NO_UNNEST UNNEST 8.1.6 NO_USE_CUBE USE_CUBE 12.1.0.1 NO_USE_HASH USE_HASH 10.1.0.3 NO_USE_HASH_AGGREGATION USE_HASH_AGGREGATION 10.2.0.1 NO_USE_HASH_GBY_FOR_PUSHDOWN USE_HASH_GBY_FOR_PUSHDOWN 11.2.0.2 NO_USE_INVISIBLE_INDEXES USE_INVISIBLE_INDEXES 11.1.0.6 NO_USE_MERGE USE_MERGE 10.1.0.3 NO_USE_NL USE_NL 10.1.0.3 NO_USE_VECTOR_AGGREGATION USE_VECTOR_AGGREGATION 12.1.0.2 NO_VECTOR_TRANSFORM VECTOR_TRANSFORM 12.1.0.2 NO_VECTOR_TRANSFORM_DIMS VECTOR_TRANSFORM_DIMS 12.1.0.2 NO_VECTOR_TRANSFORM_FACT VECTOR_TRANSFORM_FACT 12.1.0.2 NO_XDB_FASTPATH_INSERT XDB_FASTPATH_INSERT 11.2.0.2 NO_XML_DML_REWRITE 10.2.0.1 NO_XMLINDEX_REWRITE XMLINDEX_REWRITE 11.1.0.6 NO_XMLINDEX_REWRITE_IN_SELECT XMLINDEX_REWRITE_IN_SELECT 11.1.0.6 NO_XML_QUERY_REWRITE FORCE_XML_QUERY_REWRITE 9.2.0 NO_ZONEMAP ZONEMAP 12.1.0.1 NUM_INDEX_KEYS 10.2.0.3 OLD_PUSH_PRED 10.2.0.1 OPAQUE_TRANSFORM 10.1.0.3 OPAQUE_XCANONICAL 10.1.0.3 OPT_ESTIMATE 10.1.0.3 OPTIMIZER_FEATURES_ENABLE 10.1.0.3 OPT_PARAM 10.2.0.1 ORDERED 8.1.0 ORDERED_PREDICATES 8.0.0 OR_EXPAND 8.1.7 OUTER_JOIN_TO_ANTI NO_OUTER_JOIN_TO_ANTI 11.2.0.3 OUTER_JOIN_TO_INNER NO_OUTER_JOIN_TO_INNER 11.1.0.6 OUTLINE 10.2.0.1 OUTLINE_LEAF 10.2.0.1 OVERFLOW_NOMOVE 9.0.0 PARALLEL_INDEX NO_PARALLEL_INDEX 8.1.0 PARTIAL_JOIN NO_PARTIAL_JOIN 12.1.0.1 PARTIAL_ROLLUP_PUSHDOWN NO_PARTIAL_ROLLUP_PUSHDOWN 12.1.0.1 PIV_GB 8.1.0 PIV_SSF 8.1.0 PLACE_DISTINCT NO_PLACE_DISTINCT 11.2.0.1 PLACE_GROUP_BY NO_PLACE_GROUP_BY 11.1.0.6 PQ_CONCURRENT_UNION NO_PQ_CONCURRENT_UNION 12.1.0.1 PQ_DISTRIBUTE 8.1.5 PQ_DISTRIBUTE_WINDOW 12.1.0.1 PQ_FILTER 12.1.0.1 PQ_MAP PQ_NOMAP 9.0.0 PQ_NOMAP PQ_MAP 9.0.0 PQ_REPLICATE NO_PQ_REPLICATE 12.1.0.1 PQ_SKEW NO_PQ_SKEW 12.1.0.1 PRECOMPUTE_SUBQUERY 10.2.0.1 PRESERVE_OID 10.2.0.1 PULL_PRED NO_PULL_PRED 10.2.0.1 PUSH_PRED NO_PUSH_PRED 8.1.0 PUSH_SUBQ NO_PUSH_SUBQ 8.1.0 PX_FAULT_TOLERANCE NO_PX_FAULT_TOLERANCE 12.1.0.1 PX_JOIN_FILTER NO_PX_JOIN_FILTER 10.2.0.1 QB_NAME 10.1.0.3 QUEUE_CURR 8.0.0 QUEUE_ROWP 8.0.0 RBO_OUTLINE 10.2.0.1 REF_CASCADE_CURSOR NO_REF_CASCADE 9.2.0 REMOTE_MAPPED 8.1.0 RESTORE_AS_INTERVALS 8.1.5 RESTRICT_ALL_REF_CONS 10.1.0.3 RESULT_CACHE NO_RESULT_CACHE 11.1.0.6 RETRY_ON_ROW_CHANGE 11.1.0.7 REWRITE NO_REWRITE 8.1.5 REWRITE_OR_ERROR 10.1.0.3 ROWID 8.0.0 RULE 8.1.0 SAVE_AS_INTERVALS 8.1.5 SCN_ASCENDING 8.1.5 SEMIJOIN NO_SEMIJOIN 9.0.0 SEMIJOIN_DRIVER 8.1.0 SEMI_TO_INNER NO_SEMI_TO_INNER 11.2.0.3 SET_TO_JOIN NO_SET_TO_JOIN 10.1.0.3 SHARED NO_PARALLEL 8.1.0 SKIP_EXT_OPTIMIZER 9.0.0 SKIP_UNQ_UNUSABLE_IDX 10.1.0.3 SQLLDR 9.0.0 STAR 8.1.0 STAR_TRANSFORMATION NO_STAR_TRANSFORMATION 8.1.0 STATEMENT_QUEUING NO_STATEMENT_QUEUING 11.2.0.1 STREAMS 10.1.0.3 SUBQUERY_PRUNING NO_SUBQUERY_PRUNING 11.1.0.6 SWAP_JOIN_INPUTS NO_SWAP_JOIN_INPUTS 8.1.0 SYS_DL_CURSOR 9.2.0 SYS_PARALLEL_TXN 8.1.6 SYS_RID_ORDER 9.2.0 TABLE_LOOKUP_BY_NL NO_TABLE_LOOKUP_BY_NL 11.2.0.2 TABLE_STATS 10.1.0.3 TIV_GB 8.1.0 TIV_SSF 8.1.0 TRACING 10.1.0.3 TRANSFORM_DISTINCT_AGG NO_TRANSFORM_DISTINCT_AGG 11.2.0.1 UNNEST NO_UNNEST 8.1.6 USE_ANTI 8.1.0 USE_CONCAT NO_EXPAND 8.1.0 USE_CUBE NO_USE_CUBE 12.1.0.1 USE_HASH NO_USE_HASH 8.1.0 USE_HASH_AGGREGATION NO_USE_HASH_AGGREGATION 10.2.0.1 USE_HASH_GBY_FOR_PUSHDOWN NO_USE_HASH_GBY_FOR_PUSHDOWN 11.2.0.2 USE_HIDDEN_PARTITIONS 12.1.0.1 USE_INVISIBLE_INDEXES NO_USE_INVISIBLE_INDEXES 11.1.0.6 USE_MERGE NO_USE_MERGE 8.1.0 USE_MERGE_CARTESIAN 11.1.0.6 USE_NL NO_USE_NL 8.1.0 USE_NL_WITH_INDEX NO_USE_NL 10.1.0.3 USE_SEMI 8.1.0 USE_TTT_FOR_GSETS 9.0.0 USE_VECTOR_AGGREGATION NO_USE_VECTOR_AGGREGATION 12.1.0.2 USE_WEAK_NAME_RESL 10.1.0.3 VECTOR_READ 10.1.0.3 VECTOR_READ_TRACE 10.1.0.3 VECTOR_TRANSFORM NO_VECTOR_TRANSFORM 12.1.0.2 VECTOR_TRANSFORM_DIMS NO_VECTOR_TRANSFORM_DIMS 12.1.0.2 VECTOR_TRANSFORM_FACT NO_VECTOR_TRANSFORM_FACT 12.1.0.2 WITH_PLSQL 12.1.0.1 XDB_FASTPATH_INSERT NO_XDB_FASTPATH_INSERT 11.2.0.2 X_DYN_PRUNE 10.1.0.3 XML_DML_RWT_STMT 11.1.0.6 XMLINDEX_REWRITE NO_XMLINDEX_REWRITE 11.1.0.6 XMLINDEX_REWRITE_IN_SELECT NO_XMLINDEX_REWRITE_IN_SELECT 11.1.0.6 XMLINDEX_SEL_IDX_TBL 11.2.0.1 ZONEMAP NO_ZONEMAP 12.1.0.1 332 linhas selecionadas. SQL>
SQL> SELECT NAME, INVERSE, VERSION FROM V$SQL_HINT WHERE VERSION = '12.1.0.1' ORDER BY 1; NAME INVERSE VERSION ---------------------------------------- ---------------------------------------- ------------------------- AUTO_REOPTIMIZE NO_AUTO_REOPTIMIZE 12.1.0.1 BATCH_TABLE_ACCESS_BY_ROWID NO_BATCH_TABLE_ACCESS_BY_ROWID 12.1.0.1 BITMAP_AND 12.1.0.1 CLUSTER_BY_ROWID NO_CLUSTER_BY_ROWID 12.1.0.1 CLUSTERING NO_CLUSTERING 12.1.0.1 CUBE_AJ 12.1.0.1 CUBE_SJ 12.1.0.1 DATA_SECURITY_REWRITE_LIMIT NO_DATA_SECURITY_REWRITE 12.1.0.1 DECORRELATE NO_DECORRELATE 12.1.0.1 GATHER_OPTIMIZER_STATISTICS NO_GATHER_OPTIMIZER_STATISTICS 12.1.0.1 NO_AUTO_REOPTIMIZE AUTO_REOPTIMIZE 12.1.0.1 NO_BATCH_TABLE_ACCESS_BY_ROWID BATCH_TABLE_ACCESS_BY_ROWID 12.1.0.1 NO_CLUSTER_BY_ROWID CLUSTER_BY_ROWID 12.1.0.1 NO_CLUSTERING CLUSTERING 12.1.0.1 NO_DATA_SECURITY_REWRITE DATA_SECURITY_REWRITE_LIMIT 12.1.0.1 NO_DECORRELATE DECORRELATE 12.1.0.1 NO_GATHER_OPTIMIZER_STATISTICS GATHER_OPTIMIZER_STATISTICS 12.1.0.1 NO_PARTIAL_JOIN PARTIAL_JOIN 12.1.0.1 NO_PARTIAL_ROLLUP_PUSHDOWN PARTIAL_ROLLUP_PUSHDOWN 12.1.0.1 NO_PQ_CONCURRENT_UNION PQ_CONCURRENT_UNION 12.1.0.1 NO_PQ_REPLICATE PQ_REPLICATE 12.1.0.1 NO_PQ_SKEW PQ_SKEW 12.1.0.1 NO_PX_FAULT_TOLERANCE PX_FAULT_TOLERANCE 12.1.0.1 NO_USE_CUBE USE_CUBE 12.1.0.1 NO_ZONEMAP ZONEMAP 12.1.0.1 PARTIAL_JOIN NO_PARTIAL_JOIN 12.1.0.1 PARTIAL_ROLLUP_PUSHDOWN NO_PARTIAL_ROLLUP_PUSHDOWN 12.1.0.1 PQ_CONCURRENT_UNION NO_PQ_CONCURRENT_UNION 12.1.0.1 PQ_DISTRIBUTE_WINDOW 12.1.0.1 PQ_FILTER 12.1.0.1 PQ_REPLICATE NO_PQ_REPLICATE 12.1.0.1 PQ_SKEW NO_PQ_SKEW 12.1.0.1 PX_FAULT_TOLERANCE NO_PX_FAULT_TOLERANCE 12.1.0.1 USE_CUBE NO_USE_CUBE 12.1.0.1 USE_HIDDEN_PARTITIONS 12.1.0.1 WITH_PLSQL 12.1.0.1 ZONEMAP NO_ZONEMAP 12.1.0.1 37 linhas selecionadas. SQL>
SQL> SELECT NAME, INVERSE, VERSION FROM V$SQL_HINT WHERE VERSION = '12.1.0.2' ORDER BY 1; NAME INVERSE VERSION ---------------------------------------- ---------------------------------------- ------------------------- ADAPTIVE_PLAN NO_ADAPTIVE_PLAN 12.1.0.2 ANSI_REARCH NO_ANSI_REARCH 12.1.0.2 ELIM_GROUPBY NO_ELIM_GROUPBY 12.1.0.2 INMEMORY NO_INMEMORY 12.1.0.2 INMEMORY_PRUNING NO_INMEMORY_PRUNING 12.1.0.2 NO_ADAPTIVE_PLAN ADAPTIVE_PLAN 12.1.0.2 NO_ANSI_REARCH ANSI_REARCH 12.1.0.2 NO_ELIM_GROUPBY ELIM_GROUPBY 12.1.0.2 NO_INMEMORY INMEMORY 12.1.0.2 NO_INMEMORY_PRUNING INMEMORY_PRUNING 12.1.0.2 NO_USE_VECTOR_AGGREGATION USE_VECTOR_AGGREGATION 12.1.0.2 NO_VECTOR_TRANSFORM VECTOR_TRANSFORM 12.1.0.2 NO_VECTOR_TRANSFORM_DIMS VECTOR_TRANSFORM_DIMS 12.1.0.2 NO_VECTOR_TRANSFORM_FACT VECTOR_TRANSFORM_FACT 12.1.0.2 USE_VECTOR_AGGREGATION NO_USE_VECTOR_AGGREGATION 12.1.0.2 VECTOR_TRANSFORM NO_VECTOR_TRANSFORM 12.1.0.2 VECTOR_TRANSFORM_DIMS NO_VECTOR_TRANSFORM_DIMS 12.1.0.2 VECTOR_TRANSFORM_FACT NO_VECTOR_TRANSFORM_FACT 12.1.0.2 18 linhas selecionadas. SQL>
Excelente Portilho,você falou de CBO ,me fez lembrar de RBO ,nem sei se isso ainda é utilizado ou foi aperfeiçoado nessas news features de coleta de estatísticas para otimização .Posso estar enganado,mas acho que no 9i utilizava essas regras.
O CBO foi lançado no Oracle 7.
O RBO foi considerado legado no 10g, mas existe até no 12c. Não deve ser utilizado.
Enquanto o RBO ainda foi suportado, a escolha entre ele e o CBO era feita através do parâmetro “OPTIMIZER_MODE”, ou pela HINT “RULE”.
No Oracle 9iR2, o valor padrão do parâmetro OPTIMIZER_MODE era CHOOSE, o que significa que se os objetos de um SQL tiverem estatísticas, será utilizado o CBO no modo ALL_ROWS. Outros fatores podem forçar a utilização do CBO, como a existência de uma HINT ou um objeto não suportado pelo RBO (IOT, Partition, etc.).
No 10g, o valor padrão do parâmetro OPTIMIZER_MODE passou a ser ALL_ROWS (CBO), e está assim até hoje, no 12c.
Fonte: Migrating to the Cost-Based Optimizer (Doc ID 222627.1).
Como sempre ótimo artigo Portilho!!!
A propósito… não sei se é resultado do 1º de Abril, mas li uma matéria ontem com o título:
“Oracle Corp. has announced today that partitioning option, along with diagnostic and tuning packages will be free with 12.2 EE”.
Será Verdade mesmo???
Obrigado Marcelo!
Aposto que esta matéria é brincadeira… só acreditaria com link da própria Oracle.
Estava procurando algumas coisas e acabei caindo aqui.
Realmente a v$sql_hint é muito interessante, porém já percebi a um tempo atrás, que alguns HINTs não são apresentadas nessa view, como a PARALLEL e AVOID_FULL (e algumas outras que não lembro agora). O motivo: não faço ideia 🙂
Parabéns pelo conteúdo Portilho, um grande abraço.
Flávio Soares
http://flaviosoares.com/pt
Fala aí Flávio!
Não tinha reparado na ausência de algumas HINTs. Obrigado pelo comentário!
Abraço !