SlideShare ist ein Scribd-Unternehmen logo
1 von 60
Downloaden Sie, um offline zu lesen
Wie kommt der Hint in das SQL? 
… ohne die Anwendung zu ändern … 
Mathias Zarick 
Principal Consultant 
BASEL BERN BRUGG GENF LAUSANNE ZÜRICH DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MÜNCHEN STUTTGART WIEN 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
1
Vorstellung – Mathias Zarick 
 Principal Consultant bei Trivadis Delphi GmbH in Wien 
2014 © Trivadis 
 Trainer 
 Data Guard, Architektur und Interna für fortgeschrittene DBAs, 
Maximum Availability Architecture Workshop 
 E-Mail: Mathias.Zarick@trivadis.com 
 Hauptthemen: 
 Oracle Datenbank 
 Oracle Hochverfügbarkeitsprojekte (Real Application Clusters, Data Guard, 
Maximum Availability Architecture, Replikation mit Streams und GoldenGate) 
 Backup/Recovery 
 Entwicklungsleiter der Trivadis Toolbox 
 Entwickler von TVD-Standby 
 Forschungsprojekte im Trivadis Technology Center (TTC) 
2 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014
Unser Unternehmen 
Trivadis ist führend bei der IT-Beratung, der Systemintegration, 
dem Solution-Engineering und der Erbringung von IT-Services 
mit Fokussierung auf und Technologien 
im D-A-CH-Raum. 
Unsere Leistungen erbringen wir aus den strategischen Geschäftsfeldern: 
Trivadis Services übernimmt den korrespondierenden Betrieb 
Ihrer IT Systeme. 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
B E T R I E B 
3
Mit über 600 IT- und Fachexperten bei Ihnen vor Ort 
2014 © Trivadis 
4 
12 Trivadis Niederlassungen mit 
über 600 Mitarbeitenden 
200 Service Level Agreements 
Mehr als 4'000 Trainingsteilnehmer 
Forschungs- und Entwicklungs-budget: 
CHF 5.0 Mio. / EUR 4.0 
Mio. 
Finanziell unabhängig und 
nachhaltig profitabel 
Erfahrung aus mehr als 1'900 
Projekten pro Jahr bei über 800 
Kunden 
Stand 12/2013 
Hamburg 
Düsseldorf 
Frankfurt 
Freiburg 
München 
Wien 
Basel 
Bern Zürich 
Lausanne 
4 
Stuttgart 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
4 
Brugg
Trivadis an der DOAG 
Ebene 3 - gleich neben der Rolltreppe 
Wir freuen uns auf Ihren Besuch. 
Denn mit Trivadis gewinnen Sie immer. 
2014 © Trivadis 
18.11.2014 
5 
DOAG 2014 - Wie kommt der Hint in das SQL?
Wie kommt der Hint in das SQL? 
1. Einführung 
2. Stored Outlines 
3. SQL Profiles 
4. SQL Patches 
5. SQL Plan Baselines 
6. Allgemeines und Fazit 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
6
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
Einführung 
7
Was sind Hints? 
 Hints ermöglichen, den Oracle Optimizer und/oder seine 
Entscheidungen zu beeinflussen 
 wenn möglich, wird ihnen gefolgt 
 Hints werden in Kommentaren nach dem ersten Schlüsselwort eines 
Query Blocks benutzt 
 Das erste Zeichen im Kommentar muss ein + sein 
 2 Kategorien: 
 Nicht-Optimizer Hints, z.B. 
APPEND, CACHE, MONITOR, GATHER_PLAN_STATISTICS, RESULT_CACHE, … 
 Optimizer Hints, z.B. 
FULL, INDEX, LEADING, ORDERED, … 
 Welche Hints gibt es? 
Siehe View v$sql_hint 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
8
Warum (keine) Hints? 
 Workaround für suboptimale Ausführungspläne 
 Sollten keine permanente Lösung sein 
 Die Daten können sich ändern, der Plan kann unangebracht werden 
 Der Optimizer lernt in einer neueren Version dazu 
 Nützlich in Testszenarien / Was-wäre-wenn-Analysen 
 Einige Hints müssen verwendet werden, um ein spezielles Verhalten der 
Oracle Datenbank zu erreichen, z.B. 
 APPEND, BIND_AWARE, RESULT_CACHE, … 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
9
Jonathan Lewis’ Rules for Hinting 
http://jonathanlewis.wordpress.com/2008/05/02/rules-for-hinting/ 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
10
Beispiel für diese Präsentation (1) 
 Ursprüngliches Statement 
 Ursprünglicher Plan 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
11 
SELECT count(*) FROM t WHERE id=0815 
SELECT * FROM 
table(dbms_xplan.display_cursor(format='BASIC')) 
----------------------------------- 
| Id | Operation | Name | 
----------------------------------- 
| 0 | SELECT STATEMENT | | 
| 1 | SORT AGGREGATE | | 
| 2 | INDEX UNIQUE SCAN| T_PK | 
-----------------------------------
Beispiel für diese Präsentation (2) 
 Alternatives Statement mit Hint 
 Alternativer Plan 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
12 
SELECT /*+ FULL(t) */ count(*) FROM t WHERE id=0815 
SELECT * FROM 
table(dbms_xplan.display_cursor(format='BASIC')) 
----------------------------------- 
| Id | Operation | Name | 
----------------------------------- 
| 0 | SELECT STATEMENT | | 
| 1 | SORT AGGREGATE | | 
| 2 | TABLE ACCESS FULL| T | 
-----------------------------------
Die Herausforderung 
 Kein Zugriff auf die Applikation um das SQL zu ändern 
 Der Hint muss auf irgendeine andere Weise injiziert werden 
SQL_ID btuu7yga9bcp1 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
13
Wie kommt der Hint in das SQL? 
1. Einführung 
2. Stored Outlines 
3. SQL Profiles 
4. SQL Patches 
5. SQL Plan Baselines 
6. Allgemeines und Fazit 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
14
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
Stored Outlines 
15
Was sind Stored Outlines? 
 Stored Outlines stellen Planstabilität durch das Speichern der Outline- 
Daten eines assoziierten Planes eines SQL Statements zur Verfügung 
 Es werden alle Hints gespeichert, um den Ausführungsplan zu fixieren 
 Die Assoziierung zwischen SQL und Stored Outline geschieht durch 
eine SQL Signatur, welche nach einer Normalisierung produziert wird 
 Großbuchstaben – außer Literale 
 Whitespace wird entfernt – Kommentare nicht 
 Literal-insensitiver Match nur durch cursor_sharing=force 
 Hints werden gespeichert in 
 OUTLN.OL$ 
 OUTLN.OL$HINTS 
 OUTLN.OL$NODES 
2014 © Trivadis 
 Views 
 CDB_/DBA_/ALL_/USER_OUTLINES 
 CDB_/DBA_/ALL_/USER_OUTLINE_HINTS 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
16
Unser Beispiel mit einer Stored Outline (1) 
 Einmal pro Instanz oder für die gewünschten Sessions 
Achtung: use_stored_outlines kann nicht persistent im init.ora 
eingetragen werden, man braucht einen Startup Trigger 
 Wir erzeugen 2 Outlines für den ursprünglichen und den gewünschten 
Plan 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
17 
ALTER SYSTEM SET use_stored_outlines=TRUE; 
CREATE OUTLINE my_outline ON 
SELECT count(*) FROM t WHERE id=0815; 
CREATE OUTLINE my_outline_interim ON 
SELECT /*+ FULL(t) */ count(*) FROM t WHERE id=0815;
Unser Beispiel mit einer Stored Outline (2) 
 Outline Hints austauschen – das erste Set kommt zur zweiten Outline, 
das zweite Set zur ersten Outline 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
18 
UPDATE outln.ol$hints 
SET ol_name=decode(ol_name,'MY_OUTLINE','MY_OUTLINE_INTERIM', 
'MY_OUTLINE_INTERIM','MY_OUTLINE') 
WHERE ol_name IN ('MY_OUTLINE','MY_OUTLINE_INTERIM'); 
UPDATE outln.ol$ 
SET hintcount = ( 
SELECT count(*) 
FROM outln.ol$hints 
WHERE outln.ol$.ol_name = outln.ol$hints.ol_name 
) 
WHERE outln.ol$.ol_name in 
('MY_OUTLINE','MY_OUTLINE_INTERIM'); 
COMMIT;
Ups! DML auf OUTLN Tables? 
 Was ist das denn für ein Hack? Ist das erlaubt? 
 Anerkannt durch „My Oracle Support - How to Specify Hidden Hints 
(Outlines) on SQL Statements in Oracle 8i (Doc ID 92202.1)” 
 Komplettiert von Jonathan Lewis: Plan Stability in Oracle 8i/9i - 
http://www.jlcomp.demon.co.uk/04_outlines.rtf 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
19 
full_outline.sql
Verifikation 
 Überprüfen, ob der gewünschte Plan verwendet wird 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
20 
SELECT count(*) FROM t WHERE id=0815; 
SELECT * FROM 
table(dbms_xplan.display_cursor(format='basic +note')); 
... 
----------------------------------- 
| Id | Operation | Name | 
----------------------------------- 
| 0 | SELECT STATEMENT | | 
| 1 | SORT AGGREGATE | | 
| 2 | TABLE ACCESS FULL| T | 
----------------------------------- 
Note 
----- 
- outline MY_OUTLINE used for this statement
Zwischenbilanz: Stored Outlines 
2014 © Trivadis 
Stored Outlines 
Verfügbar seit 8i 
Deprecated ? Seit 11g 
XE/SE/SE1 ? Ja 
Tuning Pack benötigt Nein 
Match wird nach Normalisierung durchgeführt Ja 
Literal-insensitiver Match (force_match=true) Nein 
Datenänderungen werden berücksichtigt Nein 
Nutzbar um einen Hint im SQL unwirksam zu machen Ja 
Kategorien für verschiedene Workloads und Perioden Ja 
gather_plan_statistics Hint injizieren Nein 
Parallelverarbeitung ändern Ja 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
21
Wie kommt der Hint in das SQL? 
1. Einführung 
2. Stored Outlines 
3. SQL Profiles 
4. SQL Patches 
5. SQL Plan Baselines 
6. Allgemeines und Fazit 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
22
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
SQL Profiles 
23
Was sind SQL Profiles? 
 SQL Profiles helfen dem Optimizer, einen besseren Ausführungsplan zu finden 
 Werden durch SQL Tuning Advisor (oder manuell angelegt) 
 Brauchen Tuning Pack (daher auch Enterprise Edition und Diagnostics Pack) 
 Brauchen control_management_pack_access auf DIAGNOSTIC+TUNING gesetzt 
 SQL Profiles speichern nicht alle (wie stored outlines) sondern nur einige Hints 
um den Ausführungsplan zu beeinflussen 
 Assoziierung auf das SQL geschieht durch eine Signatur, welche nach 
Normalisierung erzeugt wird (es ist außerdem ein literal-insensitiver Match 
konfigurierbar) 
 Hints sind gespeichert in 
 sys.sqlobj$ 
 sys.sqlobj$auxdata 
2014 © Trivadis 
 Views 
 CDB_/DBA_/ALL_ /USER_SQL_PROFILES 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
24 
 sys.sql$text 
 sys.sql$ (12c)
Unser Beispiel mit einem SQL Profile 
 Manuelle Erstellung des SQL Profile mit undokumentierter Prozedur 
 force_match: Literal-insensitiver Match 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
25 
BEGIN 
dbms_sqltune.import_sql_profile( 
name = 'MY_SQL_PROFILE', 
description = 'full table scan', 
sql_text = 'SELECT count(*) FROM t WHERE id=0815', 
force_match = true, 
profile = sqlprof_attr('FULL(@SEL$1 T@SEL$1)') 
); 
END;
Undokumentierte Prozeduren benutzen? 
 Was ist das denn für ein Hack? Ist das erlaubt? 
full_profile_force_match.sql 
 Man lese “My Oracle Support - SQLT Diagnostic Tool (Doc ID 
215187.1)” 
 Zip file sqlt.zip, script sqltutlcoe_xfr_sql_profile.sql 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
