SlideShare a Scribd company logo
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Harnessing	the	Power	of	OpCmizer	Hints	
Maria	Colgan	
Master	Product	Manager	
Oracle	Database	Server	Technologies	
September	2017
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Safe	Harbor	Statement	
The	following	is	intended	to	outline	our	general	product	direcCon.	It	is	intended	for	
informaCon	purposes	only,	and	may	not	be	incorporated	into	any	contract.	It	is	not	a	
commitment	to	deliver	any	material,	code,	or	funcConality,	and	should	not	be	relied	upon	
in	making	purchasing	decisions.	The	development,	release,	and	Cming	of	any	features	or	
funcConality	described	for	Oracle’s	products	remains	at	the	sole	discreCon	of	Oracle.	
2
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Harnessing	the	power	of	OpCmizer	hints	
•  This	session	will	not	instantly	make	you	an	OpCmizer	hint	expert!	
•  Adding	hints	won’t	magically	improve	every	query	you	encounter	
ExpectaAons	
	OpCmizer	hints	should	only	be	used	with	extreme	care
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Program	Agenda	
What	are	hints?	
How	to	use	OpCmizer	hints	
Useful	OpCmizer	hints	to	know	
Why	are	OpCmizer	hints	ignored?	
If	you	can	hint	it,	baseline	it	
Managing	an	exisCng	hinted	applicaCon	
1	
2	
3	
4	
5	
4	
6
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
What	are	hints?	
•  Hints	allow	you	to	influence	the	OpCmizer	when	it	has	to	choose	between	
several	possibiliCes	
•  A	hint	is	a	direcCve	that	will	be	followed	when	applicable	
•  Can	influence	everything	from	the	OpCmizer	mode	used	to	each	operaCon	
in	the	execuCon	
•  AutomaCcally	means	the	Cost	Based	OpCmizer	will	be	used	
– Only	excepCon	is	the	RULE	hint	but	it	must	be	used	alone		
Overview
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
What	are	hints?	
Example	-	direcAons	to	the	mall
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
What	are	hints?	
Example	-	direcAons	to	the	mall	but	don’t	take	6th	St
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
What	are	hints?	
Example	-	direcAons	to	the	mall	if	you	have	insider	informaAon
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
What	are	hints?	
•  Should	I	walk	or	drive	to	the	mall?	
– Best	plan	would	be	to	walk	
•  Should	I	go	up	4th,	5th,	or	6th	street?	
– Best	plan	would	be	to	go	up	4th	street	
•  Should	I	go	in	the	front	or	the	back	door	of	the	mall?	
– Best	plan	would	be	to	go	in	the	back	door	
•  Telling	me	the	cheapest	parking	is	at	5th	and	Mission	garage	is	irrelevant	
since	I	decided	to	walk	
Hints	only	evaluated	when	they	apply	to	a	decision	that	has	to	be	made
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Two	different	classes	of	hints	
	
Non-Optimizer Hints
	
HINTS
	
Optimizer Hints
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Not	all	hints	influence	the	OpCmizer	
•  The	hint	mechanism	is	not	exclusively	used	by	the	OpCmizer	
•  Several	other	funcConal	area	use	hints	too	
–  Direct	path	load	can	be	controlled	by	APPEND	hint	
–  Parallel	statement	queuing	can	be	controlled	by	STATEMENT_QUEUING	hint	
–  Data	management	in	buffer	cache	can	be	influenced	by	CACHE	hint	
–  What	SQL	statements	get	monitored	by	SQL	Monitor	can	be	controlled	by	MONITOR	hint	
–  Use	of		In-Memory	column	store	can	be	controlled	by	INMEMORY	hint	
Overview
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Checking	cardinality	esCmates	
SELECT /*+ GATHER_PLAN_STATISTICS*/ p.prod_name,
SUM(s.quantity_sold)
FROM Products p, Sales s
WHERE s.prod_id = p.prod_id
GROUP BY p.prod_name;
	
GATHER_PLAN_STATISTICS	hint
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Checking	cardinality	esCmates	
SELECT * FROM table(
DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALLSTATS LAST’));
	
GATHER_PLAN_STATISTICS	hint	
•  Compare	esCmated	rows	returned	for	each	operaCon	in	plan	to	actual	
rows	returned	
•  A-Time	allows	you	to	see	where	the	Cme	is	spent
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Checking	cardinality	esCmates	
SELECT /*+ MONITOR*/ CUST_LASTNAME, SUM(AMOUNT_SOLD)
FROM Customers c, Sales s
WHERE s.cust_id = c.cust_id …
	
MONITOR	hint	
•  Compare	esCmated	rows	
returned	for	each	operaCon	
in	plan	to	actual	rows	
returned	
•  Timeline	allows	you	to	see	
where	the	Cme	is	spent
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Two	different	classes	of	hints	
	
Non-Optimizer Hints
	
HINTS
	
Optimizer Hints
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Inside	the	Oracle	OpCmizer	
Query Transformation
Rewrite query text to allow it to be processed
more efficiently
Plan Generator
Multiple plans are generated for
each SQL, using different access
paths and join types. Each plan is
costed and plan with the lowest
cost is used.
Cost Estimator
Cost is an estimate of the amount of
CPU and the number of disk I/Os, used
to perform an operation
Statistics
Schema definitions
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Hints	influencing	Query	TransformaCons	
•  First	thing	the	OpCmizer	does	is	try	to	transform	(rewrite)	your	statement	
– The	goal	is	to	allows	addiConal	access	or	join	methods	and	join	orders	to	be	used	
•  Some	transformaCons	are	always	done	but	some	are	cost-based	
•  Hints	can	be	used	to	influence	the	transformaCons	the	OpCmizer	does	
•  NO_QUERY_TRANSFORMATION	
•  MERGE	
•  USE_CONCAT	
•  REWRITE	
	
