Oracle Tuning – SQL: Estabilidade de Plano – Encontrando HINTs

tgsql_vm_007

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>

6 comments

  1. 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.

    1. 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).

  2. 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???

    1. Obrigado Marcelo!
      Aposto que esta matéria é brincadeira… só acreditaria com link da própria Oracle.

  3. 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

    1. Fala aí Flávio!
      Não tinha reparado na ausência de algumas HINTs. Obrigado pelo comentário!
      Abraço !

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.