26 
REM DESCRIPTION 
REM This script generates another that contains the commands to 
REM create a manual custom SQL Profile out of a known plan from 
REM memory or AWR. The manual custom profile can be implemented 
REM into the same SOURCE system where the plan was retrieved, 
REM or into another similar TARGET system that has same schema 
REM objects referenced by the SQL that generated the known plan.
Verifikation 
 Überprüfen, ob der gewünschte Plan verwendet wird 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
27 
SELECT count(*) FROM t WHERE id=0815; 
SELECT * FROM 
table(dbms_xplan.display_cursor(format='basic +note')); 
... 
----------------------------------- 
| Id | Operation | Name | 
----------------------------------- 
| 0 | SELECT STATEMENT | | 
| 1 | SORT AGGREGATE | | 
| 2 | TABLE ACCESS FULL| T | 
----------------------------------- 
Note 
----- 
- SQL profile MY_SQL_PROFILE used for this statement
Zwischenbilanz: SQL Profiles 
2014 © Trivadis 
SQL Profiles 
Verfügbar seit 10g 
Deprecated ? Nein 
XE/SE/SE1 ? Nein 
Tuning Pack benötigt Ja 
Match wird nach Normalisierung durchgeführt Ja 
Literal-insensitiver Match (force_match=true) Ja 
Datenänderungen werden berücksichtigt Einigermaßen 
Nutzbar um einen Hint im SQL unwirksam zu 
Ja 
machen 
Kategorien für verschiedene Workloads und Perioden Ja 
gather_plan_statistics Hint injizieren Ja 
Parallelverarbeitung ändern Ja 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
28
Wie kommt der Hint in das SQL? 
1. Einführung 
2. Stored Outlines 
3. SQL Profiles 
4. SQL Patches 
5. SQL Plan Baselines 
6. Allgemeines und Fazit 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
29
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
SQL Patches 
30
Was sind SQL Patches? 
 SQL Patches helfen dem Optimizer, einen alternativen Ausführungsplan zu 
2014 © Trivadis 
finden 
 Wurden designt, um Ausführungsfehler zu vermeiden, welche bei einem 
bestimmten Ausführungsschritt passieren und werden durch den SQL Repair 
Advisor (oder manuell) erstellt 
 Auch in Standard Edition verfügbar, siehe 
http://www.oracle.com/webfolder/technetwork/de/community/dbadmin/tipps/advisor/index.html 
 SQL Patches speichern nicht alle (wie stored outlines) sondern nur einige Hints, 
um den Ausführungsplan zu beeinflussen 
 Assoziierung geschieht wieder durch dieselbe Signatur nach Normalisierung 
(Literal-insensitiver Match ist auch konfigurierbar) 
 Hints sind gespeichert in 
 sys.sqlobj$ 
 sys.sqlobj$auxdata 
 Views 
 CDB_/DBA_/ALL_/USER_SQL_PATCHES 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
31 
 sys.sql$text 
 sys.sql$ (12c)
Unser Beispiel mit einem SQL Patch (1) 
 Manuelle Erstellung eines SQL Patch mit undokumentiertem Package 
und Prozedur 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
32 
BEGIN 
sys.dbms_sqldiag_internal.i_create_patch( 
sql_text = 'SELECT count(*) FROM t WHERE id=0815', 
hint_text = 'FULL(@SEL$1 T@SEL$1)', 
name = 'MY_SQL_PATCH'); 
END;
Unser Beispiel mit einem SQL Patch (2) 
 Text wird etwas länger, wenn wir literal-insensitiven Match (forced text 
match) brauchen 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
33 
DECLARE 
v_name VARCHAR2(128); 
BEGIN 
v_name := 
sys.dbms_sqltune_internal.i_create_sql_profile( 
sql_text = 'SELECT count(*) FROM t WHERE id=0815', 
profile_xml = 'outline_datahint 
![CDATA[FULL(@SEL$1 T@SEL$1)]] 
/hint/outline_data', 
is_patch = true, 
name = 'MY_SQL_PATCH', 
force_match = true); 
END;
Undokumentierte Prozeduren benutzen? 
 Was ist das denn für ein Hack? Ist das erlaubt? 
 Lösung wird durch das Oracle Optimizer Team auf ihrem Blog 
vorgeschlagen: 
https://blogs.oracle.com/optimizer/entry/how_can_i_hint_a 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
34 
full_patch_force_match.sql
Verifikation 
 Überprüfen, ob der gewünschte Plan verwendet wird 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
35 
SELECT count(*) FROM t WHERE id=0815; 
SELECT * FROM 
table(dbms_xplan.display_cursor(format='basic +note')); 
... 
----------------------------------- 
| Id | Operation | Name | 
----------------------------------- 
| 0 | SELECT STATEMENT | | 
| 1 | SORT AGGREGATE | | 
| 2 | TABLE ACCESS FULL| T | 
----------------------------------- 
Note 
----- 
- SQL patch MY_SQL_PATCH used for this statement
Zwischenbilanz: SQL Patches 
2014 © Trivadis 
SQL Patches 
Verfügbar seit 11g 
Deprecated ? Nein 
XE/SE/SE1 ? Ja 
Tuning Pack benötigt Nein 
Match wird nach Normalisierung durchgeführt Ja 
Literal-insensitiver Match (force_match=true) Ja 
Datenänderungen werden berücksichtigt Einigermaßen 
Nutzbar um einen Hint im SQL unwirksam zu 
Ja 
machen 
Kategorien für verschiedene Workloads und Perioden Ja 
gather_plan_statistics Hint injizieren Ja 
Parallelverarbeitung ändern Ja 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
36
Wie kommt der Hint in das SQL? 
1. Einführung 
2. Stored Outlines 
3. SQL Profiles 
4. SQL Patches 
5. SQL Plan Baselines 
6. Allgemeines und Fazit 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
37
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
SQL Plan Baselines 
38
Was sind SQL Plan Baselines? 
 SQL Plan Baselines sind Teil des SQL Plan Management Feature 
 Es sind Objekte, welche vom Optimizer berücksichtigt werden 
 Sie enthalten Pläne für bestimmte Statements, welche als Hints gespeichert 
2014 © Trivadis 
sind 
 Pläne können akzeptiert (verifiziert), fixed, enabled/disabled sein 
 Keine weitere Lizenz https://blogs.oracle.com/optimizer/entry/does_the_use_of_sql 
aber sie funktionieren nicht in Standard Edition 
 Assoziierung geschieht wieder durch dieselbe Signatur nach Normalisierung, 
ein literal-insensitiver Match ist leider nicht konfigurierbar 
 Hints sind gespeichert in 
 sys.sqlobj$ 
 sys.sqlobj$auxdata 
 Views 
 CDB_/DBA_/ALL_/USER_SQL_PLAN_BASELINES 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
39 
 sys.sql$text 
 sys.sql$ (12c)
SQL Plan Baselines – Auswahl 
 Ablauf (vereinfacht) 
2014 © Trivadis 
40 
Akzeptiert? 
Akzeptierten 
Ausführungsplan 
benutzen 
Ausführungsplan 
zur History 
hinzufügen 
Wähle akzeptierten 
Ausführungsplan 
mit geringsten Kosten 
Ja 
Nein 
Ausführungsplan 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014
Unser Beispiel mit einer SQL Plan Baseline (1) 
 Wir müssen die SQL ID kennen, dann können wir den ungewünschten 
Plan aus dem Cursor Cache in eine Baseline laden 
 Wir brauchen sql_handle und plan_name aus dba_sql_plan_baselines 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
41 
DECLARE 
v_cnt NUMBER; 
BEGIN 
v_cnt := dbms_spm.load_plans_from_cursor_cache( 
sql_id='btuu7yga9bcp1'); 
END; 
SELECT sql_handle, sql_text, plan_name, description, enabled 
FROM dba_sql_plan_baselines 
WHERE sql_text LIKE 'SELECT count(*) FROM t WHERE id=0815'
Unser Beispiel mit einer SQL Plan Baseline (2) 
 Plan deaktivieren und optional umbenennen und kommentieren 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
42 
DECLARE 
v_cnt NUMBER; 
BEGIN 
v_cnt := dbms_spm.alter_sql_plan_baseline( 
sql_handle = 'SQL_d7cd0a6e6c80df97', 
plan_name = 'SQL_PLAN_dgm8adtq81rwr916941b3', 
attribute_name = 'enabled', 
attribute_value = 'NO'); 
v_cnt := dbms_spm.alter_sql_plan_baseline( 
sql_handle = 'SQL_d7cd0a6e6c80df97', 
plan_name = 'SQL_PLAN_dgm8adtq81rwr916941b3', 
attribute_name = 'plan_name', 
attribute_value = 'NOT_DESIRED_PLAN'); 
v_cnt := dbms_spm.alter_sql_plan_baseline( 
sql_handle = 'SQL_d7cd0a6e6c80df97', 
plan_name = 'NOT_DESIRED_PLAN', 
attribute_name = 'description', 
attribute_value = 'original, but not desired plan'); 
END; 
sql_handle und 
plan_name 
stammen aus 
dba_sql_plan_baselines
Unser Beispiel mit einer SQL Plan Baseline (3) 
 Das Statement mit Hint ausführen, um es in den Cursor Cache zu laden 
 sql_id und plan_hash_value dieses Statement mit Hint besorgen 
 Den gewünschten Plan nun mit der bereits bestehenden Baseline 
assoziieren 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
43 
SELECT /*+ FULL(t) */ count(*) FROM t WHERE id=0815 
SELECT sql_id, plan_hash_value 
FROM v$sql WHERE sql_text LIKE 
'SELECT /*+ FULL(t) */ count(*) FROM t WHERE id=0815' 
DECLARE v_cnt NUMBER; BEGIN 
v_cnt := dbms_spm.load_plans_from_cursor_cache( 
sql_id = 'buzbqk5t2m81y', 
plan_hash_value = '2966233522', 
sql_handle = 'SQL_d7cd0a6e6c80df97'); 
END; 
sql_id und 
plan_hash_value 
stammen aus 
v$sql 
sql_handle ist 
dieselbe wie 
zuvor
Unser Beispiel mit einer SQL Plan Baseline (4) 
 Optional den zweiten Plan umbenennen und kommentieren 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
44 
DECLARE 
v_cnt NUMBER; 
BEGIN 
v_cnt := dbms_spm.alter_sql_plan_baseline( 
sql_handle = 'SQL_d7cd0a6e6c80df97', 
plan_name = 'SQL_PLAN_dgm8adtq81rwr3fdbb376', 
attribute_name = 'plan_name', 
attribute_value = 'DESIRED_PLAN'); 
v_cnt := dbms_spm.alter_sql_plan_baseline( 
sql_handle = 'SQL_d7cd0a6e6c80df97', 
plan_name = 'DESIRED_PLAN', 
attribute_name = 'description', 
attribute_value = 'desired plan introduced by the hint'); 
END; 
sql_handle ist dieselbe 
wie zuvor 
plan_name stammt aus 
dba_sql_plan_baselines
Einen Plan zu einem anderen Statement assoziieren? 
 Was ist das denn für ein Hack? Ist das erlaubt? 
 Die gezeigten Schritte werden durch Maria Colgan (ehemals Product 
Manager Oracle Optimizer) in verschiedenen Posts auf 
https://blogs.oracle.com/optimizer empfohlen 
 Ebenso in ihrer Präsentation „Harnessing the Power of Optimizer Hints” 
 Aus dieser Präsentation stammt das Mantra „If you can hint it, baseline it“ 
 Außerdem – alle benutzten Statements sind regulär dokumentiert 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
45 
full_plan_baseline.sql
Verifikation 
 Überprüfen, ob der gewünschte Plan verwendet wird 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