Overview	
•  	STAR_TRANSFORMATION	
•  	UNNEST
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Hints	can	also	influence	all	aspects	of	a	plan	
	
	
				
•  Most	hints	have	corresponding	negaCve	hint	preceded	by	word		‘NO_’	
•  More	informaCon	on	hints	can	be	found	in	chapter	3	of	SQL	Reference	Guide	&	
chapter	19	of	the	SQL	Tuning	Guide	
Overview	
Hints	to	influence	cardinality	
DYNAMIC_SAMPLING	
CARDINALITY	 		
Hints	to	influence	join	methods	
USE_NL_WITH_INDEX	
USE_HASH	
Hints	to	influence	access	paths	
FULL	
INDEX	
Hints	to	influence	join	order	
LEADING	
ORDERED
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Hints	ClassificaCons	
•  Single-table	-	hints	that	are	specified	on	one	table	or	view	
– FULL	,	INDEX	or	USE_NL	
•  MulA-table	-	hint	that	can	be	specified	on	one	or	more	tables	or	views		
– LEADING	or	ORDERED	
•  Query	block	-	hints	that	operate	on	single	query	blocks	
– STAR_TRANSFORMATION	or	UNNEST	
•  Statement	–	hints	that	apply	to	the	enCre	SQL	statement	
– ALL_ROWS	or	OPTIMIZER_FEATURES_ENABLE	
Overview
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Program	Agenda	
What	are	hints?	
How	to	use	OpCmizer	hints	
Useful	OpCmizer	hints	to	know	
Why	are	OpCmizer	hints	ignored?	
If	you	can	hint	it,	baseline	it	
Managing	an	exisCng	hinted	applicaCon	
1	
2	
3	
4	
5	
20	
6
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
How	to	use	OpCmizer	hints	
•  Hints	are	inserted	in	a	SQL	statement	in	the	form	of	a	comment	with	an	
addiConal	+	sign	
•  They	go	immediately	aqer	the	keyword	(SELECT,	INSERT,	etc)	
SELECT /* This is a comment */ count(*) FROM Sales;
				
SELECT /*+ This is a hint */ count(*) FROM Sales;
	
Overview	
Hint	syntax	is	correct	but	it	is	not	a	valid	hint	so	is	treated	as	comment
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
How	to	use	OpCmizer	hints	
•  Hints	and	comments	can	be	combined	
•  But	best	pracCce	is	to	keep	comment	and	hints	in	different	blocks	
– Comments	can	be	put	anywhere	in	a	SQL	statement	not	just	aqer	keyword	
SELECT /*+ FULL(s) and a comment*/ count(*) FROM Sales s;
				
SELECT /*+ This_is_a_comment FULL(s) */ count(*) FROM Sales s;
Overview	
SELECT /*+ FULL(s)*/ count(*) FROM Sales s /* comment */;
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
How	to	use	OpCmizer	hints	
•  Which	one	of	the	following	hints	will	trigger	the	pk_emp	index	to	be	used	
in	this	query?	
			
SELECT /*+ index(scott.emp pk_emp)*/ * FROM emp e;

SELECT /*+ index(emp pk_emp)*/ * FROM emp e;

SELECT /*+ index(pk_emp)*/ * FROM emp e;
				
Correctly	idenAfying	the	object	in	the	hint	
None of them
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
How	to	use	OpCmizer	hints	
•  If	you	use	a	table	alias	in	the	query	than	you	must	specify	the	table	alias	
name	in	the	hint	
•  Otherwise	the	hint	is	not	valid	
SELECT /*+ index(e pk_emp)*/ * FROM emp e;

	
Correctly	idenAfying	the	object	in	the	hint
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
How	to	use	OpCmizer	hints	
SELECT /*+ FULL(e) FULL(d) */ e.last_name, e.dept_id
FROM employees e

WHERE e.dept_id in (SELECT d.dept_id 

FROM departments d

WHERE d.location_id=51);
Hints	only	apply	to	the	query	block	in	which	they	appear	
The	dept	table	only	appears	in	
the	sub-query,	which	is	treated	
as	separate	query	block.	Hint	has	
no	effect.
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
SELECT /*+ FULL(e) */ e.last_name, e.dept_id 

FROM employees e

WHERE e.dept_id in (SELECT /*+ FULL(d) */ d.dept_id 

FROM departments d

WHERE d.location_id=51);
How	to	use	OpCmizer	hints	
Hints	only	apply	to	the	query	block	in	which	they	appear		
	Only	excepCon	are	statement	level	hints	
The	hint	on	dept	now	has	an	
effect	as	it	appears	in	the	correct	
query	block,	the	sub-query
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
How	to	use	OpCmizer	hints	
•  Oracle	automaCcally	names	each	query	block	in	a	SQL	statement	
– sel$1,	ins$2,	upd$3,	del$4,	cri$5,	mrg$6,	set$7,	misc$8	
– Displayed	using	‘+alias’	format	parameter	in	DBMS_XPLAN	procedures	
•  Query	block	names	can	be	used	to	specify	which	block	a	hint	applies	to	
– /*+ FULL(@SEL$2 D) */
•  The	QB_NAME	hint	can	be	used	to	explicitly	labels	each	query	block		
– /*+ QB_NAME(my_name_for_ block) */
	
