SlideShare ist ein Scribd-Unternehmen logo
1 von 6
Downloaden Sie, um offline zu lesen
10 Tipstechniques
SOUG Newsletter 5/2014 – Sonderausgabe
12c SQL Plan Directives
Franck Pachot, dbi services
Sometimes the optimizer does a bad choice
because of misestimated cardinalities. 11g has
brought the ability to recognize those errors by the
mean of cardinality feedback. That was reactive
optimization. 12c has introduced a new optimizer
component to make this feedback more proactive for
future queries. Let me show you SQL Plan Directives
lifecycle on a simple example.
Missing statistics
You have collected system statistics that are relevant for
your hardware. You have dictionary statistics that are accu-
rate. And you have a job that collects object statistics so that
they are always fresh. How can you have missing statistics?
Let’s see an example.
I create the following table:
SQL create table DEMO_TABLE as select mod(rownum,2) a,mod(rownum,2)
b,mod(rownum,2) c,mod(rownum,2) d from dual connect by level =1000;
Table created.
SQL
SQL select * from DEMO_TABLE where rownum=5;
A B C D
---------- ---------- ---------- ----------
1 1 1 1
0 0 0 0
1 1 1 1
0 0 0 0
1 1 1 1
You see the pattern: all columns are either 0 or 1
I have statistics on them:
SQL select column_name,num_distinct from user_tab_col_statistics where
table_name='DEMO_TABLE';
COLUMN_NAM NUM_DISTINCT
---------- ------------
A 2
B 2
C 2
D 2
And statistics are right: each column has two distinct values.
Then let’s run the following query:
SQL alter session set statistics_level=all;
Session altered.
SQL select count(*) count1 from DEMO_TABLE where a=0 and b=0 and c=0
and d=0;
COUNT1
--------------------
500
I’ve 1000 rows. Half of them have all 0 and half of them
have all 1.
This is a simple query but I want to check if the optimizer
has estimated the cardinalities correctly.
11Tipstechniques11
SOUG Newsletter 5/2014 – Sonderausgabe
And the execution plan:
SQL select * from table(dbms_xplan.display_cursor(null,null,'iostats
last'));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------
SQL_ID 86z3n2y70wavc, child number 0
-------------------------------------
select count(*) count1 from DEMO_TABLE where a=0 and b=0 and c=0 and d=0
Plan hash value: 1839825454
--------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows |
--------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 1 |
| 1 | SORT AGGREGATE | | 1 | 1 | 1 |
|* 2 | TABLE ACCESS FULL| DEMO_TABLE | 1 | 63 | 500 |
--------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter((A=0 AND “B=0 AND “C=0 AND “D=0))
Here you see the problem: the query returns 500 rows but
the optimizer estimated them to 63. That can be a problem in
a larger query where the number of rows returned will deter-
mine the join method.
Where the problem comes from?
■	 We know that half of the rows (so 500 here) have all
values equal to 0
■	 The optimizer only know about each column
Then, the CBO estimates ’A=0’ to return ½ of the rows,
then adding ’B=0’ returns ½ of the rows etc. So the optimizer
estimate the whole combination of ’A=0 and B=0 and C=0
and D=0’ to return 1/16th
of the rows, which is 63.
Solutions in 11g
What are the solutions for that? In 11g we have two solu-
tions:
■	 Extended statistics: we calculate statistics on the group
of columns (A,B,C,D) so that the optimizer is aware of
the correlation
■	 Dynamic sampling: when dynamic sampling level is at
least 4 then complex where clauses like that one will
trigger dynamic sampling. And in any sample, the
optimizer will see that the predicate returns half of the
rows.
12c does not add new solutions for that (except Adaptive
Plan that will lower the bad consequence of misestimating)
but will bring automation to those two alternatives, in an
adaptive way. Let’s see Automatic Reoptimization and SQL
Plan Directives.
Automatic Reoptimization
If I check the new ’IS_REOPTIMIZABLE’ column from
V$SQL, I see that it is flagged to ’Y’ for that query:
SQL select sql_id,child_number,is_reoptimizable from v$sql where sql_
id='86z3n2y70wavc';
SQL_ID CHILD_NUMBER I
------------- -------------------- -
86z3n2y70wavc 0 Y
During execution, oracle has seen that the actual number
of rows (the A-Rows above) is very different from the esti-
mated ones (E-Rows). Then the statement is flagged for re-
optimization: the next execution will hard parse again instead
of sharing the cursor which is known to have been built on
bad estimations.
And I can have more information with the ’report’ format from
dbms_xplan:
SQL select * from table(dbms_xplan.display_cursor('86z3n2y70wavc',null,'
report'));
I don’t reproduce the first part which is the same as the
one above, but the ’report’ format adds the following:
Reoptimized plan:
-----------------
This cursor is marked for automatic reoptimization. The plan that is
expected to be chosen on the next execution is displayed below.
Plan hash value: 1839825454
-------------------------------------------------
| Id	 |	Operation	 |	Name	 |	Rows |
------------------------------------------------
| 0	|	SELECT STATEMENT	 | |	 1	 |
| 1	|	SORT AGGREGATE	 | |	 1	 |
|* 2	|	TABLE ACCESS FULL	 |	DEMO_TABLE	|	500	 |
------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter(A=0 AND “B=0 AND “C=0 AND “D=0)
Not only I know that the statement will be reoptimized, but
I also have the future plan.
And you see that the estimations (Rows) are now accurate
because the optimizer has used the statistics from the pre­
vious execution (this comes from cardinality feedback).
12 Tipstechniques
SOUG Newsletter 5/2014 – Sonderausgabe
SQL Plan directive
So, the optimizer has seen that there were a cardinality
misestimate. That was reactive: the previous execution may
have been executed with a bad plan. But that knowledge can
help future query executions.
This is what SQL Plan Directives are: it stores persistently
this information to help future executions.
Persistent means that it is not only in memory, but stored
in the dictionary. So in order to see them, we have to flush
them:
SQL exec dbms_spd.flush_sql_plan_directive;
PL/SQL procedure successfully completed.
And we can see which information is stored in the dictionary:
SQL select directive_id,type,state,reason,created,last_modified,last_used,notes from dba_sql_plan_directives where
directive_id in(select directive_id from dba_sql_plan_dir_objects where owner='DEMO' );
DIRECTIVE_ID TYPE STATE REASON
-------------------- ---------------- ---------- ----------------------
NOTES
-----------------------------------------------------------------------
1350980939868665098 DYNAMIC_SAMPLING USABLE SINGLE TABLE CARDINALITY MISESTIMATE
spd_note
internal_stateNEW/internal_state
redundantNO/redundant
spd_text{EC(DEMO.DEMO_TABLE)[A, B, C, D]}/spd_text
/spd_note
A new directive has been created.
For the moment (12.1) directives are only created for opti-
mizer bad decision for a ’CARDINALITY MISESTIMATE’, the
type being type ’DYNAMIC_SAMPLING’. The misestimate
can concern several kind of operations: single table access,
join, group by etc.
The state is ’NEW’: the directive has been created but
without more information about statistics.
The note gives an idea about the object concerned, which
is detailed in the following view.
SQL select object_name,subobject_name,object_type,notes from dba_sql_plan_dir_objects where owner='DEMO' ;
OBJECT_NAME SUBOBJECT_NAME OBJECT_TYPE NOTES
-------------------- -------------------- -------------------- ---------
DEMO_TABLE A COLUMN
DEMO_TABLE B COLUMN
DEMO_TABLE C COLUMN
DEMO_TABLE D COLUMN
DEMO_TABLE TABLE
obj_note
equality_predicates_onlyYES/equality_predicates_only
simple_column_predicates_onlyYES/simple_column_predicates_only
index_access_by_join_predicatesNO/index_access_by_join_predicates
filter_on_joining_objectNO/filter_on_joining_object
/obj_note
What is very interesting here is that the directive is not as-
signed to a statement, but only with a combination of tables,
columns and kind of predicates.
Here the directive can be used by any statement on the
DEMO_TABLE where columns A,B,C,D are involved.
13Tipstechniques13
SOUG Newsletter 5/2014 – Sonderausgabe
Usable SQL Plan directive
What happens if I run the same query again?
SQL select count(*) count1 from DEMO_TABLE where a=0 and b=0 and c=0 and d=0;
COUNT1
--------------------
500
SQL select * from table(dbms_xplan.display_cursor(null,null,'report iostats last'));
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------
SQL_ID 86z3n2y70wavc, child number 1
-------------------------------------
select count(*) count1 from DEMO_TABLE where a=0 and b=0 and c=0 and d=0
Plan hash value: 1839825454
----------------------------------------------------------------------
|	 Id	| Operation	 | Name	 | Starts	| E-Rows	| A-Rows	|
----------------------------------------------------------------------
|	 0	| SELECT STATEMENT	 |		 | 1	| 	| 1	|
|	 1	| SORT AGGREGATE	 |		 | 1	| 1	| 1	|
|	* 2	| TABLE ACCESS FULL	 | DEMO_TABLE	| 1	| 500	| 500	|
----------------------------------------------------------------------
Predicate Information (identified by operation id):
-------------------------------------------------
2 - filter((A=0 AND “B=0 AND “C=0 AND “D=0))
Note
----
- statistics feedback used for this statement
Thanks to automatic reoptimization the statement has
been hard parsed again, now using the cardinality feedback
(which is called statistics feedback in 12c) to get accurate
estimations.
We have a new child number:
SQL select sql_id,child_number,is_reoptimizable from v$sql where sql_id='86z3n2y70wavc';
SQL_ID CHILD_NUMBER I
------------- -------------------- -
86z3n2y70wavc 0 Y
86z3n2y70wavc 1 N
And the internal state of the SQL Plan directive has
changed from NEW to MISSING_STATS because the cardi-
nality misestimate has been determined to be caused by
missing stats (for correlated columns).
SQL select directive_id,type,state,reason,created,last_modified,last_used,notes from dba_sql_plan_directives where
directive_id in(select directive_id from dba_sql_plan_dir_objects where owner='DEMO' );
DIRECTIVE_ID TYPE STATE REASON
-------------------- ---------------- ---------- ------------------------------------
NOTES
-------------------------------------------------------------------------------------
1350980939868665098 DYNAMIC_SAMPLING USABLE SINGLE TABLE CARDINALITY MISESTIMATE
spd_note
internal_stateMISSING_STATS/internal_state
redundantNO/redundant
spd_text{EC(DEMO.DEMO_TABLE)[A, B, C, D]}/spd_text
/spd_note
Note that in 12.1.0.2 the state will show USABLE for both
’NEW’ and ’MISSING STATS’ and we have to check the
NOTES column to get the internal state. It has changed from
2.1.0.1 where the state has all the details.
So, by executing the same statement, the SQL Plan Di-
rective was not used (the statement was to be reoptimized
anyway) but has been updated to validate its state (missing
statistics).
14 Tipstechniques
SOUG Newsletter 5/2014 – Sonderausgabe
Previously I said that SQL Plan Directive are also used
with any statement that uses the same table. Let’s change
the statement (here changing count by max):
SQL select max(a) from DEMO_TABLE where a=0 and b=0 and c=0 and d=0;
MAX(A)
--------------------
0
SQL select * from table(dbms_xplan.display_cursor(null,null,'report iostats last'));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------
SQL_ID crqtabczzmmdv, child number 0
-------------------------------------
select max(a) from DEMO_TABLE where a=0 and b=0 and c=0 and d=0
Plan hash value: 1839825454
---------------------------------------------------------------------
|	 Id	| Operation	 | Name	 | Starts	| E-Rows	| A-Rows	|
---------------------------------------------------------------------
|	 0	| SELECT STATEMENT	 |	 | 1	| 	| 1	|
|	 1	| SORT AGGREGATE	 |	 | 1	| 1	| 1	|
|	*  2	| TABLE ACCESS FULL	| DEMO_TABLE	| 1	| 500	| 500	|
---------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter((A=0 AND “B=0 AND “C=0 AND “D=0))
Note
-----
- dynamic statistics used: dynamic sampling (level=2)
- 1 Sql Plan Directive used for this statement
Then, for the same predicates – but different query- we
have good estimations event for the first executions. And the
dbms_xplan notes explains that:
■	 The SQL Plan Directive told the optimizer that some
missing statistics can lead to misestimate with those
predicates
■	 Then the optimizer has chosen to gather more stats with
Dynamic Sampling
This is the first very nice feature of SQL Plan Directives:
the optimizer knows that it will need to do more work in order
to have good estimations. DBMS_STATS
This is good, but not enough. Using Dynamic Sampling is
only a short term solution. The durable way to solve the issue
is to gather extended statistics for those correlated columns.
And this is where SQL Plan Directives are even nicer: dbms_
stats will check the directives and will gather the required sta-
tistics automatically.
Let’s gather the status as usual, without creating any ex-
tended statistics ourselves:
SQL exec dbms_stats.gather_table_stats(user,'DEMO_TABLE');
PL/SQL procedure successfully completed.
15Tipstechniques15
SOUG Newsletter 5/2014 – Sonderausgabe
Contact
dbi services
Franck Pachot
E-Mail:
franck.pachot@dbi-services.com
And see what has been gathered:
SQL select extension_name,extension from user_stat_extensions where table_name='DEMO_TABLE';
EXTENSION_ EXTENSION
---------- ---------------------------------
SYS_STSPJN (A,B,C,D)
We have now statistics on those columns, because
dbms_stats knew that they were missing when optimizing
some queries.
For the moment, the directive state has not changed. But
let’s run another query (I’ve changed max to min):
SQL exec dbms_spd.flush_sql_plan_directive;
PL/SQL procedure successfully completed.
SQL select directive_id,type,state,reason,created,last_modified,last_used,notes from dba_sql_plan_directives where
directive_id in(select directive_id from dba_sql_plan_dir_objects where owner='DEMO' );
DIRECTIVE_ID TYPE STATE REASON
-------------------- ---------------- ---------- ------------------------------------
NOTES
--------------------------------------------------------------------------------
1350980939868665098 DYNAMIC_SAMPLING SUPERSEDED SINGLE TABLE CARDINALITY
spd_note
internal_stateHAS_STATS/internal_state
redundantNO/redundant
spd_text{EC(DEMO.DEMO_TABLE)[A, B, C, D]}/spd_text
/spd_note
The internal state is now ’HAS_STATS’, the displayed
state being ’SUPERSEEDED’ which means that the problem
has been fixed: we have enough statistics now.
Why did we need another execution to get that state? Be-
cause the optimizer has checked that the issue is now fixed
permanently. If it were not the case, then the internal state
would have been ’PERMANENT’, meaning that the misesti-
mate is permanent and the optimizer cannot rely on the gath-
ered extended statistics. Conclusion
That new component helps to share and store what the
optimizer observes at execution time. It is intelligence and
memory that are added to the cardinality feedback features.
Those observation lead to dynamic sampling as a short term
solution and to extended statistics gathering for long term
solutions. When an issue is fixed (and the optimizer checks
that as well) then the SQL Plan directives are automatically
purges after one year. ■

Weitere ähnliche Inhalte

Was ist angesagt?

DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should KnowDBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should KnowAlex Zaballa
 
Oracle Database 12.1.0.2 New Features
Oracle Database 12.1.0.2 New FeaturesOracle Database 12.1.0.2 New Features
Oracle Database 12.1.0.2 New FeaturesAlex Zaballa
 
SQL Plan Directives explained
SQL Plan Directives explainedSQL Plan Directives explained
SQL Plan Directives explainedMauro Pagano
 
PostgreSQL 9.5 - Major Features
PostgreSQL 9.5 - Major FeaturesPostgreSQL 9.5 - Major Features
PostgreSQL 9.5 - Major FeaturesInMobi Technology
 
Dan Hotka's Top 10 Oracle 12c New Features
Dan Hotka's Top 10 Oracle 12c New FeaturesDan Hotka's Top 10 Oracle 12c New Features
Dan Hotka's Top 10 Oracle 12c New FeaturesEmbarcadero Technologies
 
Troubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming ReplicationTroubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming ReplicationAlexey Lesovsky
 
Example R usage for oracle DBA UKOUG 2013
Example R usage for oracle DBA UKOUG 2013Example R usage for oracle DBA UKOUG 2013
Example R usage for oracle DBA UKOUG 2013BertrandDrouvot
 
Top 10 Mistakes When Migrating From Oracle to PostgreSQL
Top 10 Mistakes When Migrating From Oracle to PostgreSQLTop 10 Mistakes When Migrating From Oracle to PostgreSQL
Top 10 Mistakes When Migrating From Oracle to PostgreSQLJim Mlodgenski
 
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should Know
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should KnowOTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should Know
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should KnowAlex Zaballa
 
Adaptive Query Optimization
Adaptive Query OptimizationAdaptive Query Optimization
Adaptive Query OptimizationAnju Garg
 
Histograms: Pre-12c and now
Histograms: Pre-12c and nowHistograms: Pre-12c and now
Histograms: Pre-12c and nowAnju Garg
 
Oracle Database 12c - Data Redaction
Oracle Database 12c - Data RedactionOracle Database 12c - Data Redaction
Oracle Database 12c - Data RedactionAlex Zaballa
 
Data Tracking: On the Hunt for Information about Your Database
Data Tracking: On the Hunt for Information about Your DatabaseData Tracking: On the Hunt for Information about Your Database
Data Tracking: On the Hunt for Information about Your DatabaseMichael Rosenblum
 
twp-integrating-hadoop-data-with-or-130063
twp-integrating-hadoop-data-with-or-130063twp-integrating-hadoop-data-with-or-130063
twp-integrating-hadoop-data-with-or-130063Madhusudan Anand
 
PostgreSQL Table Partitioning / Sharding
PostgreSQL Table Partitioning / ShardingPostgreSQL Table Partitioning / Sharding
PostgreSQL Table Partitioning / ShardingAmir Reza Hashemi
 
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스PgDay.Seoul
 
Database administration commands
Database administration commands Database administration commands
Database administration commands Varsha Ajith
 
How the Postgres Query Optimizer Works
How the Postgres Query Optimizer WorksHow the Postgres Query Optimizer Works
How the Postgres Query Optimizer WorksEDB
 

Was ist angesagt? (20)

DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should KnowDBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
DBA Brasil 1.0 - DBA Commands and Concepts That Every Developer Should Know
 
Oracle Database 12.1.0.2 New Features
Oracle Database 12.1.0.2 New FeaturesOracle Database 12.1.0.2 New Features
Oracle Database 12.1.0.2 New Features
 
SQL Plan Directives explained
SQL Plan Directives explainedSQL Plan Directives explained
SQL Plan Directives explained
 
PostgreSQL 9.5 - Major Features
PostgreSQL 9.5 - Major FeaturesPostgreSQL 9.5 - Major Features
PostgreSQL 9.5 - Major Features
 
Optimizer Hints
Optimizer HintsOptimizer Hints
Optimizer Hints
 
Dan Hotka's Top 10 Oracle 12c New Features
Dan Hotka's Top 10 Oracle 12c New FeaturesDan Hotka's Top 10 Oracle 12c New Features
Dan Hotka's Top 10 Oracle 12c New Features
 
Troubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming ReplicationTroubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming Replication
 
Example R usage for oracle DBA UKOUG 2013
Example R usage for oracle DBA UKOUG 2013Example R usage for oracle DBA UKOUG 2013
Example R usage for oracle DBA UKOUG 2013
 
Top 10 Mistakes When Migrating From Oracle to PostgreSQL
Top 10 Mistakes When Migrating From Oracle to PostgreSQLTop 10 Mistakes When Migrating From Oracle to PostgreSQL
Top 10 Mistakes When Migrating From Oracle to PostgreSQL
 
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should Know
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should KnowOTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should Know
OTN TOUR 2016 - DBA Commands and Concepts That Every Developer Should Know
 
Adaptive Query Optimization
Adaptive Query OptimizationAdaptive Query Optimization
Adaptive Query Optimization
 
Histograms: Pre-12c and now
Histograms: Pre-12c and nowHistograms: Pre-12c and now
Histograms: Pre-12c and now
 
Oracle Database 12c - Data Redaction
Oracle Database 12c - Data RedactionOracle Database 12c - Data Redaction
Oracle Database 12c - Data Redaction
 
Rmoug ashmaster
Rmoug ashmasterRmoug ashmaster
Rmoug ashmaster
 
Data Tracking: On the Hunt for Information about Your Database
Data Tracking: On the Hunt for Information about Your DatabaseData Tracking: On the Hunt for Information about Your Database
Data Tracking: On the Hunt for Information about Your Database
 
twp-integrating-hadoop-data-with-or-130063
twp-integrating-hadoop-data-with-or-130063twp-integrating-hadoop-data-with-or-130063
twp-integrating-hadoop-data-with-or-130063
 
PostgreSQL Table Partitioning / Sharding
PostgreSQL Table Partitioning / ShardingPostgreSQL Table Partitioning / Sharding
PostgreSQL Table Partitioning / Sharding
 
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
 
Database administration commands
Database administration commands Database administration commands
Database administration commands
 
How the Postgres Query Optimizer Works
How the Postgres Query Optimizer WorksHow the Postgres Query Optimizer Works
How the Postgres Query Optimizer Works
 

Andere mochten auch

《氪周刊:互联网创业必读》(第67期)
《氪周刊:互联网创业必读》(第67期)《氪周刊:互联网创业必读》(第67期)
《氪周刊:互联网创业必读》(第67期)Chada Chiu
 
Mktg Compliance Aligned 3.26.10
Mktg Compliance Aligned 3.26.10Mktg Compliance Aligned 3.26.10
Mktg Compliance Aligned 3.26.10johnmsowell
 
My Graphic & Illustrations
My Graphic & IllustrationsMy Graphic & Illustrations
My Graphic & IllustrationsGene Stevens
 
[Matt Morrison] The Societal Web: How we can Model & Measure 'Influence'
[Matt Morrison] The Societal Web: How we can Model & Measure 'Influence'[Matt Morrison] The Societal Web: How we can Model & Measure 'Influence'
[Matt Morrison] The Societal Web: How we can Model & Measure 'Influence'Lucy Hull
 
Sublime Final Power Point
Sublime Final Power PointSublime Final Power Point
Sublime Final Power Pointguest34eff4
 
《氪周刊:互联网创业必读》(第60期).pdf
《氪周刊:互联网创业必读》(第60期).pdf《氪周刊:互联网创业必读》(第60期).pdf
《氪周刊:互联网创业必读》(第60期).pdfChada Chiu
 
Oss (Open Source Software)2
Oss (Open Source Software)2Oss (Open Source Software)2
Oss (Open Source Software)2whitered009
 
Kurikulum Ro B By
Kurikulum Ro B ByKurikulum Ro B By
Kurikulum Ro B By200801
 
氪周刊63期
氪周刊63期氪周刊63期
氪周刊63期Chada Chiu
 
Full Color Business Card Samples
Full Color Business Card SamplesFull Color Business Card Samples
Full Color Business Card SamplesMark Hannah
 
нравится аниме тогда тебе к нам!
нравится аниме тогда тебе к нам!нравится аниме тогда тебе к нам!
нравится аниме тогда тебе к нам!dikayaNeko
 
Headlineauto-press-release-download
Headlineauto-press-release-downloadHeadlineauto-press-release-download
Headlineauto-press-release-downloadAl Clarke Ltd
 
The Semantic Web and Book Publishing - Supply Chain Seminar, London Book Fair...
The Semantic Web and Book Publishing - Supply Chain Seminar, London Book Fair...The Semantic Web and Book Publishing - Supply Chain Seminar, London Book Fair...
The Semantic Web and Book Publishing - Supply Chain Seminar, London Book Fair...Publishing Technology
 
コマンドラインツールとしてのDocker
コマンドラインツールとしてのDockerコマンドラインツールとしてのDocker
コマンドラインツールとしてのDocker74th
 
รายชื่อเด็กเพิ่มเติม
รายชื่อเด็กเพิ่มเติมรายชื่อเด็กเพิ่มเติม
รายชื่อเด็กเพิ่มเติมTheruangsit
 

Andere mochten auch (20)

《氪周刊:互联网创业必读》(第67期)
《氪周刊:互联网创业必读》(第67期)《氪周刊:互联网创业必读》(第67期)
《氪周刊:互联网创业必读》(第67期)
 
Mktg Compliance Aligned 3.26.10
Mktg Compliance Aligned 3.26.10Mktg Compliance Aligned 3.26.10
Mktg Compliance Aligned 3.26.10
 
My Graphic & Illustrations
My Graphic & IllustrationsMy Graphic & Illustrations
My Graphic & Illustrations
 
Steroid Project Snw
Steroid Project SnwSteroid Project Snw
Steroid Project Snw
 
[Matt Morrison] The Societal Web: How we can Model & Measure 'Influence'
[Matt Morrison] The Societal Web: How we can Model & Measure 'Influence'[Matt Morrison] The Societal Web: How we can Model & Measure 'Influence'
[Matt Morrison] The Societal Web: How we can Model & Measure 'Influence'
 
Sublime Final Power Point
Sublime Final Power PointSublime Final Power Point
Sublime Final Power Point
 
《氪周刊:互联网创业必读》(第60期).pdf
《氪周刊:互联网创业必读》(第60期).pdf《氪周刊:互联网创业必读》(第60期).pdf
《氪周刊:互联网创业必读》(第60期).pdf
 
Oss (Open Source Software)2
Oss (Open Source Software)2Oss (Open Source Software)2
Oss (Open Source Software)2
 
Kurikulum Ro B By
Kurikulum Ro B ByKurikulum Ro B By
Kurikulum Ro B By
 
Understanding dslr
Understanding dslrUnderstanding dslr
Understanding dslr
 
氪周刊63期
氪周刊63期氪周刊63期
氪周刊63期
 
Ciutadaniajove Blogger
Ciutadaniajove BloggerCiutadaniajove Blogger
Ciutadaniajove Blogger
 
Full Color Business Card Samples
Full Color Business Card SamplesFull Color Business Card Samples
Full Color Business Card Samples
 
Konsep dasar keperawatan jiwa
Konsep dasar keperawatan jiwaKonsep dasar keperawatan jiwa
Konsep dasar keperawatan jiwa
 
нравится аниме тогда тебе к нам!
нравится аниме тогда тебе к нам!нравится аниме тогда тебе к нам!
нравится аниме тогда тебе к нам!
 
Headlineauto-press-release-download
Headlineauto-press-release-downloadHeadlineauto-press-release-download
Headlineauto-press-release-download
 
The Semantic Web and Book Publishing - Supply Chain Seminar, London Book Fair...
The Semantic Web and Book Publishing - Supply Chain Seminar, London Book Fair...The Semantic Web and Book Publishing - Supply Chain Seminar, London Book Fair...
The Semantic Web and Book Publishing - Supply Chain Seminar, London Book Fair...
 
コマンドラインツールとしてのDocker
コマンドラインツールとしてのDockerコマンドラインツールとしてのDocker
コマンドラインツールとしてのDocker
 
รายชื่อเด็กเพิ่มเติม
รายชื่อเด็กเพิ่มเติมรายชื่อเด็กเพิ่มเติม
รายชื่อเด็กเพิ่มเติม
 
Pwp Actors
Pwp ActorsPwp Actors
Pwp Actors
 

Ähnlich wie 12c SQL Plan Directives

Understanding Query Optimization with ‘regular’ and ‘Exadata’ Oracle
Understanding Query Optimization with ‘regular’ and ‘Exadata’ OracleUnderstanding Query Optimization with ‘regular’ and ‘Exadata’ Oracle
Understanding Query Optimization with ‘regular’ and ‘Exadata’ OracleGuatemala User Group
 
EvolveExecutionPlans.pdf
EvolveExecutionPlans.pdfEvolveExecutionPlans.pdf
EvolveExecutionPlans.pdfPraveenPolu1
 
Advanced tips of dbms statas
Advanced tips of dbms statasAdvanced tips of dbms statas
Advanced tips of dbms statasLouis liu
 
Oracle 12c Automatic Data Optimization (ADO) - ILM
Oracle 12c Automatic Data Optimization (ADO) - ILMOracle 12c Automatic Data Optimization (ADO) - ILM
Oracle 12c Automatic Data Optimization (ADO) - ILMMonowar Mukul
 
SQL Performance Tuning and New Features in Oracle 19c
SQL Performance Tuning and New Features in Oracle 19cSQL Performance Tuning and New Features in Oracle 19c
SQL Performance Tuning and New Features in Oracle 19cRachelBarker26
 
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...Alex Zaballa
 
SQL Macros - Game Changing Feature for SQL Developers?
SQL Macros - Game Changing Feature for SQL Developers?SQL Macros - Game Changing Feature for SQL Developers?
SQL Macros - Game Changing Feature for SQL Developers?Andrej Pashchenko
 
Managing Statistics for Optimal Query Performance
Managing Statistics for Optimal Query PerformanceManaging Statistics for Optimal Query Performance
Managing Statistics for Optimal Query PerformanceKaren Morton
 
D73549GC10_06.pptx
D73549GC10_06.pptxD73549GC10_06.pptx
D73549GC10_06.pptxVLQuyNhn
 
The Hidden Face of Cost-Based Optimizer: PL/SQL Specific Statistics
The Hidden Face of Cost-Based Optimizer: PL/SQL Specific StatisticsThe Hidden Face of Cost-Based Optimizer: PL/SQL Specific Statistics
The Hidden Face of Cost-Based Optimizer: PL/SQL Specific StatisticsMichael Rosenblum
 
Writing efficient sql
Writing efficient sqlWriting efficient sql
Writing efficient sqlj9soto
 
Oracle Database 12c Application Development
Oracle Database 12c Application DevelopmentOracle Database 12c Application Development
Oracle Database 12c Application DevelopmentSaurabh K. Gupta
 
All on Adaptive and Extended Cursor Sharing
All on Adaptive and Extended Cursor SharingAll on Adaptive and Extended Cursor Sharing
All on Adaptive and Extended Cursor SharingMohamed Houri
 
Oracle dbms_xplan.display_cursor format
Oracle dbms_xplan.display_cursor formatOracle dbms_xplan.display_cursor format
Oracle dbms_xplan.display_cursor formatFranck Pachot
 
Tony jambu (obscure) tools of the trade for tuning oracle sq ls
Tony jambu   (obscure) tools of the trade for tuning oracle sq lsTony jambu   (obscure) tools of the trade for tuning oracle sq ls
Tony jambu (obscure) tools of the trade for tuning oracle sq lsInSync Conference
 
Adapting to Adaptive Plans on 12c
Adapting to Adaptive Plans on 12cAdapting to Adaptive Plans on 12c
Adapting to Adaptive Plans on 12cMauro Pagano
 

Ähnlich wie 12c SQL Plan Directives (20)

Understanding Query Optimization with ‘regular’ and ‘Exadata’ Oracle
Understanding Query Optimization with ‘regular’ and ‘Exadata’ OracleUnderstanding Query Optimization with ‘regular’ and ‘Exadata’ Oracle
Understanding Query Optimization with ‘regular’ and ‘Exadata’ Oracle
 
EvolveExecutionPlans.pdf
EvolveExecutionPlans.pdfEvolveExecutionPlans.pdf
EvolveExecutionPlans.pdf
 
Advanced tips of dbms statas
Advanced tips of dbms statasAdvanced tips of dbms statas
Advanced tips of dbms statas
 
Oracle 12c SPM
Oracle 12c SPMOracle 12c SPM
Oracle 12c SPM
 
Oracle 12c Automatic Data Optimization (ADO) - ILM
Oracle 12c Automatic Data Optimization (ADO) - ILMOracle 12c Automatic Data Optimization (ADO) - ILM
Oracle 12c Automatic Data Optimization (ADO) - ILM
 
SQL Performance Tuning and New Features in Oracle 19c
SQL Performance Tuning and New Features in Oracle 19cSQL Performance Tuning and New Features in Oracle 19c
SQL Performance Tuning and New Features in Oracle 19c
 
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
Oracle Database 12c - The Best Oracle Database 12c Tuning Features for Develo...
 
Do You Know The 11g Plan?
Do You Know The 11g Plan?Do You Know The 11g Plan?
Do You Know The 11g Plan?
 
SQL Macros - Game Changing Feature for SQL Developers?
SQL Macros - Game Changing Feature for SQL Developers?SQL Macros - Game Changing Feature for SQL Developers?
SQL Macros - Game Changing Feature for SQL Developers?
 
Managing Statistics for Optimal Query Performance
Managing Statistics for Optimal Query PerformanceManaging Statistics for Optimal Query Performance
Managing Statistics for Optimal Query Performance
 
D73549GC10_06.pptx
D73549GC10_06.pptxD73549GC10_06.pptx
D73549GC10_06.pptx
 
The Hidden Face of Cost-Based Optimizer: PL/SQL Specific Statistics
The Hidden Face of Cost-Based Optimizer: PL/SQL Specific StatisticsThe Hidden Face of Cost-Based Optimizer: PL/SQL Specific Statistics
The Hidden Face of Cost-Based Optimizer: PL/SQL Specific Statistics
 
Writing efficient sql
Writing efficient sqlWriting efficient sql
Writing efficient sql
 
Oracle 11g caracteristicas poco documentadas 3 en 1
Oracle 11g caracteristicas poco documentadas 3 en 1Oracle 11g caracteristicas poco documentadas 3 en 1
Oracle 11g caracteristicas poco documentadas 3 en 1
 
Oracle Database 12c Application Development
Oracle Database 12c Application DevelopmentOracle Database 12c Application Development
Oracle Database 12c Application Development
 
All on Adaptive and Extended Cursor Sharing
All on Adaptive and Extended Cursor SharingAll on Adaptive and Extended Cursor Sharing
All on Adaptive and Extended Cursor Sharing
 
Oracle dbms_xplan.display_cursor format
Oracle dbms_xplan.display_cursor formatOracle dbms_xplan.display_cursor format
Oracle dbms_xplan.display_cursor format
 
Tony jambu (obscure) tools of the trade for tuning oracle sq ls
Tony jambu   (obscure) tools of the trade for tuning oracle sq lsTony jambu   (obscure) tools of the trade for tuning oracle sq ls
Tony jambu (obscure) tools of the trade for tuning oracle sq ls
 
Adapting to Adaptive Plans on 12c
Adapting to Adaptive Plans on 12cAdapting to Adaptive Plans on 12c
Adapting to Adaptive Plans on 12c
 
Oracle SQL Tuning
Oracle SQL TuningOracle SQL Tuning
Oracle SQL Tuning
 

Mehr von Franck Pachot

Meetup - YugabyteDB - Introduction and key features
Meetup - YugabyteDB - Introduction and key featuresMeetup - YugabyteDB - Introduction and key features
Meetup - YugabyteDB - Introduction and key featuresFranck Pachot
 
19 features you will miss if you leave Oracle Database
19 features you will miss if you leave Oracle Database19 features you will miss if you leave Oracle Database
19 features you will miss if you leave Oracle DatabaseFranck Pachot
 
Oracle Database on Docker
Oracle Database on DockerOracle Database on Docker
Oracle Database on DockerFranck Pachot
 
12cR2 Single-Tenant: Multitenant Features for All Editions
12cR2 Single-Tenant: Multitenant Features for All Editions12cR2 Single-Tenant: Multitenant Features for All Editions
12cR2 Single-Tenant: Multitenant Features for All EditionsFranck Pachot
 
Les bases BI sont-elles différentes?
Les bases BI sont-elles différentes?Les bases BI sont-elles différentes?
Les bases BI sont-elles différentes?Franck Pachot
 
Oracle in-Memory Column Store for BI
Oracle in-Memory Column Store for BIOracle in-Memory Column Store for BI
Oracle in-Memory Column Store for BIFranck Pachot
 
Testing Delphix: easy data virtualization
Testing Delphix: easy data virtualizationTesting Delphix: easy data virtualization
Testing Delphix: easy data virtualizationFranck Pachot
 
Exadata X3 in action: Measuring Smart Scan efficiency with AWR
Exadata X3 in action:  Measuring Smart Scan efficiency with AWRExadata X3 in action:  Measuring Smart Scan efficiency with AWR
Exadata X3 in action: Measuring Smart Scan efficiency with AWRFranck Pachot
 
Oracle table lock modes
Oracle table lock modesOracle table lock modes
Oracle table lock modesFranck Pachot
 
Dbvisit replicate: logical replication made easy
Dbvisit replicate: logical replication made easyDbvisit replicate: logical replication made easy
Dbvisit replicate: logical replication made easyFranck Pachot
 
Reading AWR or Statspack Report - Straight to the Goal
Reading AWR or Statspack Report - Straight to the GoalReading AWR or Statspack Report - Straight to the Goal
Reading AWR or Statspack Report - Straight to the GoalFranck Pachot
 

Mehr von Franck Pachot (11)

Meetup - YugabyteDB - Introduction and key features
Meetup - YugabyteDB - Introduction and key featuresMeetup - YugabyteDB - Introduction and key features
Meetup - YugabyteDB - Introduction and key features
 
19 features you will miss if you leave Oracle Database
19 features you will miss if you leave Oracle Database19 features you will miss if you leave Oracle Database
19 features you will miss if you leave Oracle Database
 
Oracle Database on Docker
Oracle Database on DockerOracle Database on Docker
Oracle Database on Docker
 
12cR2 Single-Tenant: Multitenant Features for All Editions
12cR2 Single-Tenant: Multitenant Features for All Editions12cR2 Single-Tenant: Multitenant Features for All Editions
12cR2 Single-Tenant: Multitenant Features for All Editions
 
Les bases BI sont-elles différentes?
Les bases BI sont-elles différentes?Les bases BI sont-elles différentes?
Les bases BI sont-elles différentes?
 
Oracle in-Memory Column Store for BI
Oracle in-Memory Column Store for BIOracle in-Memory Column Store for BI
Oracle in-Memory Column Store for BI
 
Testing Delphix: easy data virtualization
Testing Delphix: easy data virtualizationTesting Delphix: easy data virtualization
Testing Delphix: easy data virtualization
 
Exadata X3 in action: Measuring Smart Scan efficiency with AWR
Exadata X3 in action:  Measuring Smart Scan efficiency with AWRExadata X3 in action:  Measuring Smart Scan efficiency with AWR
Exadata X3 in action: Measuring Smart Scan efficiency with AWR
 
Oracle table lock modes
Oracle table lock modesOracle table lock modes
Oracle table lock modes
 
Dbvisit replicate: logical replication made easy
Dbvisit replicate: logical replication made easyDbvisit replicate: logical replication made easy
Dbvisit replicate: logical replication made easy
 
Reading AWR or Statspack Report - Straight to the Goal
Reading AWR or Statspack Report - Straight to the GoalReading AWR or Statspack Report - Straight to the Goal
Reading AWR or Statspack Report - Straight to the Goal
 

Kürzlich hochgeladen

JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...amber724300
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...Karmanjay Verma
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesManik S Magar
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...BookNet Canada
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfAarwolf Industries LLC
 
WomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyoneWomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyoneUiPathCommunity
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Karmanjay Verma
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentMahmoud Rabie
 
QMMS Lesson 2 - Using MS Excel Formula.pdf
QMMS Lesson 2 - Using MS Excel Formula.pdfQMMS Lesson 2 - Using MS Excel Formula.pdf
QMMS Lesson 2 - Using MS Excel Formula.pdfROWELL MARQUINA
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 

Kürzlich hochgeladen (20)

JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdf
 
WomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyoneWomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyone
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career Development
 
QMMS Lesson 2 - Using MS Excel Formula.pdf
QMMS Lesson 2 - Using MS Excel Formula.pdfQMMS Lesson 2 - Using MS Excel Formula.pdf
QMMS Lesson 2 - Using MS Excel Formula.pdf
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 

12c SQL Plan Directives

  • 1. 10 Tipstechniques SOUG Newsletter 5/2014 – Sonderausgabe 12c SQL Plan Directives Franck Pachot, dbi services Sometimes the optimizer does a bad choice because of misestimated cardinalities. 11g has brought the ability to recognize those errors by the mean of cardinality feedback. That was reactive optimization. 12c has introduced a new optimizer component to make this feedback more proactive for future queries. Let me show you SQL Plan Directives lifecycle on a simple example. Missing statistics You have collected system statistics that are relevant for your hardware. You have dictionary statistics that are accu- rate. And you have a job that collects object statistics so that they are always fresh. How can you have missing statistics? Let’s see an example. I create the following table: SQL create table DEMO_TABLE as select mod(rownum,2) a,mod(rownum,2) b,mod(rownum,2) c,mod(rownum,2) d from dual connect by level =1000; Table created. SQL SQL select * from DEMO_TABLE where rownum=5; A B C D ---------- ---------- ---------- ---------- 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 You see the pattern: all columns are either 0 or 1 I have statistics on them: SQL select column_name,num_distinct from user_tab_col_statistics where table_name='DEMO_TABLE'; COLUMN_NAM NUM_DISTINCT ---------- ------------ A 2 B 2 C 2 D 2 And statistics are right: each column has two distinct values. Then let’s run the following query: SQL alter session set statistics_level=all; Session altered. SQL select count(*) count1 from DEMO_TABLE where a=0 and b=0 and c=0 and d=0; COUNT1 -------------------- 500 I’ve 1000 rows. Half of them have all 0 and half of them have all 1. This is a simple query but I want to check if the optimizer has estimated the cardinalities correctly.
  • 2. 11Tipstechniques11 SOUG Newsletter 5/2014 – Sonderausgabe And the execution plan: SQL select * from table(dbms_xplan.display_cursor(null,null,'iostats last')); PLAN_TABLE_OUTPUT -------------------------------------------------------------------- SQL_ID 86z3n2y70wavc, child number 0 ------------------------------------- select count(*) count1 from DEMO_TABLE where a=0 and b=0 and c=0 and d=0 Plan hash value: 1839825454 -------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows | A-Rows | -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 1 | | 1 | SORT AGGREGATE | | 1 | 1 | 1 | |* 2 | TABLE ACCESS FULL| DEMO_TABLE | 1 | 63 | 500 | -------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter((A=0 AND “B=0 AND “C=0 AND “D=0)) Here you see the problem: the query returns 500 rows but the optimizer estimated them to 63. That can be a problem in a larger query where the number of rows returned will deter- mine the join method. Where the problem comes from? ■ We know that half of the rows (so 500 here) have all values equal to 0 ■ The optimizer only know about each column Then, the CBO estimates ’A=0’ to return ½ of the rows, then adding ’B=0’ returns ½ of the rows etc. So the optimizer estimate the whole combination of ’A=0 and B=0 and C=0 and D=0’ to return 1/16th of the rows, which is 63. Solutions in 11g What are the solutions for that? In 11g we have two solu- tions: ■ Extended statistics: we calculate statistics on the group of columns (A,B,C,D) so that the optimizer is aware of the correlation ■ Dynamic sampling: when dynamic sampling level is at least 4 then complex where clauses like that one will trigger dynamic sampling. And in any sample, the optimizer will see that the predicate returns half of the rows. 12c does not add new solutions for that (except Adaptive Plan that will lower the bad consequence of misestimating) but will bring automation to those two alternatives, in an adaptive way. Let’s see Automatic Reoptimization and SQL Plan Directives. Automatic Reoptimization If I check the new ’IS_REOPTIMIZABLE’ column from V$SQL, I see that it is flagged to ’Y’ for that query: SQL select sql_id,child_number,is_reoptimizable from v$sql where sql_ id='86z3n2y70wavc'; SQL_ID CHILD_NUMBER I ------------- -------------------- - 86z3n2y70wavc 0 Y During execution, oracle has seen that the actual number of rows (the A-Rows above) is very different from the esti- mated ones (E-Rows). Then the statement is flagged for re- optimization: the next execution will hard parse again instead of sharing the cursor which is known to have been built on bad estimations. And I can have more information with the ’report’ format from dbms_xplan: SQL select * from table(dbms_xplan.display_cursor('86z3n2y70wavc',null,' report')); I don’t reproduce the first part which is the same as the one above, but the ’report’ format adds the following: Reoptimized plan: ----------------- This cursor is marked for automatic reoptimization. The plan that is expected to be chosen on the next execution is displayed below. Plan hash value: 1839825454 ------------------------------------------------- | Id | Operation | Name | Rows | ------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | | 1 | SORT AGGREGATE | | 1 | |* 2 | TABLE ACCESS FULL | DEMO_TABLE | 500 | ------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter(A=0 AND “B=0 AND “C=0 AND “D=0) Not only I know that the statement will be reoptimized, but I also have the future plan. And you see that the estimations (Rows) are now accurate because the optimizer has used the statistics from the pre­ vious execution (this comes from cardinality feedback).
  • 3. 12 Tipstechniques SOUG Newsletter 5/2014 – Sonderausgabe SQL Plan directive So, the optimizer has seen that there were a cardinality misestimate. That was reactive: the previous execution may have been executed with a bad plan. But that knowledge can help future query executions. This is what SQL Plan Directives are: it stores persistently this information to help future executions. Persistent means that it is not only in memory, but stored in the dictionary. So in order to see them, we have to flush them: SQL exec dbms_spd.flush_sql_plan_directive; PL/SQL procedure successfully completed. And we can see which information is stored in the dictionary: SQL select directive_id,type,state,reason,created,last_modified,last_used,notes from dba_sql_plan_directives where directive_id in(select directive_id from dba_sql_plan_dir_objects where owner='DEMO' ); DIRECTIVE_ID TYPE STATE REASON -------------------- ---------------- ---------- ---------------------- NOTES ----------------------------------------------------------------------- 1350980939868665098 DYNAMIC_SAMPLING USABLE SINGLE TABLE CARDINALITY MISESTIMATE spd_note internal_stateNEW/internal_state redundantNO/redundant spd_text{EC(DEMO.DEMO_TABLE)[A, B, C, D]}/spd_text /spd_note A new directive has been created. For the moment (12.1) directives are only created for opti- mizer bad decision for a ’CARDINALITY MISESTIMATE’, the type being type ’DYNAMIC_SAMPLING’. The misestimate can concern several kind of operations: single table access, join, group by etc. The state is ’NEW’: the directive has been created but without more information about statistics. The note gives an idea about the object concerned, which is detailed in the following view. SQL select object_name,subobject_name,object_type,notes from dba_sql_plan_dir_objects where owner='DEMO' ; OBJECT_NAME SUBOBJECT_NAME OBJECT_TYPE NOTES -------------------- -------------------- -------------------- --------- DEMO_TABLE A COLUMN DEMO_TABLE B COLUMN DEMO_TABLE C COLUMN DEMO_TABLE D COLUMN DEMO_TABLE TABLE obj_note equality_predicates_onlyYES/equality_predicates_only simple_column_predicates_onlyYES/simple_column_predicates_only index_access_by_join_predicatesNO/index_access_by_join_predicates filter_on_joining_objectNO/filter_on_joining_object /obj_note What is very interesting here is that the directive is not as- signed to a statement, but only with a combination of tables, columns and kind of predicates. Here the directive can be used by any statement on the DEMO_TABLE where columns A,B,C,D are involved.
  • 4. 13Tipstechniques13 SOUG Newsletter 5/2014 – Sonderausgabe Usable SQL Plan directive What happens if I run the same query again? SQL select count(*) count1 from DEMO_TABLE where a=0 and b=0 and c=0 and d=0; COUNT1 -------------------- 500 SQL select * from table(dbms_xplan.display_cursor(null,null,'report iostats last')); PLAN_TABLE_OUTPUT --------------------------------------------------------------------------------- SQL_ID 86z3n2y70wavc, child number 1 ------------------------------------- select count(*) count1 from DEMO_TABLE where a=0 and b=0 and c=0 and d=0 Plan hash value: 1839825454 ---------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows | A-Rows | ---------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 1 | | 1 | SORT AGGREGATE | | 1 | 1 | 1 | | * 2 | TABLE ACCESS FULL | DEMO_TABLE | 1 | 500 | 500 | ---------------------------------------------------------------------- Predicate Information (identified by operation id): ------------------------------------------------- 2 - filter((A=0 AND “B=0 AND “C=0 AND “D=0)) Note ---- - statistics feedback used for this statement Thanks to automatic reoptimization the statement has been hard parsed again, now using the cardinality feedback (which is called statistics feedback in 12c) to get accurate estimations. We have a new child number: SQL select sql_id,child_number,is_reoptimizable from v$sql where sql_id='86z3n2y70wavc'; SQL_ID CHILD_NUMBER I ------------- -------------------- - 86z3n2y70wavc 0 Y 86z3n2y70wavc 1 N And the internal state of the SQL Plan directive has changed from NEW to MISSING_STATS because the cardi- nality misestimate has been determined to be caused by missing stats (for correlated columns). SQL select directive_id,type,state,reason,created,last_modified,last_used,notes from dba_sql_plan_directives where directive_id in(select directive_id from dba_sql_plan_dir_objects where owner='DEMO' ); DIRECTIVE_ID TYPE STATE REASON -------------------- ---------------- ---------- ------------------------------------ NOTES ------------------------------------------------------------------------------------- 1350980939868665098 DYNAMIC_SAMPLING USABLE SINGLE TABLE CARDINALITY MISESTIMATE spd_note internal_stateMISSING_STATS/internal_state redundantNO/redundant spd_text{EC(DEMO.DEMO_TABLE)[A, B, C, D]}/spd_text /spd_note Note that in 12.1.0.2 the state will show USABLE for both ’NEW’ and ’MISSING STATS’ and we have to check the NOTES column to get the internal state. It has changed from 2.1.0.1 where the state has all the details. So, by executing the same statement, the SQL Plan Di- rective was not used (the statement was to be reoptimized anyway) but has been updated to validate its state (missing statistics).
  • 5. 14 Tipstechniques SOUG Newsletter 5/2014 – Sonderausgabe Previously I said that SQL Plan Directive are also used with any statement that uses the same table. Let’s change the statement (here changing count by max): SQL select max(a) from DEMO_TABLE where a=0 and b=0 and c=0 and d=0; MAX(A) -------------------- 0 SQL select * from table(dbms_xplan.display_cursor(null,null,'report iostats last')); PLAN_TABLE_OUTPUT -------------------------------------------------------------------- SQL_ID crqtabczzmmdv, child number 0 ------------------------------------- select max(a) from DEMO_TABLE where a=0 and b=0 and c=0 and d=0 Plan hash value: 1839825454 --------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows | A-Rows | --------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 1 | | 1 | SORT AGGREGATE | | 1 | 1 | 1 | | *  2 | TABLE ACCESS FULL | DEMO_TABLE | 1 | 500 | 500 | --------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter((A=0 AND “B=0 AND “C=0 AND “D=0)) Note ----- - dynamic statistics used: dynamic sampling (level=2) - 1 Sql Plan Directive used for this statement Then, for the same predicates – but different query- we have good estimations event for the first executions. And the dbms_xplan notes explains that: ■ The SQL Plan Directive told the optimizer that some missing statistics can lead to misestimate with those predicates ■ Then the optimizer has chosen to gather more stats with Dynamic Sampling This is the first very nice feature of SQL Plan Directives: the optimizer knows that it will need to do more work in order to have good estimations. DBMS_STATS This is good, but not enough. Using Dynamic Sampling is only a short term solution. The durable way to solve the issue is to gather extended statistics for those correlated columns. And this is where SQL Plan Directives are even nicer: dbms_ stats will check the directives and will gather the required sta- tistics automatically. Let’s gather the status as usual, without creating any ex- tended statistics ourselves: SQL exec dbms_stats.gather_table_stats(user,'DEMO_TABLE'); PL/SQL procedure successfully completed.
  • 6. 15Tipstechniques15 SOUG Newsletter 5/2014 – Sonderausgabe Contact dbi services Franck Pachot E-Mail: franck.pachot@dbi-services.com And see what has been gathered: SQL select extension_name,extension from user_stat_extensions where table_name='DEMO_TABLE'; EXTENSION_ EXTENSION ---------- --------------------------------- SYS_STSPJN (A,B,C,D) We have now statistics on those columns, because dbms_stats knew that they were missing when optimizing some queries. For the moment, the directive state has not changed. But let’s run another query (I’ve changed max to min): SQL exec dbms_spd.flush_sql_plan_directive; PL/SQL procedure successfully completed. SQL select directive_id,type,state,reason,created,last_modified,last_used,notes from dba_sql_plan_directives where directive_id in(select directive_id from dba_sql_plan_dir_objects where owner='DEMO' ); DIRECTIVE_ID TYPE STATE REASON -------------------- ---------------- ---------- ------------------------------------ NOTES -------------------------------------------------------------------------------- 1350980939868665098 DYNAMIC_SAMPLING SUPERSEDED SINGLE TABLE CARDINALITY spd_note internal_stateHAS_STATS/internal_state redundantNO/redundant spd_text{EC(DEMO.DEMO_TABLE)[A, B, C, D]}/spd_text /spd_note The internal state is now ’HAS_STATS’, the displayed state being ’SUPERSEEDED’ which means that the problem has been fixed: we have enough statistics now. Why did we need another execution to get that state? Be- cause the optimizer has checked that the issue is now fixed permanently. If it were not the case, then the internal state would have been ’PERMANENT’, meaning that the misesti- mate is permanent and the optimizer cannot rely on the gath- ered extended statistics. Conclusion That new component helps to share and store what the optimizer observes at execution time. It is intelligence and memory that are added to the cardinality feedback features. Those observation lead to dynamic sampling as a short term solution and to extended statistics gathering for long term solutions. When an issue is fixed (and the optimizer checks that as well) then the SQL Plan directives are automatically purges after one year. ■