46 
SELECT count(*) FROM t WHERE id=0815; 
SELECT * FROM 
table(dbms_xplan.display_cursor(format='basic +note')); 
... 
----------------------------------- 
| Id | Operation | Name | 
----------------------------------- 
| 0 | SELECT STATEMENT | | 
| 1 | SORT AGGREGATE | | 
| 2 | TABLE ACCESS FULL| T | 
----------------------------------- 
Note 
----- 
- SQL plan baseline DESIRED_PLAN used for this statement
Zwischenbilanz: SQL Plan Baselines 
2014 © Trivadis 
SQL Plan Baselines 
Verfügbar seit 11g 
Deprecated ? Nein 
XE/SE/SE1 ? Nein 
Tuning Pack benötigt Nein 
Match wird nach Normalisierung durchgeführt Ja 
Literal-insensitiver Match (force_match=true) Nein 
Datenänderungen werden berücksichtigt Ja 
Nutzbar um einen Hint im SQL unwirksam zu 
Ja 
machen 
Kategorien für verschiedene Workloads und Perioden Nein 
gather_plan_statistics Hint injizieren Nein 
Parallelverarbeitung ändern Ja 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
47
Wie kommt der Hint in das SQL? 
1. Einführung 
2. Stored Outlines 
3. SQL Profiles 
4. SQL Patches 
5. SQL Plan Baselines 
6. Allgemeines und Fazit 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
48
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
Allgemeines und Fazit 
49
Ungewünschte Hints unwirksam machen 
 Alle gezeigten Techniken können verwendet werden, um ungewünschte 
Hints in einem SQL statement unwirksam zu machen, z.B. 
 Einfachster Weg 
kann auch auf System-Ebene gesetzt werden 
 Ansonsten einen konträren Hint oder den IGNORE_OPTIM_EMBEDDED_HINTS 
Hint verwenden 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
50 
SELECT /*+ FULL(t) */ count(*) FROM t WHERE id=0815 
ALTER SESSION SET _optimizer_ignore_hints = true
Unhint mit Stored Outline 
 Für Stored Outlines gibt es einen Spezialfall, wir können die Hints auf 
einen einzigen reduzieren: 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
51 
CREATE OUTLINE my_outline ON 
SELECT /*+ FULL(t) */ count(*) FROM t WHERE id=0815; 
DELETE FROM outln.ol$hints 
WHERE ol_name = 'MY_OUTLINE' 
AND hint_text != 'IGNORE_OPTIM_EMBEDDED_HINTS' 
; 
UPDATE outln.ol$ 
SET hintcount = 1 
WHERE outln.ol$.ol_name = 'MY_OUTLINE' 
; 
COMMIT; 
unhint_patch.sql 
or unhint_profile.sql 
maybe: unhint_plan_baseline.sql
Outlines können zu SQL Plan Baselines migriert werden 
 Die Migration erfolgt mit dem dbms_spm Package 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
52 
variable v clob 
exec :v := 
dbms_spm.migrate_stored_outline('outline_name','MY_OUTLINE'); 
DROP OUTLINE my_outline;
Planstabilitäts-Objekte transferieren 
 Stored Outlines: Inhalte der outln Tabellen transferieren, siehe 
Troubleshooting Oracle Performance 2 / Christian Antognini 
 Für SQL profiles, SQL patches, SQL plan baselines gibt es unpack/pack 
Prozeduren 
 Staging Tabelle erzeugen 
- dbms_sqltune.create_stgtab_sqlprof 
- dbms_sqldiag.create_stgtab_sqlpatch 
- dbms_spm.create_stgtab_baseline 
 Die Staging Tabellen haben dieselbe Struktur  man kann sogar ein und 
dieselbe Tabelle als ein Container für alle drei Typen verwenden 
 Objekt packen, Tabelle transferieren, Objekt auspacken (unpack) 
- dbms_sqltune.(un)pack_stgtab_sqlprof 
- dbms_sqldiag.(un)pack_stgtab_sqlpatch 
- dbms_spm.(un)pack_stgtab_baseline 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
53
Besondere non-Optimizer Hints 
 Tuning Sessions können von Plan Statistiken profitieren 
 Ein GATHER_PLAN_STATISTICS Hint kann in eine bestimmte sql_id eingefügt 
2014 © Trivadis 
werden 
 Funktioniert nur mit SQL profiles und SQL patches 
 Manchmal möchte man Result Cache für bestimmte sql_id einschalten 
 Ein Weg wäre Result Cache auf Objektebene auf force zu setzen 
 Wenn man es aber nicht für alle Queries auf dem Objekt einschalten möchte: 
 benutze man einen unsichtbaren RESULT_CACHE Hint 
 Bei meinen Tests funktionierte das nur mit SQL patches 
 Andere gute Beispiele: APPEND, BIND_AWARE, CACHE, DYNAMIC_SAMPLING, 
MONITOR 
 Im Allgemeinen können alle diese Hints 
„ SELECT name FROM v$sql_hint WHERE version_outline IS NULL “ 
nicht in Stored Outlines und SQL plan baselines, aber in manchen 
Fällen in SQL Profiles und/oder SQL Patches verwendet werden 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
54 
result_cache_patch.sql 
append_patch.sql or append_profile.sql 
maybe: gather_plan_statistics_patch.sql
Privilegien 
 Stored Outlines 
 create any outline, alter any outline, drop any outline 
 alter system or alter session 
 DML Privilegien auf 3 outln Tabellen 
 SQL Profiles und SQL Patches 
 create any sql profile, alter any sql profile, drop any sql profile 
(deprecated) 
 administer sql management object 
 Für einige gezeigte Fälle: execute on sys.dbms_sqldiag_internal, 
sys.dbms_sqltune_internal 
 SQL Plan Baselines 
 administer sql management object 
 Für einige gezeigte Fälle: select on v$sql, dba_sql_plan_baselines 
 Im Allgemeinen ist es hilfreich, folgende Rechte zu haben: 
 select on cdb_/dba_ outlines, sql_profiles, sql_patches, sql_plan_baselines 
 Oder select any dictionary 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
55
Zusammenfassender Vergleich 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
56 
Stored 
Outlines 
SQL 
Profiles 
SQL 
Patches 
SQL Plan 
Baselines 
Verfügbar seit 8i 10g 11g 11g 
Deprecated ? Seit 11g Nein Nein Nein 
XE/SE/SE1 ? Ja Nein Ja Nein 
Tuning Pack benötigt Nein Ja Nein Nein 
Match nach Normalisierung Ja Ja Ja Ja 
Literal-insensitiver Match (force_match=true) Nein Ja Ja Nein 
Datenänderungen werden berücksichtigt Nein Etwas Etwas Ja 
Nutzbar, um Hints in SQL unwirksam zu machen Ja Ja Ja Ja 
Kategorien für verschiedene Workloads und 
Ja Ja Ja Nein 
Perioden 
gather_plan_statistics Hint Nein Ja Ja Nein 
result_cache Hint Nein Nein Ja Nein 
Parallelverarbeitung ändern Ja Ja Ja Ja
2014 © Trivadis 
Fazit 
 Es ist möglich, unsichtbar Hints 
zu injizieren, auch dafür, um 
ungewünschte Hints zu 
„entfernen“ 
 Oracle treibt SMB und SQL 
Plan Baselines als zukünftiges 
Planstabilitätsfeature voran 
 4 verschiedene Technologien, 
jede hat seine eigenen Stärken 
und Limitierungen 
 Die Welt ist nicht nur schwarz 
und weiß 
 Manchmal auch ein bisschen 
rot, gelb und grün ☺ 
 Interessanterweise zeigen SQL 
Patches eine Menge grün 
 Testen Sie sorgfältig und 
bedenken Sie, dass Hints in 
den meisten Fällen nur 
Workarounds sind! 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
57
Weitere Informationen... 
www.trivadis.com 
Für Quellen siehe nächste Seite 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
58
Quellenangabe 
 Maria Colgan - How do I migrate stored outlines to SQL Plan Management? - 
https://blogs.oracle.com/optimizer/entry/how_do_i_migrate_stored 
 Maria Colgan - How do I deal with a third party application that has embedded hints that result in a sub-optimal 
execution plan in my environment? - 
https://blogs.oracle.com/optimizer/entry/how_do_i_deal_with_a_third_party_application_that_has_embedded_h 
ints_that_result_in_a_sub-optimal_ex 
 Maria Colgan - Oracle Database Optimizer: Harnessing the Power of Optimizer Hints - 
http://www.nocoug.org/download/2012-11/NoCOUG_201211_Maria_Colgan_Optimizer_Hints.pdf 
 Allison / Oracle Optimizer Blog - Additional Information on SQL Patches - 
https://blogs.oracle.com/optimizer/entry/additional_information_on_sql_patches 
 Allison / Oracle Optimizer Blog - What should I do with old hints in my workload? - 
https://blogs.oracle.com/optimizer/entry/what_should_i_do_with_old_hints_in_my_workload 
 Allison / Oracle Optimizer Blog - Using SQL Patch to add hints to a packaged application - 
https://blogs.oracle.com/optimizer/entry/how_can_i_hint_a 
 Christian Antognini - SQL Profiles - http://antognini.ch/papers/SQLProfiles_20060622.pdf 
 Christian Antognini - Troubleshooting Oracle Performance 
 My Oracle Support - How to Specify Hidden Hints (Outlines) on SQL Statements in Oracle 8i (Doc ID 92202.1) 
 Enkitec Blog - http://blog.enkitec.com/enkitec_scripts/exchange_outline_hints.sql 
 Jonathan Lewis - Plan Stability in Oracle 8i/9i - http://www.jlcomp.demon.co.uk/04_outlines.rtf 
 Jonathan Lewis - Hints on Hints - http://jonathanlewis.files.wordpress.com/2009/05/hints_on_hints.pdf 
 Jonathan Lewis - Rules for Hinting - http://jonathanlewis.wordpress.com/2008/05/02/rules-for-hinting/ 
 Kerry Osborne - Licensing Requirements for SQL Profiles - http://kerryosborne.oracle-guy. 
com/2011/01/licensing-requirements-for-sql-profiles/ 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014 
59
Fragen und Antworten... 
Mathias Zarick 
Principal Consultant 
+43 664 85 44 295 
Mathias.Zarick@trivadis.com 
BASEL BERN BRUGG GENF LAUSANNE ZÜRICH DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MÜNCHEN STUTTGART WIEN 
2014 © Trivadis 
DOAG 2014 - Wie kommt der Hint in das SQL? 
18.11.2014

Weitere ähnliche Inhalte

Andere mochten auch

Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxConAnatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxConJérôme Petazzoni
 
50 Ways to Become More Professionally Excellent
50 Ways to Become More Professionally Excellent50 Ways to Become More Professionally Excellent
50 Ways to Become More Professionally ExcellentLeslie Bradshaw
 
Asean quiz championship_2012
Asean quiz championship_2012Asean quiz championship_2012
Asean quiz championship_2012Movin Miranda
 
Introducing Apple Watch
Introducing Apple WatchIntroducing Apple Watch
Introducing Apple WatchJJ Wu
 
Spectralis oct normal anatomy & systematic interpretation.
Spectralis oct normal anatomy & systematic interpretation.Spectralis oct normal anatomy & systematic interpretation.
Spectralis oct normal anatomy & systematic interpretation.oxfordshireloc
 
Data Modeling with Neo4j
Data Modeling with Neo4jData Modeling with Neo4j
Data Modeling with Neo4jNeo4j
 
Lantal Textiles Projekt Fitness
Lantal Textiles Projekt FitnessLantal Textiles Projekt Fitness
Lantal Textiles Projekt FitnessIBM Switzerland
 
Cálculo e detalhamento de estruturas usuais de concreto armado volume 2 rober...
Cálculo e detalhamento de estruturas usuais de concreto armado volume 2 rober...Cálculo e detalhamento de estruturas usuais de concreto armado volume 2 rober...
Cálculo e detalhamento de estruturas usuais de concreto armado volume 2 rober...Acacio Chimenes
 
Set off and carry forward of losses
Set off and carry forward of losses Set off and carry forward of losses
Set off and carry forward of losses Sunill Bn
 
Social Media Marketing For Business
Social Media Marketing For BusinessSocial Media Marketing For Business
Social Media Marketing For BusinessJeff Bullas
 