Query	block	names
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
SELECT /*+ FULL(e) FULL(@MY_SUBQ d) */ 

e.last_name, e.dept_id 

FROM employees e

WHERE e.dept_id in (SELECT /*+ QB_NAME(MY_SUBQ) */
d.dept_id 

FROM departments d

WHERE d.location_id=51);
How	to	use	OpCmizer	hints	
Query	block	names
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
How	to	use	OpCmizer	hints	
•  Any	valid	hint	will	be	used	
•  Can	check	if	a	hint	is	valid	in	hint	secCon	of	10053	trace	
How	do	I	know	if	my	hints	are	used	or	not?	
ERR	indicates	if	there	is	
an	error	with	hint	
USED	indicates	the	hint	was	used	during	the	
evaluaCon	of	the	part	of	the	plan	it	pertains	to		
Doesn’t	mean	the	final	plan	will	reflect	it
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
How	to	use	OpCmizer	hints	
Example	showing	how	hints	are	used	
•  SQL	Statement		
SELECT c.cust_name, sum (s.amount_sold)

FROM customers c, sales s

WHERE c.cust_id = s.cust_id
AND c.cust_city = ‘Los Angeles’
AND c.cust_province = ‘CA’
AND s.time_id = ‘09-SEP-17’
GROUP BY c.cust_name;
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
How	to	use	OpCmizer	hints	
•  Default plan is a hash join between sales and customers
Example	showing	how	hints	are	used	
	But	we	want	the	query	to	use	a	nested	loops	join
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
How	to	use	OpCmizer	hints	
•  Hinted SQL statement
SELECT /*+ USE_NL(s) */ 

c.cust_name, sum (s.amount_sold)

FROM customers c, sales s

WHERE c.cust_id = s.cust_id
AND c.cust_city = ‘Los Angeles’
AND c.cust_province = ‘CA’
AND s.time_id = ‘09-SEP-17’
GROUP BY c.cust_name;
Example	showing	how	hints	are	used
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
How	to	use	OpCmizer	hints	
•  Even	with	the	hint	we	sCll	get	a	hash	join	plan	
Example	showing	how	hints	are	used	
	Why	did	it	not	use	the	hint?
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
How	to	use	OpCmizer	hints	
•  Lets	look	in	the	10053	trace	file	
•  Hint	is	valid	and	was	used	
•  Why	did	it	not	change	the	plan?	
•  We	only	hinted	the	join	method	we	didn’t	hint	the	join	order	
•  Hint	only	valid	when	sales	is	on	right	side		
•  Hint	considered	ONLY	when	join	order	was	customers,	sales	
Example	showing	how	hints	are	used
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
How	to	use	OpCmizer	hints	
•  Hinted SQL statement with both join method and join order hints
SELECT /*+ ORDERED USE_NL(s) */ 

c.cust_name, sum (s.amount_sold)

FROM customers c, sales s