Guía para la evaluación sensorial de alimentos
Guía para la evaluación sensorial de alimentosGuía para la evaluación sensorial de alimentos
Guía para la evaluación sensorial de alimentosevytaguevara
 

Andere mochten auch (16)

Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxConAnatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
Anatomy of a Container: Namespaces, cgroups & Some Filesystem Magic - LinuxCon
 
Banking in India
Banking in IndiaBanking in India
Banking in India
 
Types of Irrigation
Types of IrrigationTypes of Irrigation
Types of Irrigation
 
Soft tissue tumor
Soft tissue tumorSoft tissue tumor
Soft tissue tumor
 
50 Ways to Become More Professionally Excellent
50 Ways to Become More Professionally Excellent50 Ways to Become More Professionally Excellent
50 Ways to Become More Professionally Excellent
 
Asean quiz championship_2012
Asean quiz championship_2012Asean quiz championship_2012
Asean quiz championship_2012
 
Introducing Apple Watch
Introducing Apple WatchIntroducing Apple Watch
Introducing Apple Watch
 
Spectralis oct normal anatomy & systematic interpretation.
Spectralis oct normal anatomy & systematic interpretation.Spectralis oct normal anatomy & systematic interpretation.
Spectralis oct normal anatomy & systematic interpretation.
 
Data Modeling with Neo4j
Data Modeling with Neo4jData Modeling with Neo4j
Data Modeling with Neo4j
 
Lantal Textiles Projekt Fitness
Lantal Textiles Projekt FitnessLantal Textiles Projekt Fitness
Lantal Textiles Projekt Fitness
 
Cálculo e detalhamento de estruturas usuais de concreto armado volume 2 rober...
Cálculo e detalhamento de estruturas usuais de concreto armado volume 2 rober...Cálculo e detalhamento de estruturas usuais de concreto armado volume 2 rober...
Cálculo e detalhamento de estruturas usuais de concreto armado volume 2 rober...
 
BLOCO II - RPA - CMS
BLOCO II - RPA - CMSBLOCO II - RPA - CMS
BLOCO II - RPA - CMS
 
Set off and carry forward of losses
Set off and carry forward of losses Set off and carry forward of losses
Set off and carry forward of losses
 
Social Media Marketing For Business
Social Media Marketing For BusinessSocial Media Marketing For Business
Social Media Marketing For Business
 
Guía para la evaluación sensorial de alimentos
Guía para la evaluación sensorial de alimentosGuía para la evaluación sensorial de alimentos
Guía para la evaluación sensorial de alimentos
 
Philippines American Colony
Philippines  American  ColonyPhilippines  American  Colony
Philippines American Colony
 

Ähnlich wie Wie kommt der Hint in das SQL, ohne die anwendung zu ändern?

Performanceaspekte im Oracle DWH
Performanceaspekte im Oracle DWHPerformanceaspekte im Oracle DWH
Performanceaspekte im Oracle DWHTrivadis
 
12c SQL Pattern Matching wann werde ich das benutzen Andrej Pashchenko
12c SQL Pattern Matching wann werde ich das benutzen Andrej Pashchenko12c SQL Pattern Matching wann werde ich das benutzen Andrej Pashchenko
12c SQL Pattern Matching wann werde ich das benutzen Andrej PashchenkoDésirée Pfister
 
Middleware Basics für den DBA
Middleware Basics für den DBAMiddleware Basics für den DBA
Middleware Basics für den DBATrivadis
 
DWH-Modellierung mit Data Vault
DWH-Modellierung mit Data VaultDWH-Modellierung mit Data Vault
DWH-Modellierung mit Data VaultTrivadis
 
Oracle AVDF in der Praxis
Oracle AVDF in der PraxisOracle AVDF in der Praxis
Oracle AVDF in der PraxisTrivadis
 
Perry pakull datenbank entwickler auf dem prüfstand präsentation
Perry pakull datenbank entwickler auf dem prüfstand präsentationPerry pakull datenbank entwickler auf dem prüfstand präsentation
Perry pakull datenbank entwickler auf dem prüfstand präsentationTrivadis
 
PL SQL Unit Tests mit SQL Developer
PL SQL Unit Tests mit SQL DeveloperPL SQL Unit Tests mit SQL Developer
PL SQL Unit Tests mit SQL DeveloperTrivadis
 
Implementierbare Sicherheitsregeln im Enterprise Manager
Implementierbare Sicherheitsregeln im Enterprise ManagerImplementierbare Sicherheitsregeln im Enterprise Manager
Implementierbare Sicherheitsregeln im Enterprise ManagerMartin Obst
 
Secure Technical Implementation Guide for databases by Martin Obst
Secure Technical Implementation Guide for databases by Martin ObstSecure Technical Implementation Guide for databases by Martin Obst
Secure Technical Implementation Guide for databases by Martin ObstCarsten Muetzlitz
 
Indexierungsstrategie im Data Warehouse - Zwischen Albtraum und optimaler Per...
Indexierungsstrategie im Data Warehouse - Zwischen Albtraum und optimaler Per...Indexierungsstrategie im Data Warehouse - Zwischen Albtraum und optimaler Per...
Indexierungsstrategie im Data Warehouse - Zwischen Albtraum und optimaler Per...Trivadis
 
BPMN, BPEL oder vielleicht doch Java? Oder auch noch ESB?
BPMN, BPEL oder vielleicht doch Java? Oder auch noch ESB?BPMN, BPEL oder vielleicht doch Java? Oder auch noch ESB?
BPMN, BPEL oder vielleicht doch Java? Oder auch noch ESB?Guido Schmutz
 
PureSQL APEX Connect
PureSQL APEX ConnectPureSQL APEX Connect
PureSQL APEX ConnectTrivadis
 
Pure SQL for batch processing
Pure SQL for batch processingPure SQL for batch processing
Pure SQL for batch processingAndrej Pashchenko
 
Oracle Text 12c New Features
Oracle Text 12c New FeaturesOracle Text 12c New Features
Oracle Text 12c New FeaturesUlrike Schwinn
 
Oracle12c threaded execution - Ressourcen sparen zum Nulltarif?!?
Oracle12c threaded execution - Ressourcen sparen zum Nulltarif?!?Oracle12c threaded execution - Ressourcen sparen zum Nulltarif?!?
Oracle12c threaded execution - Ressourcen sparen zum Nulltarif?!?Trivadis
 
SAP HANA, Power Pivot, SQL Server – In-memory-Technologien im Vergleich
SAP HANA, Power Pivot, SQL Server – In-memory-Technologien im VergleichSAP HANA, Power Pivot, SQL Server – In-memory-Technologien im Vergleich
SAP HANA, Power Pivot, SQL Server – In-memory-Technologien im VergleichMarcel Franke
 
Icinga 2: Migration von Nagios oder Icinga 1.x leicht gemacht (Webinar 02.09....
Icinga 2: Migration von Nagios oder Icinga 1.x leicht gemacht (Webinar 02.09....Icinga 2: Migration von Nagios oder Icinga 1.x leicht gemacht (Webinar 02.09....
Icinga 2: Migration von Nagios oder Icinga 1.x leicht gemacht (Webinar 02.09....NETWAYS
 
Automatisierung im DWH - Sich das Leben erleichern mit dem ODI
Automatisierung im DWH - Sich das Leben erleichern mit dem ODIAutomatisierung im DWH - Sich das Leben erleichern mit dem ODI
Automatisierung im DWH - Sich das Leben erleichern mit dem ODIOPITZ CONSULTING Deutschland
 
Infrastruktur agil bauen - der DBA im SAFe-Umfeld
Infrastruktur agil bauen - der DBA im SAFe-UmfeldInfrastruktur agil bauen - der DBA im SAFe-Umfeld
Infrastruktur agil bauen - der DBA im SAFe-UmfeldDaniel Steiger
 
Warum ich so auf das c von cdi stehe
Warum ich so auf das c von cdi steheWarum ich so auf das c von cdi stehe
Warum ich so auf das c von cdi steheSven Ruppert
 

Ähnlich wie Wie kommt der Hint in das SQL, ohne die anwendung zu ändern? (20)

Performanceaspekte im Oracle DWH
Performanceaspekte im Oracle DWHPerformanceaspekte im Oracle DWH
Performanceaspekte im Oracle DWH
 
12c SQL Pattern Matching wann werde ich das benutzen Andrej Pashchenko
12c SQL Pattern Matching wann werde ich das benutzen Andrej Pashchenko12c SQL Pattern Matching wann werde ich das benutzen Andrej Pashchenko
12c SQL Pattern Matching wann werde ich das benutzen Andrej Pashchenko
 
Middleware Basics für den DBA
Middleware Basics für den DBAMiddleware Basics für den DBA
Middleware Basics für den DBA
 
DWH-Modellierung mit Data Vault
DWH-Modellierung mit Data VaultDWH-Modellierung mit Data Vault
DWH-Modellierung mit Data Vault
 
Oracle AVDF in der Praxis
Oracle AVDF in der PraxisOracle AVDF in der Praxis
Oracle AVDF in der Praxis
 
Perry pakull datenbank entwickler auf dem prüfstand präsentation
Perry pakull datenbank entwickler auf dem prüfstand präsentationPerry pakull datenbank entwickler auf dem prüfstand präsentation
Perry pakull datenbank entwickler auf dem prüfstand präsentation
 
PL SQL Unit Tests mit SQL Developer
PL SQL Unit Tests mit SQL DeveloperPL SQL Unit Tests mit SQL Developer
PL SQL Unit Tests mit SQL Developer
 
Implementierbare Sicherheitsregeln im Enterprise Manager
Implementierbare Sicherheitsregeln im Enterprise ManagerImplementierbare Sicherheitsregeln im Enterprise Manager
Implementierbare Sicherheitsregeln im Enterprise Manager
 
Secure Technical Implementation Guide for databases by Martin Obst
Secure Technical Implementation Guide for databases by Martin ObstSecure Technical Implementation Guide for databases by Martin Obst
Secure Technical Implementation Guide for databases by Martin Obst
 
Indexierungsstrategie im Data Warehouse - Zwischen Albtraum und optimaler Per...
Indexierungsstrategie im Data Warehouse - Zwischen Albtraum und optimaler Per...Indexierungsstrategie im Data Warehouse - Zwischen Albtraum und optimaler Per...
Indexierungsstrategie im Data Warehouse - Zwischen Albtraum und optimaler Per...
 
BPMN, BPEL oder vielleicht doch Java? Oder auch noch ESB?
BPMN, BPEL oder vielleicht doch Java? Oder auch noch ESB?BPMN, BPEL oder vielleicht doch Java? Oder auch noch ESB?
BPMN, BPEL oder vielleicht doch Java? Oder auch noch ESB?
 
PureSQL APEX Connect
PureSQL APEX ConnectPureSQL APEX Connect
PureSQL APEX Connect
 
Pure SQL for batch processing
Pure SQL for batch processingPure SQL for batch processing
Pure SQL for batch processing
 
Oracle Text 12c New Features
Oracle Text 12c New FeaturesOracle Text 12c New Features
Oracle Text 12c New Features
 
Oracle12c threaded execution - Ressourcen sparen zum Nulltarif?!?
Oracle12c threaded execution - Ressourcen sparen zum Nulltarif?!?Oracle12c threaded execution - Ressourcen sparen zum Nulltarif?!?
Oracle12c threaded execution - Ressourcen sparen zum Nulltarif?!?
 
SAP HANA, Power Pivot, SQL Server – In-memory-Technologien im Vergleich
SAP HANA, Power Pivot, SQL Server – In-memory-Technologien im VergleichSAP HANA, Power Pivot, SQL Server – In-memory-Technologien im Vergleich
SAP HANA, Power Pivot, SQL Server – In-memory-Technologien im Vergleich
 
Icinga 2: Migration von Nagios oder Icinga 1.x leicht gemacht (Webinar 02.09....
Icinga 2: Migration von Nagios oder Icinga 1.x leicht gemacht (Webinar 02.09....Icinga 2: Migration von Nagios oder Icinga 1.x leicht gemacht (Webinar 02.09....
Icinga 2: Migration von Nagios oder Icinga 1.x leicht gemacht (Webinar 02.09....
 
Automatisierung im DWH - Sich das Leben erleichern mit dem ODI
Automatisierung im DWH - Sich das Leben erleichern mit dem ODIAutomatisierung im DWH - Sich das Leben erleichern mit dem ODI
Automatisierung im DWH - Sich das Leben erleichern mit dem ODI
 
Infrastruktur agil bauen - der DBA im SAFe-Umfeld
Infrastruktur agil bauen - der DBA im SAFe-UmfeldInfrastruktur agil bauen - der DBA im SAFe-Umfeld
Infrastruktur agil bauen - der DBA im SAFe-Umfeld
 
Warum ich so auf das c von cdi stehe
Warum ich so auf das c von cdi steheWarum ich so auf das c von cdi stehe
Warum ich so auf das c von cdi stehe
 

Mehr von Trivadis

Azure Days 2019: Azure Chatbot Development for Airline Irregularities (Remco ...
Azure Days 2019: Azure Chatbot Development for Airline Irregularities (Remco ...Azure Days 2019: Azure Chatbot Development for Airline Irregularities (Remco ...
Azure Days 2019: Azure Chatbot Development for Airline Irregularities (Remco ...Trivadis
 
Azure Days 2019: Trivadis Azure Foundation – Das Fundament für den ... (Nisan...
Azure Days 2019: Trivadis Azure Foundation – Das Fundament für den ... (Nisan...Azure Days 2019: Trivadis Azure Foundation – Das Fundament für den ... (Nisan...
Azure Days 2019: Trivadis Azure Foundation – Das Fundament für den ... (Nisan...Trivadis
 
Azure Days 2019: Business Intelligence auf Azure (Marco Amhof & Yves Mauron)
Azure Days 2019: Business Intelligence auf Azure (Marco Amhof & Yves Mauron)Azure Days 2019: Business Intelligence auf Azure (Marco Amhof & Yves Mauron)
Azure Days 2019: Business Intelligence auf Azure (Marco Amhof & Yves Mauron)Trivadis
 
Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)Trivadis
 
Azure Days 2019: Keynote Azure Switzerland – Status Quo und Ausblick (Primo A...
Azure Days 2019: Keynote Azure Switzerland – Status Quo und Ausblick (Primo A...Azure Days 2019: Keynote Azure Switzerland – Status Quo und Ausblick (Primo A...
Azure Days 2019: Keynote Azure Switzerland – Status Quo und Ausblick (Primo A...Trivadis
 
Azure Days 2019: Grösser und Komplexer ist nicht immer besser (Meinrad Weiss)
Azure Days 2019: Grösser und Komplexer ist nicht immer besser (Meinrad Weiss)Azure Days 2019: Grösser und Komplexer ist nicht immer besser (Meinrad Weiss)
Azure Days 2019: Grösser und Komplexer ist nicht immer besser (Meinrad Weiss)Trivadis
 
Azure Days 2019: Get Connected with Azure API Management (Gerry Keune & Stefa...
Azure Days 2019: Get Connected with Azure API Management (Gerry Keune & Stefa...Azure Days 2019: Get Connected with Azure API Management (Gerry Keune & Stefa...
Azure Days 2019: Get Connected with Azure API Management (Gerry Keune & Stefa...Trivadis
 
Azure Days 2019: Infrastructure as Code auf Azure (Jonas Wanninger & Daniel H...
Azure Days 2019: Infrastructure as Code auf Azure (Jonas Wanninger & Daniel H...Azure Days 2019: Infrastructure as Code auf Azure (Jonas Wanninger & Daniel H...
Azure Days 2019: Infrastructure as Code auf Azure (Jonas Wanninger & Daniel H...Trivadis
 
Azure Days 2019: Wie bringt man eine Data Analytics Plattform in die Cloud? (...
Azure Days 2019: Wie bringt man eine Data Analytics Plattform in die Cloud? (...Azure Days 2019: Wie bringt man eine Data Analytics Plattform in die Cloud? (...
Azure Days 2019: Wie bringt man eine Data Analytics Plattform in die Cloud? (...Trivadis
 
Azure Days 2019: Azure@Helsana: Die Erweiterung von Dynamics CRM mit Azure Po...
Azure Days 2019: Azure@Helsana: Die Erweiterung von Dynamics CRM mit Azure Po...Azure Days 2019: Azure@Helsana: Die Erweiterung von Dynamics CRM mit Azure Po...
Azure Days 2019: Azure@Helsana: Die Erweiterung von Dynamics CRM mit Azure Po...Trivadis
 
TechEvent 2019: Kundenstory - Kein Angebot, kein Auftrag – Wie Du ein individ...
TechEvent 2019: Kundenstory - Kein Angebot, kein Auftrag – Wie Du ein individ...TechEvent 2019: Kundenstory - Kein Angebot, kein Auftrag – Wie Du ein individ...
TechEvent 2019: Kundenstory - Kein Angebot, kein Auftrag – Wie Du ein individ...Trivadis
 
TechEvent 2019: Oracle Database Appliance M/L - Erfahrungen und Erfolgsmethod...
TechEvent 2019: Oracle Database Appliance M/L - Erfahrungen und Erfolgsmethod...TechEvent 2019: Oracle Database Appliance M/L - Erfahrungen und Erfolgsmethod...
TechEvent 2019: Oracle Database Appliance M/L - Erfahrungen und Erfolgsmethod...Trivadis
 
TechEvent 2019: Security 101 für Web Entwickler; Roland Krüger - Trivadis
TechEvent 2019: Security 101 für Web Entwickler; Roland Krüger - TrivadisTechEvent 2019: Security 101 für Web Entwickler; Roland Krüger - Trivadis
TechEvent 2019: Security 101 für Web Entwickler; Roland Krüger - TrivadisTrivadis
 
TechEvent 2019: Trivadis & Swisscom Partner Angebote; Konrad Häfeli, Markus O...
TechEvent 2019: Trivadis & Swisscom Partner Angebote; Konrad Häfeli, Markus O...TechEvent 2019: Trivadis & Swisscom Partner Angebote; Konrad Häfeli, Markus O...
TechEvent 2019: Trivadis & Swisscom Partner Angebote; Konrad Häfeli, Markus O...Trivadis
 
TechEvent 2019: DBaaS from Swisscom Cloud powered by Trivadis; Konrad Häfeli ...
TechEvent 2019: DBaaS from Swisscom Cloud powered by Trivadis; Konrad Häfeli ...TechEvent 2019: DBaaS from Swisscom Cloud powered by Trivadis; Konrad Häfeli ...
TechEvent 2019: DBaaS from Swisscom Cloud powered by Trivadis; Konrad Häfeli ...Trivadis
 
TechEvent 2019: Status of the partnership Trivadis and EDB - Comparing Postgr...
TechEvent 2019: Status of the partnership Trivadis and EDB - Comparing Postgr...TechEvent 2019: Status of the partnership Trivadis and EDB - Comparing Postgr...
TechEvent 2019: Status of the partnership Trivadis and EDB - Comparing Postgr...Trivadis
 
TechEvent 2019: More Agile, More AI, More Cloud! Less Work?!; Oliver Dörr - T...
TechEvent 2019: More Agile, More AI, More Cloud! Less Work?!; Oliver Dörr - T...TechEvent 2019: More Agile, More AI, More Cloud! Less Work?!; Oliver Dörr - T...
TechEvent 2019: More Agile, More AI, More Cloud! Less Work?!; Oliver Dörr - T...Trivadis
 
TechEvent 2019: Kundenstory - Vom Hauptmann zu Köpenick zum Polizisten 2020 -...
TechEvent 2019: Kundenstory - Vom Hauptmann zu Köpenick zum Polizisten 2020 -...TechEvent 2019: Kundenstory - Vom Hauptmann zu Köpenick zum Polizisten 2020 -...
TechEvent 2019: Kundenstory - Vom Hauptmann zu Köpenick zum Polizisten 2020 -...Trivadis
 
TechEvent 2019: Vom Rechenzentrum in die Oracle Cloud - Übertragungsmethoden;...
TechEvent 2019: Vom Rechenzentrum in die Oracle Cloud - Übertragungsmethoden;...TechEvent 2019: Vom Rechenzentrum in die Oracle Cloud - Übertragungsmethoden;...
TechEvent 2019: Vom Rechenzentrum in die Oracle Cloud - Übertragungsmethoden;...Trivadis
 
TechEvent 2019: The sleeping Power of Data; Eberhard Lösch - Trivadis
TechEvent 2019: The sleeping Power of Data; Eberhard Lösch - TrivadisTechEvent 2019: The sleeping Power of Data; Eberhard Lösch - Trivadis
TechEvent 2019: The sleeping Power of Data; Eberhard Lösch - TrivadisTrivadis
 

Mehr von Trivadis (20)

Azure Days 2019: Azure Chatbot Development for Airline Irregularities (Remco ...
Azure Days 2019: Azure Chatbot Development for Airline Irregularities (Remco ...Azure Days 2019: Azure Chatbot Development for Airline Irregularities (Remco ...
Azure Days 2019: Azure Chatbot Development for Airline Irregularities (Remco ...
 
Azure Days 2019: Trivadis Azure Foundation – Das Fundament für den ... (Nisan...
Azure Days 2019: Trivadis Azure Foundation – Das Fundament für den ... (Nisan...Azure Days 2019: Trivadis Azure Foundation – Das Fundament für den ... (Nisan...
Azure Days 2019: Trivadis Azure Foundation – Das Fundament für den ... (Nisan...
 
Azure Days 2019: Business Intelligence auf Azure (Marco Amhof & Yves Mauron)
Azure Days 2019: Business Intelligence auf Azure (Marco Amhof & Yves Mauron)Azure Days 2019: Business Intelligence auf Azure (Marco Amhof & Yves Mauron)
Azure Days 2019: Business Intelligence auf Azure (Marco Amhof & Yves Mauron)
 
Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)Azure Days 2019: Master the Move to Azure (Konrad Brunner)
Azure Days 2019: Master the Move to Azure (Konrad Brunner)
 
Azure Days 2019: Keynote Azure Switzerland – Status Quo und Ausblick (Primo A...
Azure Days 2019: Keynote Azure Switzerland – Status Quo und Ausblick (Primo A...Azure Days 2019: Keynote Azure Switzerland – Status Quo und Ausblick (Primo A...
Azure Days 2019: Keynote Azure Switzerland – Status Quo und Ausblick (Primo A...
 
Azure Days 2019: Grösser und Komplexer ist nicht immer besser (Meinrad Weiss)
Azure Days 2019: Grösser und Komplexer ist nicht immer besser (Meinrad Weiss)Azure Days 2019: Grösser und Komplexer ist nicht immer besser (Meinrad Weiss)
Azure Days 2019: Grösser und Komplexer ist nicht immer besser (Meinrad Weiss)
 
Azure Days 2019: Get Connected with Azure API Management (Gerry Keune & Stefa...
Azure Days 2019: Get Connected with Azure API Management (Gerry Keune & Stefa...Azure Days 2019: Get Connected with Azure API Management (Gerry Keune & Stefa...
Azure Days 2019: Get Connected with Azure API Management (Gerry Keune & Stefa...
 
Azure Days 2019: Infrastructure as Code auf Azure (Jonas Wanninger & Daniel H...
Azure Days 2019: Infrastructure as Code auf Azure (Jonas Wanninger & Daniel H...Azure Days 2019: Infrastructure as Code auf Azure (Jonas Wanninger & Daniel H...
Azure Days 2019: Infrastructure as Code auf Azure (Jonas Wanninger & Daniel H...
 
Azure Days 2019: Wie bringt man eine Data Analytics Plattform in die Cloud? (...
Azure Days 2019: Wie bringt man eine Data Analytics Plattform in die Cloud? (...Azure Days 2019: Wie bringt man eine Data Analytics Plattform in die Cloud? (...
Azure Days 2019: Wie bringt man eine Data Analytics Plattform in die Cloud? (...
 
Azure Days 2019: Azure@Helsana: Die Erweiterung von Dynamics CRM mit Azure Po...
Azure Days 2019: Azure@Helsana: Die Erweiterung von Dynamics CRM mit Azure Po...Azure Days 2019: Azure@Helsana: Die Erweiterung von Dynamics CRM mit Azure Po...
Azure Days 2019: Azure@Helsana: Die Erweiterung von Dynamics CRM mit Azure Po...
 
TechEvent 2019: Kundenstory - Kein Angebot, kein Auftrag – Wie Du ein individ...
TechEvent 2019: Kundenstory - Kein Angebot, kein Auftrag – Wie Du ein individ...TechEvent 2019: Kundenstory - Kein Angebot, kein Auftrag – Wie Du ein individ...
TechEvent 2019: Kundenstory - Kein Angebot, kein Auftrag – Wie Du ein individ...
 
TechEvent 2019: Oracle Database Appliance M/L - Erfahrungen und Erfolgsmethod...
TechEvent 2019: Oracle Database Appliance M/L - Erfahrungen und Erfolgsmethod...TechEvent 2019: Oracle Database Appliance M/L - Erfahrungen und Erfolgsmethod...
TechEvent 2019: Oracle Database Appliance M/L - Erfahrungen und Erfolgsmethod...
 
TechEvent 2019: Security 101 für Web Entwickler; Roland Krüger - Trivadis
TechEvent 2019: Security 101 für Web Entwickler; Roland Krüger - TrivadisTechEvent 2019: Security 101 für Web Entwickler; Roland Krüger - Trivadis
TechEvent 2019: Security 101 für Web Entwickler; Roland Krüger - Trivadis
 
TechEvent 2019: Trivadis & Swisscom Partner Angebote; Konrad Häfeli, Markus O...
TechEvent 2019: Trivadis & Swisscom Partner Angebote; Konrad Häfeli, Markus O...TechEvent 2019: Trivadis & Swisscom Partner Angebote; Konrad Häfeli, Markus O...
TechEvent 2019: Trivadis & Swisscom Partner Angebote; Konrad Häfeli, Markus O...
 
TechEvent 2019: DBaaS from Swisscom Cloud powered by Trivadis; Konrad Häfeli ...
TechEvent 2019: DBaaS from Swisscom Cloud powered by Trivadis; Konrad Häfeli ...TechEvent 2019: DBaaS from Swisscom Cloud powered by Trivadis; Konrad Häfeli ...
TechEvent 2019: DBaaS from Swisscom Cloud powered by Trivadis; Konrad Häfeli ...
 
TechEvent 2019: Status of the partnership Trivadis and EDB - Comparing Postgr...
TechEvent 2019: Status of the partnership Trivadis and EDB - Comparing Postgr...TechEvent 2019: Status of the partnership Trivadis and EDB - Comparing Postgr...
TechEvent 2019: Status of the partnership Trivadis and EDB - Comparing Postgr...
 
TechEvent 2019: More Agile, More AI, More Cloud! Less Work?!; Oliver Dörr - T...
TechEvent 2019: More Agile, More AI, More Cloud! Less Work?!; Oliver Dörr - T...TechEvent 2019: More Agile, More AI, More Cloud! Less Work?!; Oliver Dörr - T...
TechEvent 2019: More Agile, More AI, More Cloud! Less Work?!; Oliver Dörr - T...
 
TechEvent 2019: Kundenstory - Vom Hauptmann zu Köpenick zum Polizisten 2020 -...
TechEvent 2019: Kundenstory - Vom Hauptmann zu Köpenick zum Polizisten 2020 -...TechEvent 2019: Kundenstory - Vom Hauptmann zu Köpenick zum Polizisten 2020 -...
TechEvent 2019: Kundenstory - Vom Hauptmann zu Köpenick zum Polizisten 2020 -...
 
TechEvent 2019: Vom Rechenzentrum in die Oracle Cloud - Übertragungsmethoden;...
TechEvent 2019: Vom Rechenzentrum in die Oracle Cloud - Übertragungsmethoden;...TechEvent 2019: Vom Rechenzentrum in die Oracle Cloud - Übertragungsmethoden;...
TechEvent 2019: Vom Rechenzentrum in die Oracle Cloud - Übertragungsmethoden;...
 
TechEvent 2019: The sleeping Power of Data; Eberhard Lösch - Trivadis
TechEvent 2019: The sleeping Power of Data; Eberhard Lösch - TrivadisTechEvent 2019: The sleeping Power of Data; Eberhard Lösch - Trivadis
TechEvent 2019: The sleeping Power of Data; Eberhard Lösch - Trivadis
 

Wie kommt der Hint in das SQL, ohne die anwendung zu ändern?

  • 1. Wie kommt der Hint in das SQL? … ohne die Anwendung zu ändern … Mathias Zarick Principal Consultant BASEL BERN BRUGG GENF LAUSANNE ZÜRICH DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MÜNCHEN STUTTGART WIEN 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 1
  • 2. Vorstellung – Mathias Zarick Principal Consultant bei Trivadis Delphi GmbH in Wien 2014 © Trivadis Trainer Data Guard, Architektur und Interna für fortgeschrittene DBAs, Maximum Availability Architecture Workshop E-Mail: Mathias.Zarick@trivadis.com Hauptthemen: Oracle Datenbank Oracle Hochverfügbarkeitsprojekte (Real Application Clusters, Data Guard, Maximum Availability Architecture, Replikation mit Streams und GoldenGate) Backup/Recovery Entwicklungsleiter der Trivadis Toolbox Entwickler von TVD-Standby Forschungsprojekte im Trivadis Technology Center (TTC) 2 DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014
  • 3. Unser Unternehmen Trivadis ist führend bei der IT-Beratung, der Systemintegration, dem Solution-Engineering und der Erbringung von IT-Services mit Fokussierung auf und Technologien im D-A-CH-Raum. Unsere Leistungen erbringen wir aus den strategischen Geschäftsfeldern: Trivadis Services übernimmt den korrespondierenden Betrieb Ihrer IT Systeme. 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 B E T R I E B 3
  • 4. Mit über 600 IT- und Fachexperten bei Ihnen vor Ort 2014 © Trivadis 4 12 Trivadis Niederlassungen mit über 600 Mitarbeitenden 200 Service Level Agreements Mehr als 4'000 Trainingsteilnehmer Forschungs- und Entwicklungs-budget: CHF 5.0 Mio. / EUR 4.0 Mio. Finanziell unabhängig und nachhaltig profitabel Erfahrung aus mehr als 1'900 Projekten pro Jahr bei über 800 Kunden Stand 12/2013 Hamburg Düsseldorf Frankfurt Freiburg München Wien Basel Bern Zürich Lausanne 4 Stuttgart DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 4 Brugg
  • 5. Trivadis an der DOAG Ebene 3 - gleich neben der Rolltreppe Wir freuen uns auf Ihren Besuch. Denn mit Trivadis gewinnen Sie immer. 2014 © Trivadis 18.11.2014 5 DOAG 2014 - Wie kommt der Hint in das SQL?
  • 6. Wie kommt der Hint in das SQL? 1. Einführung 2. Stored Outlines 3. SQL Profiles 4. SQL Patches 5. SQL Plan Baselines 6. Allgemeines und Fazit 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 6
  • 7. 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 Einführung 7
  • 8. Was sind Hints? Hints ermöglichen, den Oracle Optimizer und/oder seine Entscheidungen zu beeinflussen wenn möglich, wird ihnen gefolgt Hints werden in Kommentaren nach dem ersten Schlüsselwort eines Query Blocks benutzt Das erste Zeichen im Kommentar muss ein + sein 2 Kategorien: Nicht-Optimizer Hints, z.B. APPEND, CACHE, MONITOR, GATHER_PLAN_STATISTICS, RESULT_CACHE, … Optimizer Hints, z.B. FULL, INDEX, LEADING, ORDERED, … Welche Hints gibt es? Siehe View v$sql_hint 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 8
  • 9. Warum (keine) Hints? Workaround für suboptimale Ausführungspläne Sollten keine permanente Lösung sein Die Daten können sich ändern, der Plan kann unangebracht werden Der Optimizer lernt in einer neueren Version dazu Nützlich in Testszenarien / Was-wäre-wenn-Analysen Einige Hints müssen verwendet werden, um ein spezielles Verhalten der Oracle Datenbank zu erreichen, z.B. APPEND, BIND_AWARE, RESULT_CACHE, … 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 9
  • 10. Jonathan Lewis’ Rules for Hinting http://jonathanlewis.wordpress.com/2008/05/02/rules-for-hinting/ 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 10
  • 11. Beispiel für diese Präsentation (1) Ursprüngliches Statement Ursprünglicher Plan 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 11 SELECT count(*) FROM t WHERE id=0815 SELECT * FROM table(dbms_xplan.display_cursor(format='BASIC')) ----------------------------------- | Id | Operation | Name | ----------------------------------- | 0 | SELECT STATEMENT | | | 1 | SORT AGGREGATE | | | 2 | INDEX UNIQUE SCAN| T_PK | -----------------------------------
  • 12. Beispiel für diese Präsentation (2) Alternatives Statement mit Hint Alternativer Plan 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 12 SELECT /*+ FULL(t) */ count(*) FROM t WHERE id=0815 SELECT * FROM table(dbms_xplan.display_cursor(format='BASIC')) ----------------------------------- | Id | Operation | Name | ----------------------------------- | 0 | SELECT STATEMENT | | | 1 | SORT AGGREGATE | | | 2 | TABLE ACCESS FULL| T | -----------------------------------
  • 13. Die Herausforderung Kein Zugriff auf die Applikation um das SQL zu ändern Der Hint muss auf irgendeine andere Weise injiziert werden SQL_ID btuu7yga9bcp1 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 13
  • 14. Wie kommt der Hint in das SQL? 1. Einführung 2. Stored Outlines 3. SQL Profiles 4. SQL Patches 5. SQL Plan Baselines 6. Allgemeines und Fazit 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 14
  • 15. 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 Stored Outlines 15
  • 16. Was sind Stored Outlines? Stored Outlines stellen Planstabilität durch das Speichern der Outline- Daten eines assoziierten Planes eines SQL Statements zur Verfügung Es werden alle Hints gespeichert, um den Ausführungsplan zu fixieren Die Assoziierung zwischen SQL und Stored Outline geschieht durch eine SQL Signatur, welche nach einer Normalisierung produziert wird Großbuchstaben – außer Literale Whitespace wird entfernt – Kommentare nicht Literal-insensitiver Match nur durch cursor_sharing=force Hints werden gespeichert in OUTLN.OL$ OUTLN.OL$HINTS OUTLN.OL$NODES 2014 © Trivadis Views CDB_/DBA_/ALL_/USER_OUTLINES CDB_/DBA_/ALL_/USER_OUTLINE_HINTS DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 16
  • 17. Unser Beispiel mit einer Stored Outline (1) Einmal pro Instanz oder für die gewünschten Sessions Achtung: use_stored_outlines kann nicht persistent im init.ora eingetragen werden, man braucht einen Startup Trigger Wir erzeugen 2 Outlines für den ursprünglichen und den gewünschten Plan 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 17 ALTER SYSTEM SET use_stored_outlines=TRUE; CREATE OUTLINE my_outline ON SELECT count(*) FROM t WHERE id=0815; CREATE OUTLINE my_outline_interim ON SELECT /*+ FULL(t) */ count(*) FROM t WHERE id=0815;
  • 18. Unser Beispiel mit einer Stored Outline (2) Outline Hints austauschen – das erste Set kommt zur zweiten Outline, das zweite Set zur ersten Outline 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 18 UPDATE outln.ol$hints SET ol_name=decode(ol_name,'MY_OUTLINE','MY_OUTLINE_INTERIM', 'MY_OUTLINE_INTERIM','MY_OUTLINE') WHERE ol_name IN ('MY_OUTLINE','MY_OUTLINE_INTERIM'); UPDATE outln.ol$ SET hintcount = ( SELECT count(*) FROM outln.ol$hints WHERE outln.ol$.ol_name = outln.ol$hints.ol_name ) WHERE outln.ol$.ol_name in ('MY_OUTLINE','MY_OUTLINE_INTERIM'); COMMIT;
  • 19. Ups! DML auf OUTLN Tables? Was ist das denn für ein Hack? Ist das erlaubt? Anerkannt durch „My Oracle Support - How to Specify Hidden Hints (Outlines) on SQL Statements in Oracle 8i (Doc ID 92202.1)” Komplettiert von Jonathan Lewis: Plan Stability in Oracle 8i/9i - http://www.jlcomp.demon.co.uk/04_outlines.rtf 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 19 full_outline.sql
  • 20. Verifikation Überprüfen, ob der gewünschte Plan verwendet wird 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 20 SELECT count(*) FROM t WHERE id=0815; SELECT * FROM table(dbms_xplan.display_cursor(format='basic +note')); ... ----------------------------------- | Id | Operation | Name | ----------------------------------- | 0 | SELECT STATEMENT | | | 1 | SORT AGGREGATE | | | 2 | TABLE ACCESS FULL| T | ----------------------------------- Note ----- - outline MY_OUTLINE used for this statement
  • 21. Zwischenbilanz: Stored Outlines 2014 © Trivadis Stored Outlines Verfügbar seit 8i Deprecated ? Seit 11g XE/SE/SE1 ? Ja Tuning Pack benötigt Nein Match wird nach Normalisierung durchgeführt Ja Literal-insensitiver Match (force_match=true) Nein Datenänderungen werden berücksichtigt Nein Nutzbar um einen Hint im SQL unwirksam zu machen Ja Kategorien für verschiedene Workloads und Perioden Ja gather_plan_statistics Hint injizieren Nein Parallelverarbeitung ändern Ja DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 21
  • 22. Wie kommt der Hint in das SQL? 1. Einführung 2. Stored Outlines 3. SQL Profiles 4. SQL Patches 5. SQL Plan Baselines 6. Allgemeines und Fazit 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 22
  • 23. 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 SQL Profiles 23
  • 24. Was sind SQL Profiles? SQL Profiles helfen dem Optimizer, einen besseren Ausführungsplan zu finden Werden durch SQL Tuning Advisor (oder manuell angelegt) Brauchen Tuning Pack (daher auch Enterprise Edition und Diagnostics Pack) Brauchen control_management_pack_access auf DIAGNOSTIC+TUNING gesetzt SQL Profiles speichern nicht alle (wie stored outlines) sondern nur einige Hints um den Ausführungsplan zu beeinflussen Assoziierung auf das SQL geschieht durch eine Signatur, welche nach Normalisierung erzeugt wird (es ist außerdem ein literal-insensitiver Match konfigurierbar) Hints sind gespeichert in sys.sqlobj$ sys.sqlobj$auxdata 2014 © Trivadis Views CDB_/DBA_/ALL_ /USER_SQL_PROFILES DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 24 sys.sql$text sys.sql$ (12c)
  • 25. Unser Beispiel mit einem SQL Profile Manuelle Erstellung des SQL Profile mit undokumentierter Prozedur force_match: Literal-insensitiver Match 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 25 BEGIN dbms_sqltune.import_sql_profile( name = 'MY_SQL_PROFILE', description = 'full table scan', sql_text = 'SELECT count(*) FROM t WHERE id=0815', force_match = true, profile = sqlprof_attr('FULL(@SEL$1 T@SEL$1)') ); END;
  • 26. Undokumentierte Prozeduren benutzen? Was ist das denn für ein Hack? Ist das erlaubt? full_profile_force_match.sql Man lese “My Oracle Support - SQLT Diagnostic Tool (Doc ID 215187.1)” Zip file sqlt.zip, script sqltutlcoe_xfr_sql_profile.sql 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 26 REM DESCRIPTION REM This script generates another that contains the commands to REM create a manual custom SQL Profile out of a known plan from REM memory or AWR. The manual custom profile can be implemented REM into the same SOURCE system where the plan was retrieved, REM or into another similar TARGET system that has same schema REM objects referenced by the SQL that generated the known plan.
  • 27. Verifikation Überprüfen, ob der gewünschte Plan verwendet wird 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 27 SELECT count(*) FROM t WHERE id=0815; SELECT * FROM table(dbms_xplan.display_cursor(format='basic +note')); ... ----------------------------------- | Id | Operation | Name | ----------------------------------- | 0 | SELECT STATEMENT | | | 1 | SORT AGGREGATE | | | 2 | TABLE ACCESS FULL| T | ----------------------------------- Note ----- - SQL profile MY_SQL_PROFILE used for this statement
  • 28. Zwischenbilanz: SQL Profiles 2014 © Trivadis SQL Profiles Verfügbar seit 10g Deprecated ? Nein XE/SE/SE1 ? Nein Tuning Pack benötigt Ja Match wird nach Normalisierung durchgeführt Ja Literal-insensitiver Match (force_match=true) Ja Datenänderungen werden berücksichtigt Einigermaßen Nutzbar um einen Hint im SQL unwirksam zu Ja machen Kategorien für verschiedene Workloads und Perioden Ja gather_plan_statistics Hint injizieren Ja Parallelverarbeitung ändern Ja DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 28
  • 29. Wie kommt der Hint in das SQL? 1. Einführung 2. Stored Outlines 3. SQL Profiles 4. SQL Patches 5. SQL Plan Baselines 6. Allgemeines und Fazit 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 29
  • 30. 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 SQL Patches 30
  • 31. Was sind SQL Patches? SQL Patches helfen dem Optimizer, einen alternativen Ausführungsplan zu 2014 © Trivadis finden Wurden designt, um Ausführungsfehler zu vermeiden, welche bei einem bestimmten Ausführungsschritt passieren und werden durch den SQL Repair Advisor (oder manuell) erstellt Auch in Standard Edition verfügbar, siehe http://www.oracle.com/webfolder/technetwork/de/community/dbadmin/tipps/advisor/index.html SQL Patches speichern nicht alle (wie stored outlines) sondern nur einige Hints, um den Ausführungsplan zu beeinflussen Assoziierung geschieht wieder durch dieselbe Signatur nach Normalisierung (Literal-insensitiver Match ist auch konfigurierbar) Hints sind gespeichert in sys.sqlobj$ sys.sqlobj$auxdata Views CDB_/DBA_/ALL_/USER_SQL_PATCHES DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 31 sys.sql$text sys.sql$ (12c)
  • 32. Unser Beispiel mit einem SQL Patch (1) Manuelle Erstellung eines SQL Patch mit undokumentiertem Package und Prozedur 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 32 BEGIN sys.dbms_sqldiag_internal.i_create_patch( sql_text = 'SELECT count(*) FROM t WHERE id=0815', hint_text = 'FULL(@SEL$1 T@SEL$1)', name = 'MY_SQL_PATCH'); END;
  • 33. Unser Beispiel mit einem SQL Patch (2) Text wird etwas länger, wenn wir literal-insensitiven Match (forced text match) brauchen 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 33 DECLARE v_name VARCHAR2(128); BEGIN v_name := sys.dbms_sqltune_internal.i_create_sql_profile( sql_text = 'SELECT count(*) FROM t WHERE id=0815', profile_xml = 'outline_datahint ![CDATA[FULL(@SEL$1 T@SEL$1)]] /hint/outline_data', is_patch = true, name = 'MY_SQL_PATCH', force_match = true); END;
  • 34. Undokumentierte Prozeduren benutzen? Was ist das denn für ein Hack? Ist das erlaubt? Lösung wird durch das Oracle Optimizer Team auf ihrem Blog vorgeschlagen: https://blogs.oracle.com/optimizer/entry/how_can_i_hint_a 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 34 full_patch_force_match.sql
  • 35. Verifikation Überprüfen, ob der gewünschte Plan verwendet wird 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 35 SELECT count(*) FROM t WHERE id=0815; SELECT * FROM table(dbms_xplan.display_cursor(format='basic +note')); ... ----------------------------------- | Id | Operation | Name | ----------------------------------- | 0 | SELECT STATEMENT | | | 1 | SORT AGGREGATE | | | 2 | TABLE ACCESS FULL| T | ----------------------------------- Note ----- - SQL patch MY_SQL_PATCH used for this statement
  • 36. Zwischenbilanz: SQL Patches 2014 © Trivadis SQL Patches Verfügbar seit 11g Deprecated ? Nein XE/SE/SE1 ? Ja Tuning Pack benötigt Nein Match wird nach Normalisierung durchgeführt Ja Literal-insensitiver Match (force_match=true) Ja Datenänderungen werden berücksichtigt Einigermaßen Nutzbar um einen Hint im SQL unwirksam zu Ja machen Kategorien für verschiedene Workloads und Perioden Ja gather_plan_statistics Hint injizieren Ja Parallelverarbeitung ändern Ja DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 36
  • 37. Wie kommt der Hint in das SQL? 1. Einführung 2. Stored Outlines 3. SQL Profiles 4. SQL Patches 5. SQL Plan Baselines 6. Allgemeines und Fazit 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 37
  • 38. 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 SQL Plan Baselines 38
  • 39. Was sind SQL Plan Baselines? SQL Plan Baselines sind Teil des SQL Plan Management Feature Es sind Objekte, welche vom Optimizer berücksichtigt werden Sie enthalten Pläne für bestimmte Statements, welche als Hints gespeichert 2014 © Trivadis sind Pläne können akzeptiert (verifiziert), fixed, enabled/disabled sein Keine weitere Lizenz https://blogs.oracle.com/optimizer/entry/does_the_use_of_sql aber sie funktionieren nicht in Standard Edition Assoziierung geschieht wieder durch dieselbe Signatur nach Normalisierung, ein literal-insensitiver Match ist leider nicht konfigurierbar Hints sind gespeichert in sys.sqlobj$ sys.sqlobj$auxdata Views CDB_/DBA_/ALL_/USER_SQL_PLAN_BASELINES DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 39 sys.sql$text sys.sql$ (12c)
  • 40. SQL Plan Baselines – Auswahl Ablauf (vereinfacht) 2014 © Trivadis 40 Akzeptiert? Akzeptierten Ausführungsplan benutzen Ausführungsplan zur History hinzufügen Wähle akzeptierten Ausführungsplan mit geringsten Kosten Ja Nein Ausführungsplan DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014
  • 41. Unser Beispiel mit einer SQL Plan Baseline (1) Wir müssen die SQL ID kennen, dann können wir den ungewünschten Plan aus dem Cursor Cache in eine Baseline laden Wir brauchen sql_handle und plan_name aus dba_sql_plan_baselines 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 41 DECLARE v_cnt NUMBER; BEGIN v_cnt := dbms_spm.load_plans_from_cursor_cache( sql_id='btuu7yga9bcp1'); END; SELECT sql_handle, sql_text, plan_name, description, enabled FROM dba_sql_plan_baselines WHERE sql_text LIKE 'SELECT count(*) FROM t WHERE id=0815'
  • 42. Unser Beispiel mit einer SQL Plan Baseline (2) Plan deaktivieren und optional umbenennen und kommentieren 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 42 DECLARE v_cnt NUMBER; BEGIN v_cnt := dbms_spm.alter_sql_plan_baseline( sql_handle = 'SQL_d7cd0a6e6c80df97', plan_name = 'SQL_PLAN_dgm8adtq81rwr916941b3', attribute_name = 'enabled', attribute_value = 'NO'); v_cnt := dbms_spm.alter_sql_plan_baseline( sql_handle = 'SQL_d7cd0a6e6c80df97', plan_name = 'SQL_PLAN_dgm8adtq81rwr916941b3', attribute_name = 'plan_name', attribute_value = 'NOT_DESIRED_PLAN'); v_cnt := dbms_spm.alter_sql_plan_baseline( sql_handle = 'SQL_d7cd0a6e6c80df97', plan_name = 'NOT_DESIRED_PLAN', attribute_name = 'description', attribute_value = 'original, but not desired plan'); END; sql_handle und plan_name stammen aus dba_sql_plan_baselines
  • 43. Unser Beispiel mit einer SQL Plan Baseline (3) Das Statement mit Hint ausführen, um es in den Cursor Cache zu laden sql_id und plan_hash_value dieses Statement mit Hint besorgen Den gewünschten Plan nun mit der bereits bestehenden Baseline assoziieren 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 43 SELECT /*+ FULL(t) */ count(*) FROM t WHERE id=0815 SELECT sql_id, plan_hash_value FROM v$sql WHERE sql_text LIKE 'SELECT /*+ FULL(t) */ count(*) FROM t WHERE id=0815' DECLARE v_cnt NUMBER; BEGIN v_cnt := dbms_spm.load_plans_from_cursor_cache( sql_id = 'buzbqk5t2m81y', plan_hash_value = '2966233522', sql_handle = 'SQL_d7cd0a6e6c80df97'); END; sql_id und plan_hash_value stammen aus v$sql sql_handle ist dieselbe wie zuvor
  • 44. Unser Beispiel mit einer SQL Plan Baseline (4) Optional den zweiten Plan umbenennen und kommentieren 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 44 DECLARE v_cnt NUMBER; BEGIN v_cnt := dbms_spm.alter_sql_plan_baseline( sql_handle = 'SQL_d7cd0a6e6c80df97', plan_name = 'SQL_PLAN_dgm8adtq81rwr3fdbb376', attribute_name = 'plan_name', attribute_value = 'DESIRED_PLAN'); v_cnt := dbms_spm.alter_sql_plan_baseline( sql_handle = 'SQL_d7cd0a6e6c80df97', plan_name = 'DESIRED_PLAN', attribute_name = 'description', attribute_value = 'desired plan introduced by the hint'); END; sql_handle ist dieselbe wie zuvor plan_name stammt aus dba_sql_plan_baselines
  • 45. Einen Plan zu einem anderen Statement assoziieren? Was ist das denn für ein Hack? Ist das erlaubt? Die gezeigten Schritte werden durch Maria Colgan (ehemals Product Manager Oracle Optimizer) in verschiedenen Posts auf https://blogs.oracle.com/optimizer empfohlen Ebenso in ihrer Präsentation „Harnessing the Power of Optimizer Hints” Aus dieser Präsentation stammt das Mantra „If you can hint it, baseline it“ Außerdem – alle benutzten Statements sind regulär dokumentiert 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 45 full_plan_baseline.sql
  • 46. Verifikation Überprüfen, ob der gewünschte Plan verwendet wird 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 46 SELECT count(*) FROM t WHERE id=0815; SELECT * FROM table(dbms_xplan.display_cursor(format='basic +note')); ... ----------------------------------- | Id | Operation | Name | ----------------------------------- | 0 | SELECT STATEMENT | | | 1 | SORT AGGREGATE | | | 2 | TABLE ACCESS FULL| T | ----------------------------------- Note ----- - SQL plan baseline DESIRED_PLAN used for this statement
  • 47. Zwischenbilanz: SQL Plan Baselines 2014 © Trivadis SQL Plan Baselines Verfügbar seit 11g Deprecated ? Nein XE/SE/SE1 ? Nein Tuning Pack benötigt Nein Match wird nach Normalisierung durchgeführt Ja Literal-insensitiver Match (force_match=true) Nein Datenänderungen werden berücksichtigt Ja Nutzbar um einen Hint im SQL unwirksam zu Ja machen Kategorien für verschiedene Workloads und Perioden Nein gather_plan_statistics Hint injizieren Nein Parallelverarbeitung ändern Ja DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 47
  • 48. Wie kommt der Hint in das SQL? 1. Einführung 2. Stored Outlines 3. SQL Profiles 4. SQL Patches 5. SQL Plan Baselines 6. Allgemeines und Fazit 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 48
  • 49. 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 Allgemeines und Fazit 49
  • 50. Ungewünschte Hints unwirksam machen Alle gezeigten Techniken können verwendet werden, um ungewünschte Hints in einem SQL statement unwirksam zu machen, z.B. Einfachster Weg kann auch auf System-Ebene gesetzt werden Ansonsten einen konträren Hint oder den IGNORE_OPTIM_EMBEDDED_HINTS Hint verwenden 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 50 SELECT /*+ FULL(t) */ count(*) FROM t WHERE id=0815 ALTER SESSION SET _optimizer_ignore_hints = true
  • 51. Unhint mit Stored Outline Für Stored Outlines gibt es einen Spezialfall, wir können die Hints auf einen einzigen reduzieren: 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 51 CREATE OUTLINE my_outline ON SELECT /*+ FULL(t) */ count(*) FROM t WHERE id=0815; DELETE FROM outln.ol$hints WHERE ol_name = 'MY_OUTLINE' AND hint_text != 'IGNORE_OPTIM_EMBEDDED_HINTS' ; UPDATE outln.ol$ SET hintcount = 1 WHERE outln.ol$.ol_name = 'MY_OUTLINE' ; COMMIT; unhint_patch.sql or unhint_profile.sql maybe: unhint_plan_baseline.sql
  • 52. Outlines können zu SQL Plan Baselines migriert werden Die Migration erfolgt mit dem dbms_spm Package 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 52 variable v clob exec :v := dbms_spm.migrate_stored_outline('outline_name','MY_OUTLINE'); DROP OUTLINE my_outline;
  • 53. Planstabilitäts-Objekte transferieren Stored Outlines: Inhalte der outln Tabellen transferieren, siehe Troubleshooting Oracle Performance 2 / Christian Antognini Für SQL profiles, SQL patches, SQL plan baselines gibt es unpack/pack Prozeduren Staging Tabelle erzeugen - dbms_sqltune.create_stgtab_sqlprof - dbms_sqldiag.create_stgtab_sqlpatch - dbms_spm.create_stgtab_baseline Die Staging Tabellen haben dieselbe Struktur man kann sogar ein und dieselbe Tabelle als ein Container für alle drei Typen verwenden Objekt packen, Tabelle transferieren, Objekt auspacken (unpack) - dbms_sqltune.(un)pack_stgtab_sqlprof - dbms_sqldiag.(un)pack_stgtab_sqlpatch - dbms_spm.(un)pack_stgtab_baseline 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 53
  • 54. Besondere non-Optimizer Hints Tuning Sessions können von Plan Statistiken profitieren Ein GATHER_PLAN_STATISTICS Hint kann in eine bestimmte sql_id eingefügt 2014 © Trivadis werden Funktioniert nur mit SQL profiles und SQL patches Manchmal möchte man Result Cache für bestimmte sql_id einschalten Ein Weg wäre Result Cache auf Objektebene auf force zu setzen Wenn man es aber nicht für alle Queries auf dem Objekt einschalten möchte: benutze man einen unsichtbaren RESULT_CACHE Hint Bei meinen Tests funktionierte das nur mit SQL patches Andere gute Beispiele: APPEND, BIND_AWARE, CACHE, DYNAMIC_SAMPLING, MONITOR Im Allgemeinen können alle diese Hints „ SELECT name FROM v$sql_hint WHERE version_outline IS NULL “ nicht in Stored Outlines und SQL plan baselines, aber in manchen Fällen in SQL Profiles und/oder SQL Patches verwendet werden DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 54 result_cache_patch.sql append_patch.sql or append_profile.sql maybe: gather_plan_statistics_patch.sql
  • 55. Privilegien Stored Outlines create any outline, alter any outline, drop any outline alter system or alter session DML Privilegien auf 3 outln Tabellen SQL Profiles und SQL Patches create any sql profile, alter any sql profile, drop any sql profile (deprecated) administer sql management object Für einige gezeigte Fälle: execute on sys.dbms_sqldiag_internal, sys.dbms_sqltune_internal SQL Plan Baselines administer sql management object Für einige gezeigte Fälle: select on v$sql, dba_sql_plan_baselines Im Allgemeinen ist es hilfreich, folgende Rechte zu haben: select on cdb_/dba_ outlines, sql_profiles, sql_patches, sql_plan_baselines Oder select any dictionary 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 55
  • 56. Zusammenfassender Vergleich 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 56 Stored Outlines SQL Profiles SQL Patches SQL Plan Baselines Verfügbar seit 8i 10g 11g 11g Deprecated ? Seit 11g Nein Nein Nein XE/SE/SE1 ? Ja Nein Ja Nein Tuning Pack benötigt Nein Ja Nein Nein Match nach Normalisierung Ja Ja Ja Ja Literal-insensitiver Match (force_match=true) Nein Ja Ja Nein Datenänderungen werden berücksichtigt Nein Etwas Etwas Ja Nutzbar, um Hints in SQL unwirksam zu machen Ja Ja Ja Ja Kategorien für verschiedene Workloads und Ja Ja Ja Nein Perioden gather_plan_statistics Hint Nein Ja Ja Nein result_cache Hint Nein Nein Ja Nein Parallelverarbeitung ändern Ja Ja Ja Ja
  • 57. 2014 © Trivadis Fazit Es ist möglich, unsichtbar Hints zu injizieren, auch dafür, um ungewünschte Hints zu „entfernen“ Oracle treibt SMB und SQL Plan Baselines als zukünftiges Planstabilitätsfeature voran 4 verschiedene Technologien, jede hat seine eigenen Stärken und Limitierungen Die Welt ist nicht nur schwarz und weiß Manchmal auch ein bisschen rot, gelb und grün ☺ Interessanterweise zeigen SQL Patches eine Menge grün Testen Sie sorgfältig und bedenken Sie, dass Hints in den meisten Fällen nur Workarounds sind! DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 57
  • 58. Weitere Informationen... www.trivadis.com Für Quellen siehe nächste Seite 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 58
  • 59. Quellenangabe Maria Colgan - How do I migrate stored outlines to SQL Plan Management? - https://blogs.oracle.com/optimizer/entry/how_do_i_migrate_stored Maria Colgan - How do I deal with a third party application that has embedded hints that result in a sub-optimal execution plan in my environment? - https://blogs.oracle.com/optimizer/entry/how_do_i_deal_with_a_third_party_application_that_has_embedded_h ints_that_result_in_a_sub-optimal_ex Maria Colgan - Oracle Database Optimizer: Harnessing the Power of Optimizer Hints - http://www.nocoug.org/download/2012-11/NoCOUG_201211_Maria_Colgan_Optimizer_Hints.pdf Allison / Oracle Optimizer Blog - Additional Information on SQL Patches - https://blogs.oracle.com/optimizer/entry/additional_information_on_sql_patches Allison / Oracle Optimizer Blog - What should I do with old hints in my workload? - https://blogs.oracle.com/optimizer/entry/what_should_i_do_with_old_hints_in_my_workload Allison / Oracle Optimizer Blog - Using SQL Patch to add hints to a packaged application - https://blogs.oracle.com/optimizer/entry/how_can_i_hint_a Christian Antognini - SQL Profiles - http://antognini.ch/papers/SQLProfiles_20060622.pdf Christian Antognini - Troubleshooting Oracle Performance My Oracle Support - How to Specify Hidden Hints (Outlines) on SQL Statements in Oracle 8i (Doc ID 92202.1) Enkitec Blog - http://blog.enkitec.com/enkitec_scripts/exchange_outline_hints.sql Jonathan Lewis - Plan Stability in Oracle 8i/9i - http://www.jlcomp.demon.co.uk/04_outlines.rtf Jonathan Lewis - Hints on Hints - http://jonathanlewis.files.wordpress.com/2009/05/hints_on_hints.pdf Jonathan Lewis - Rules for Hinting - http://jonathanlewis.wordpress.com/2008/05/02/rules-for-hinting/ Kerry Osborne - Licensing Requirements for SQL Profiles - http://kerryosborne.oracle-guy. com/2011/01/licensing-requirements-for-sql-profiles/ 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014 59
  • 60. Fragen und Antworten... Mathias Zarick Principal Consultant +43 664 85 44 295 Mathias.Zarick@trivadis.com BASEL BERN BRUGG GENF LAUSANNE ZÜRICH DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. HAMBURG MÜNCHEN STUTTGART WIEN 2014 © Trivadis DOAG 2014 - Wie kommt der Hint in das SQL? 18.11.2014