WHERE c.cust_id = s.cust_id
AND c.cust_city = ‘Los Angeles’
AND c.cust_province = ‘CA’
AND s.time_id = ‘09-SEP-17’
GROUP BY c.cust_name;
Example	showing	how	hints	are	used
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
•  Hinted	plan	
How	to	use	OpCmizer	hints	
Example	showing	how	hints	are	used
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
How	to	use	OpCmizer	hints	
•  ParCal	hints	can’t	guarantee	the	same	plan	every	Cme		
•  Only	way	to	guarantee	the	same	plan	every	Cme	is	with	a	full	outline	
•  A	full	outline	is	a	complete	set	of	hints	for	all	aspects	of	a	plan	
•  Full	outline	for	a	plan	can	be	displayed	using	‘+outline’	opCon	with	FORMAT
parameter	in	DBMS_XPLAN.DISPLAY_CURSOR		
SELECT * FROM
TABLE(DBMS_XPLAN.display_cursor(format=>’+outline'));
	
Guaranteeing	the	same	plan	every	Ame
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
How	to	use	OpCmizer	hints	
Guaranteeing	the	same	plan	every	Ame	
Full outline for the plan
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
How	to	use	OpCmizer	hints	
Guaranteeing	the	same	plan	every	Ame	
Cut and paste full
outline for the plan
Easier to maintain a full outline using SQL Plan Management
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Program	Agenda	
What	are	hints?	
How	to	use	OpCmizer	hints	
Useful	OpCmizer	hints	to	know	
Why	are	OpCmizer	hints	ignored?	
If	you	can	hint	it,	baseline	it	
Managing	an	exisCng	hinted	applicaCon	
1	
2	
3	
4	
5	
40	
6
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Changing	the	OpCmizer	mode	
•  The	following	hints	control	the	OpCmizer	mode	
– ALL_ROWS (default mode)
– FIRST_ROWS(n)
– RULE
•  FIRST_ROWS(n)	choose	plan	that	returns	the	first	n	rows	most	efficiently	
– Use	of	old	FIRST_ROWS	hint	is	not	recommended	
•  Not	fully	cost	based	
•  RULE	hint	reverts	back	to	Rule	Based	OpCmizer	(RBO)	
– Not	recommended	as	RBO	is	de-supported	and	severely	limits	plan	opCons
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Changing	the	OpCmizer	mode	
•  40%	of	the	rows	in	the	employee	table	have	department_id	=	50	
•  Default	plan	is	a	full	table	scan	
•  SELECT e.emp_id, e.last_name, e.salary 

FROM employees e

WHERE e.dept_id = 50;	
Default	OpAmizer	mode	example
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Changing	the	OpCmizer	mode	
SELECT /*+ FIRST_ROWS(10) */ 

e.emp_id, e.last_name, e.salary 

FROM employees e

WHERE e.dept_id = 50;	
	
	
	
	
				
•  Plan changed because the assumption is you are going to stop
fetching after first 10 rows
FRIST_ROWS(n)	hint	example
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Changing	the	OpCmizer	mode	
•  RULE	hint	specifies	that	the	Rule	Based	OpCmizer	(RBO)	be	used	
•  The	RULE	hint	is	not	applicable	if		
– Other	hints	are	specified	in	the	stmt		
– One	or	more	parCConed	tables	are	used	
– One	or	more	IOTs	are	used	
– One	or	more	Materialized	views	exist	
– A	SAMPLE	clauses	is	specified	
– A	spreadsheet	clause	is	specified	
RULE	hint		
– Parallel	execuCon	is	used		
– Grouping	sets	are	used		
– Group	outer-join	is	used		
– A	create	table	with	a	parallel	clause		
– A	leq	or	full	outer	join	(ANSI)	is	specified		
– Flashback	cursor	(AS	OF)	is	used	
– ……….
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Changing	the	OpCmizer	mode	
•  RULE	hint	ignored	when	parCConed	table	is	used	
•  SELECT /*+ RULE */ count(*)

FROM sales s;	
Rule	hint		
RULE hint is ignored because SALES
is a partitioned table therefore CBO is
used
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Changing	the	OpCmizer	mode	
•  RULE	hint	prevents	bitmap	index	being	used	and	triggers	full	scan	
•  SELECT /*+ RULE */ count(*)

FROM non_partitioned_sales s;
RULE	hint
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Changing	iniCalizaCon	parameter	for	a	query	
•  Allows	init.ora	OpCmizer	parameters	to	be	changed	for	a	specific	query	
•  Useful	way	to	prevent	sewng	non-default	parameter	value	system-wide	
•  Only	the	following	OpCmizer	influencing	init.ora	parameters	can	be	set:	
OPT_PARAM	hint	
	
-  OPTIMIZER_DYNAMIC_SAMPLING		
-  OPTIMIZER_INDEX_CACHING	
-  OPTIMIZER_INDEX_COST_ADJ	
-  OPTIMIZER_USE_PENDING_STATISTICS	
-  OPTIMIZER_USE_INVISIBLE_INDEXES	
-  OPTIMIZER_SECURE_VIEW_MERGING	
-  OpCmizer	related	underscore	parameters		
-  STAR_TRANSFORMATION_ENABLED	
-  PARALLEL_DEGREE_POLICY	
-  PARALLEL_DEGREE_LIMIT	
-  OPTIMIZER_ADAPTIVE_PLANS	
-  OPTIMIZER_ADAPTIVE_REPORTING_ONLY	
-  OPTIMIZER_ADAPTIVE_STATISTICS	
-  OPTIMIZER_INMEMORY_AWARE
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Changing	iniCalizaCon	parameter	for	a	query	
OPT_PARAM	hint	example	
	
Cardinality under-estimated due
to complex expression
Extended statistics would help
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Changing	iniCalizaCon	parameter	for	a	query	
OPT_PARAM	hint	example	
	
Create extended statistics & re-
gather statistics as pending
statistics
OPT_PARAM hint enables
pending statistics for only this
statement
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Changing	OpCmizer	features	enable		
•  OPTIMIZER_FEATURES_ENABLE	parameter	allows	you	to	switch	
between	opCmizer	versions	
•  Sewng	it	to	previous	database	version	reverts	the	OpCmizer	to	that	version	
– Disables	any	funcConality	that	was	not	present	in	that	version	
•  Easy	way	to	work	around	unexpected	behavior	in	a	new	release	
•  Hint	allows	you	to	revert	the	OpCmizer	for	just	a	single	statement		
This	parameter	gets	it	own	hint
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Changing	OpCmizer	features	enable		
Example
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Changing	OpCmizer	features	enable		
Example	
Hash GROUP BY introduced in
10g not an option for 9.2
Optimizer, so traditional sort
based GROUP BY selected
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Program	Agenda	
What	are	hints?	
How	to	use	OpCmizer	hints	
Useful	OpCmizer	hints	to	know	
Why	are	OpCmizer	hints	ignored?	
If	you	can	hint	it,	baseline	it	
Managing	an	exisCng	hinted	applicaCon	
1	
2	
3	
4	
5	
53	
6
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Why	are	OpCmizer	hints	ignored?	
•  Which	one	of	the	following	hints	will	trigger	the	pk_emp	index	to	be	used	
in	this	query?	
SELECT /*+ IND(e pk_emp)*/ * FROM employees e;

SELECT /*+ INDEX(e emp_pk)*/ * FROM employees e;
SELECT /*+ INDEX(e pk_emp)*/ * FROM employees e;
Syntax	and	Spelling
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Why	are	OpCmizer	hints	ignored?	
•  Specifying	an	index	hint	on	a	table	with	no	indexes	
		
SELECT /*+ INDEX(p) */ Count(*)
FROM my_promotions p
WHERE promo_category = 'TV'
AND promo_begin_date = '05-OCT-17’;
Invalid	hint	
Invalid hint because no indexes
exist on the table
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Why	are	OpCmizer	hints	ignored?	
•  Specifying	a	hash	join	hint	for	non-equality	join	
			
SELECT /*+ USE_HASH(e s) */ e.first_name, e.last_name
FROM employees e, salary_grade s
WHERE e.salary BETWEEN s.low_sal AND s.high_sal; 	
	
Illegal	hint	
Illegal hint because a hash join
can’t be used for a non-equality
join predicate
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Why	are	OpCmizer	hints	ignored?	
•  Specifying	a	parallel	hint	for	an	index	range	scan	
SELECT /*+ index(e empno_pk_ind) parallel(e 8) */
e.empno, e.name
FROM employees e
WHERE e.empno < 7700;
	
Invalid	hint	combinaAons	
Invalid hint combination
because an index range scan
can’t be parallelized on non-
partitioned table
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Why	are	OpCmizer	hints	ignored?	
•  If	two	hints	contradict	each	other,	they	will	both	be	ignored	
SELECT /*+ full(e) index(e empno_fk_ind) */
e.empno, e.name
FROM employees e
WHERE e.empno < 7700;
	
Invalid	hint	combinaAons	
Conflicting hints you can’t do a
full table scan and index lookup
on same table
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Why	are	OpCmizer	hints	ignored?	
•  Ordered	hint	dictates	the	join	order	as	the	order	of	tables	in	FROM	clause	
SELECT /*+ ordered */ e1.last_name, j.job_title, e1.salary, v.avg_salary
FROM employees e1, jobs j
( SELECT e2.dept_id, avg(e2.salary) avg_salary
FROM employees e2, departments d
WHERE d.location=1700 AND e2.depet_id=d.dept_id
GROUP BY e2.dept_id)v
WHERE e1.job_id = j.job_id
AND e1.dept_id = v.dept_id
AND e1.salary > a.avg_salary
ORDER BY e1.last_name;	
Hint	becomes	invalid	due	to	transformaAon	
Expected join order
1.  Employees
2.  Jobs
3.  V
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Why	are	OpCmizer	hints	ignored?	
•  Actual	join	order	used		
Hint	becomes	invalid	due	to	transformaAon	
1
3
2
View merging occurred
Order of tables in FROM clause
(e1,j,v) lost
Optimizer picks join order with
lowest cost
4
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Why	are	OpCmizer	hints	ignored?	
•  NO_MERGE	hint	prevents	transformaCon	from	taking	place	
SELECT /*+ no_merge(v) ordered */
e1.last_name, j.job_title, e1.salary, v.avg_salary
FROM employees e1, jobs j
( SELECT e2.dept_id, avg(e2.salary) avg_salary
FROM employees e2, departments d
WHERE d.location=1700 AND e2.depet_id=d.dept_id
GROUP BY e2.dept_id)v
WHERE e1.job_id = j.job_id
AND e1.dept_id = v.dept_id
AND e1.salary > a.avg_salary
ORDER BY e1.last_name;	
Hint	becomes	invalid	due	to	transformaAon	
Preserves FROM clause order
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Why	are	OpCmizer	hints	ignored?	
•  Actual	join	order	used		
Hint	becomes	invalid	due	to	transformaAon	
Inline	View	v	
1
2
3
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Program	Agenda	
What	are	hints?	
How	to	use	OpCmizer	hints	
Useful	OpCmizer	hints	to	know	
Why	are	OpCmizer	hints	ignored?	
If	you	can	hint	it,	baseline	it	
Managing	an	exisCng	hinted	applicaCon	
1	
2	
3	
4	
5	
63	
6
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
If	you	can	hint	it,	baseline	it	
•  It	is	not	always	possible	to	add	hints	to	third	party	applicaCons	
•  Hints	can	be	extremely	difficult	to	manage	over	Cme	
•  Once	added	never	removed	
AlternaAve	approach	to	hints	
Solution
•  Use	SQL	Plan	Management	(SPM)	
•  Influence	the	execuCon	plan	without	adding	hints	directly	to	queries	
•  SPM	available	in	Enterprise	EdiCon*,	no	addiConal	opCons	required
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Plan	history	
SQL	Plan	Management		
If	you	can	hint	it,	baseline	it	
Users	
HJ
HJ
GB
Plan	baseline	
Parse
HJ
HJ
GB
Execute	
Plan	Acceptable	
NOTE::	Actual	execuCon	plans	stored	in	
SQL	plan	baseline	in	Oracle	Database	12c
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Plan	history	
SQL	Plan	Management		
If	you	can	hint	it,	baseline	it	
Users	
HJ
HJ
GB
Plan	baseline	
Parse
NL
NL
GB
NL
NL
GB
NOTE::	You	do	not	need	to	be	in	auto-
capture	mode	to	have	a	new	plan	added	
to	an	exisCng	SQL	plan	baseline	
AddiConal	fields	such	as	fetches,	row	
processed	etc.	are	not	populated	because	
new	plan	has	never	executed
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Plan	history	
SQL	Plan	Management		
If	you	can	hint	it,	baseline	it	
Users	
HJ
HJ
GB
Plan	baseline	
Parse
NL
NL
GB
HJ
HJ
GB
Execute	
Plan	Acceptable
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Influence	execuCon	plan	without	adding	hints	
•  Simple	two	table	join	between	the	SALES	and	PRODUCTS	tables	
	
SELECT p.prod_name,SUM(s.amount_sold)
FROM products p, sales s
WHERE p.prod_id = s.prod_id
AND p.supplier_id = :sup_id
GROUP BY p.prod_name; 	
Example	Overview	
	
Current	Plan	
GROUP	BY	
HASH JOIN	
TABLE	ACCESS	
SALES	
TABLE	ACCESS	
PRODUCTS
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Influence	execuCon	plan	without	adding	hints	
•  Simple	two	table	join	between	the	SALES	and	PRODUCTS	tables		
	
SELECT p.prod_name,SUM(s.amount_sold)
FROM products p, sales s
WHERE p.prod_id = s.prod_id
AND p.supplier_id = :sup_id
GROUP BY p.prod_name; 	
Example	Overview	
	
GROUP	BY	
HASH JOIN	
INDEX	RANGE	SCAN	
PROD_SUPP_ID_INDX	
TABLE	ACCESS	
SALES	
Desired	Plan
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Influence	execuCon	plan	without	adding	hints	
SELECT p.prod_name,SUM(s.amount_sold)
FROM products p, sales s
WHERE p.prod_id = s.prod_id
AND p.supplier_id = :sup_id
GROUP BY p.prod_name;	
PROD_NAME SUM(S.AMOUNT_SOLD)
--------------------------------------- ------------------
Baseball trouser Kids 91
Short Sleeve Rayon Printed Shirt $8.99 32
	
Step	1.	Execute	the	non-hinted	SQL	statement
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Influence	execuCon	plan	without	adding	hints	
Default	plan	uses	full	table	scans	followed	by	a	hash	join
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Influence	execuCon	plan	without	adding	hints	
SELECT sql_id, 
       sql_fulltext 
FROM   v$sql 
WHERE  sql_text LIKE 'SELECT p.prod_name, %';
SQL_ID         SQL_FULLTEXT 
-------------  ---------------------------------------- 
akuntdurat7yr  SELECT p.prod_name, SUM(s.amount_sold) 
       FROM   products p , sales s 
              WHERE  p.prod
Step	2.	Find	the	SQL_ID	for	the	non-hinted	statement	in	V$SQL
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
VARIABLE cnt NUMBER
EXECUTE :cnt := dbms_spm.load_plans_from_cursor_cache(sql_id=>'akuntdurat7yr');
PL/SQL PROCEDURE successfully completed.
SELECT sql_handle, sql_text, plan_name, enabled 
FROM   dba_sql_plan_baselines 
WHERE  sql_text LIKE 'SELECT p.prod_name, %';
SQL_HANDLE SQL_TEXT PLAN_NAME ENA
------------------ --------------------------------------- -------------------- ---
SQL_8f876d84821398cf SELECT p.prod_name, sum(s.amount_sold) SQL_PLAN_8z1vdhk1176 YES
FROM products p , sales s g42949306

Influence	execuCon	plan	without	adding	hints	
Step	3.	Create	a	SQL	plan	baseline	for	the	non-hinted	SQL	statement
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Influence	execuCon	plan	without	adding	hints	
Step	4.	Disable	plan	in	SQL	plan	baseline	for	the	non-hinted	SQL	statement		
	
EXECUTE :cnt := dbms_spm.alter_sql_plan_baseline(sql_handle=>'SQL_8f876d84821398cf’,-
plan_name=>'SQL_PLAN_8z1vdhk11766g42949306',-
attribute_name => 'enabled’, -
attribute_value => 'NO');
PL/SQL PROCEDURE successfully completed.
SELECT sql_handle, sql_text, plan_name, enabled 
FROM   dba_sql_plan_baselines 
WHERE  sql_text LIKE 'SELECT p.prod_name, %';
SQL_HANDLE SQL_TEXT PLAN_NAME ENA
------------------ ---------------------------------------- --------------------- ---
SQL_8f876d84821398cf SELECT p.prod_name, sum(s.amount_sold) SQL_PLAN_8z1vdhk1176 NO

FROM products p , sales s g42949306

Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Influence	execuCon	plan	without	adding	hints	
SELECT /*+ index(p) */ p.prod_name,SUM(s.amount_sold) 
FROM   products p, sales s 
WHERE  p.prod_id = s.prod_id 
AND  p.supplier_id = :sup_id 
GROUP  BY p.prod_name;
 
PROD_NAME SUM(S.AMOUNT_SOLD)
--------------------------------------- ------------------
Baseball trouser Kids 91
Short Sleeve Rayon Printed Shirt $8.99 32
Step	5.	Manually	modify	the	SQL	statement	to	use	the	hint(s)	&	execute	it
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Influence	execuCon	plan	without	adding	hints	
SELECT sql_id, plan_hash_value,  sql_fulltext 
FROM   v$sql 
WHERE  sql_text LIKE 'SELECT /*+ index(p) */ p.prod_name, %';
SQL_ID       PLAN_HASH_VLAUE SQL_FULLTEXT 
------------- --------------- -----------------------------------
avph0nnq5pfc2  2567686925      SELECT /*+ index(p) */ p.prod_name, 
        SUM( s.amount_sold) FROM products p, 
                               sales
Step	6.	Find	SQL_ID	&	PLAN_HASH_VALUE	for	hinted	SQL	stmt	in	V$SQL
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Influence	execuCon	plan	without	adding	hints	
VARIABLE cnt NUMBER
EXECUTE :cnt := dbms_spm.load_plans_from_cursor_cache(sql_id=>'avph0nnq5pfc2’,-
plan_hash_value=>'2567686925', -

sql_handle=>'SQL_8f876d84821398cf‘);
PL/SQL PROCEDURE successfully completed.
Step	7.	Associate	hinted	plan	with	original	SQL	stmt’s	SQL	HANDLE	
		
SQL_ID & PLAN_HASH_VALUE belong to hinted
statement
SQL_HANDLE is for the non-hinted statement
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Influence	execuCon	plan	without	adding	hints	
SELECT sql_handle, sql_text, plan_name, enabled 
FROM   dba_sql_plan_baselines 
WHERE  sql_text LIKE 'SELECT p.prod_name, %';
SQL_HANDLE SQL_TEXT PLAN_NAME ENA
------------------ --------------------------------------- -------------------- ---
SQL_8f876d84821398cf SELECT p.prod_name, sum(s.amount_sold) SQL_PLAN_8z1vdhk1176 NO
FROM products p , sales s g42949306



SQL_8f876d84821398cf SELECT p.prod_name, sum(s.amount_sold) SQL_PLAN_8z1vdhk1176 YES
FROM products p , sales s 6ge1c67f67

Step	8.	Confirm	SQL	statement	has	two	plans	in	its	SQL	plan	baseline		
	
Hinted plan is the only enabled
plan for non-hinted SQL statement
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Influence	execuCon	plan	without	adding	hints	
Step	9.	Confirm	hinted	plan	is	being	used	
	
Non-hinted SQL text but it
is using the plan hash
value for the hinted
statement
Note section also confirms
SQL plan baseline used for
statement
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Program	Agenda	
What	are	hints?	
How	to	use	OpCmizer	hints	
Useful	OpCmizer	hints	to	know	
Why	are	OpCmizer	hints	ignored?	
If	you	can	hint	it,	baseline	it	
Managing	an	exisCng	hinted	applicaCon	
1	
2	
3	
4	
5	
80	
6
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Managing	an	exisCng	hinted	applicaCon	
SQL	Performance	Analyzer		
Compare	SQL	
performance	
Establish	baseline	 Set	underscore	parameter	
_OPTIMIZER_IGNORE_HINTS	
1	 2	
3	
Execute	workload	
	
Execute	workload
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Managing	an	exisCng	hinted	applicaCon
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Summary	
•  OpCmizer	hints	should	only	be	used	with	extreme	cauCon	
– Exhaust	all	other	tuning	mechanisms	first	
•  StaCsCcs,	SQL	Tuning	Advisor,	etc	
•  To	guarantee	the	same	plan	every	Cme	supply	a	complete	outline	
– Easier	to	do	this	with	SQL	Plan	Management	
•  Hints	live	forever!	
– Use	_OPTIMIZER_IGNORE_HINTS	parameter	to	test	query	performance	without	hints
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|	
Join	the	ConversaAon		
84	
Related	White	Papers	
•  What	to	expect	from	the	OpCmizer	in	12c	
•  What	to	expect	from	the	OpCmizer	in	11g	
	
h|ps://twi|er.com/SQLMaria	
h|ps://blogs.oracle.com/opCmizer/	
h|ps://sqlmaria.com	
h|ps://www.facebook.com/SQLMaria

More Related Content

PPTX
Explain the explain_plan
PDF
Oracle Database Performance Tuning Advanced Features and Best Practices for DBAs
PPTX
What’s New in Oracle Database 19c - Part 1
PDF
Oracle db performance tuning
PDF
Oracle RAC 19c: Best Practices and Secret Internals
PPTX
Oracle sql high performance tuning
PDF
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
PPTX
What to Expect From Oracle database 19c
Explain the explain_plan
Oracle Database Performance Tuning Advanced Features and Best Practices for DBAs
What’s New in Oracle Database 19c - Part 1
Oracle db performance tuning
Oracle RAC 19c: Best Practices and Secret Internals
Oracle sql high performance tuning
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
What to Expect From Oracle database 19c

What's hot (20)

PDF
Oracle RAC - New Generation
PDF
Migration to Oracle Multitenant
PDF
Troubleshooting tips and tricks for Oracle Database Oct 2020
PDF
Oracle Security Presentation
PPTX
AWR and ASH Deep Dive
PDF
Oracle RAC 19c and Later - Best Practices #OOWLON
DOC
Analyzing awr report
PDF
Troubleshooting Complex Oracle Performance Problems with Tanel Poder
PPTX
Part5 sql tune
PDF
The Top 5 Reasons to Deploy Your Applications on Oracle RAC
PPTX
Why oracle data guard new features in oracle 18c, 19c
PDF
PostgreSQL: Advanced indexing
PDF
Oracle Performance Tuning Fundamentals
PDF
Oracle Database performance tuning using oratop
PDF
Oracle 12c PDB insights
PDF
MAA Best Practices for Oracle Database 19c
PDF
Advanced RAC troubleshooting: Network
PDF
Awr + 12c performance tuning
PDF
Best Practices for the Most Impactful Oracle Database 18c and 19c Features
PPTX
Five_Things_You_Might_Not_Know_About_Oracle_Database_v2.pptx
Oracle RAC - New Generation
Migration to Oracle Multitenant
Troubleshooting tips and tricks for Oracle Database Oct 2020
Oracle Security Presentation
AWR and ASH Deep Dive
Oracle RAC 19c and Later - Best Practices #OOWLON
Analyzing awr report
Troubleshooting Complex Oracle Performance Problems with Tanel Poder
Part5 sql tune
The Top 5 Reasons to Deploy Your Applications on Oracle RAC
Why oracle data guard new features in oracle 18c, 19c
PostgreSQL: Advanced indexing
Oracle Performance Tuning Fundamentals
Oracle Database performance tuning using oratop
Oracle 12c PDB insights
MAA Best Practices for Oracle Database 19c
Advanced RAC troubleshooting: Network
Awr + 12c performance tuning
Best Practices for the Most Impactful Oracle Database 18c and 19c Features
Five_Things_You_Might_Not_Know_About_Oracle_Database_v2.pptx
Ad

Similar to Harnessing the Power of Optimizer Hints (20)

PDF
Why MySQL High Availability Matters
PDF
MySQL Shell - The DevOps Tool for MySQL
PDF
Troubleshooting tldr
PDF
MySQL Enterprise Monitor 3
PDF
REST in an Async World
PDF
MySQL Enterprise Edition
PDF
NZOUG-GroundBreakers-2018 - Troubleshooting and Diagnosing 18c RAC
PDF
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...
PDF
MySQL Group Replication
PDF
AUSOUG - Applied Machine Learning for Database Autonomous Health
PPTX
Achieving High Performance DevOps: A Roadmap for Managers and Decision Makers
PDF
MOUG17 Keynote: What's New from Oracle Database Development
PDF
Migrating your infrastructure to OpenStack - Avi Miller, Oracle
PDF
Democratizing Serverless—The Open Source Fn Project - Serverless Summit
PDF
Trivadis TechEvent 2017 Leveraging the Oracle Cloud by Kris Bhanushali tech_e...
PDF
Application Development with Oracle Database
PDF
Oow MySQL Whats new in security overview sept 2017 v1
PDF
Building Modern Applications Using APIs, Microservices and Chatbots
PDF
TDC2018 | Trilha Java - The quest to the Language Graal: One VM to rule them...
PPTX
Sales Execution in the Era of Digital Transformation - Amit Manghani, Oracle
Why MySQL High Availability Matters
MySQL Shell - The DevOps Tool for MySQL
Troubleshooting tldr
MySQL Enterprise Monitor 3
REST in an Async World
MySQL Enterprise Edition
NZOUG-GroundBreakers-2018 - Troubleshooting and Diagnosing 18c RAC
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...
MySQL Group Replication
AUSOUG - Applied Machine Learning for Database Autonomous Health
Achieving High Performance DevOps: A Roadmap for Managers and Decision Makers
MOUG17 Keynote: What's New from Oracle Database Development
Migrating your infrastructure to OpenStack - Avi Miller, Oracle
Democratizing Serverless—The Open Source Fn Project - Serverless Summit
Trivadis TechEvent 2017 Leveraging the Oracle Cloud by Kris Bhanushali tech_e...
Application Development with Oracle Database
Oow MySQL Whats new in security overview sept 2017 v1
Building Modern Applications Using APIs, Microservices and Chatbots
TDC2018 | Trilha Java - The quest to the Language Graal: One VM to rule them...
Sales Execution in the Era of Digital Transformation - Amit Manghani, Oracle
Ad

More from Maria Colgan (15)

PPTX
Part4 Influencing Execution Plans with Optimizer Hints
PPTX
Part3 Explain the Explain Plan
PPTX
Part2 Best Practices for Managing Optimizer Statistics
PPTX
Part1 of SQL Tuning Workshop - Understanding the Optimizer
PPTX
Ground Breakers Romania: Oracle Autonomous Database
PPTX
Ground Breakers Romania: Explain the explain_plan
PPTX
Beginners guide to_optimizer
PPTX
The Changing Role of a DBA in an Autonomous World
PPTX
Oracle Database in-Memory Overivew
PPTX
Useful PL/SQL Supplied Packages
PPTX
JSON and the Oracle Database
PPTX
Five Tips to Get the Most Out of Your Indexing
PPTX
Oracle optimizer bootcamp
PPTX
What_to_expect_from_oracle_database_12c
PPTX
Oracle database 12c_and_DevOps
Part4 Influencing Execution Plans with Optimizer Hints
Part3 Explain the Explain Plan
Part2 Best Practices for Managing Optimizer Statistics
Part1 of SQL Tuning Workshop - Understanding the Optimizer
Ground Breakers Romania: Oracle Autonomous Database
Ground Breakers Romania: Explain the explain_plan
Beginners guide to_optimizer
The Changing Role of a DBA in an Autonomous World
Oracle Database in-Memory Overivew
Useful PL/SQL Supplied Packages
JSON and the Oracle Database
Five Tips to Get the Most Out of Your Indexing
Oracle optimizer bootcamp
What_to_expect_from_oracle_database_12c
Oracle database 12c_and_DevOps

Recently uploaded (20)

PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
Cloud computing and distributed systems.
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
cuic standard and advanced reporting.pdf
PPT
Teaching material agriculture food technology
PDF
Machine learning based COVID-19 study performance prediction
PDF
KodekX | Application Modernization Development
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
Big Data Technologies - Introduction.pptx
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Encapsulation_ Review paper, used for researhc scholars
Spectral efficient network and resource selection model in 5G networks
Cloud computing and distributed systems.
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Unlocking AI with Model Context Protocol (MCP)
Building Integrated photovoltaic BIPV_UPV.pdf
cuic standard and advanced reporting.pdf
Teaching material agriculture food technology
Machine learning based COVID-19 study performance prediction
KodekX | Application Modernization Development
Mobile App Security Testing_ A Comprehensive Guide.pdf
Big Data Technologies - Introduction.pptx
NewMind AI Weekly Chronicles - August'25 Week I
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Network Security Unit 5.pdf for BCA BBA.
20250228 LYD VKU AI Blended-Learning.pptx
Encapsulation_ Review paper, used for researhc scholars

Harnessing the Power of Optimizer Hints