SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Rund um SQL Tuning Sets
Ulrike Schwinn (email: ulrike.schwinn@oracle.com)
Oracle Business Unit Database
ORACLE Deutschland B.V. & Co. KG
Motivation
• Sie wollen ...
• Mehr über einen Workload erfahren ...
• Ausführungspläne aus einem Workload erhalten ...
• SQL Plan Baselines nutzen bzw. erzeugen ...
• Advisors wie SQL Tuning oder SQL Access verwenden ...
• SQL Performance Analyzer verwenden ...
• Datenbankobjekte, die
• SQL Text
• Execution Kontext (Parsing User, Bind Werte, …)
• Execution Statistiken (Buffer Gets, CPU, #Executions, …)
• Plan
• Plan Statistiken usw.
beinhalten.
• Persistente Speicherung im SYSAUX Tablespace
• Größe abhängig von SQL Text, Unterschiede, Binds etc...
• Geringer Performance Overhead
Was sind SQL Tuning Sets?
Hintergrundinfo ... Objekttyp Nutzung
CREATE TYPE sqlset_row AS object (
sql_id VARCHAR(13),
force_matching_signature NUMBER,
sql_text CLOB,
object_list sql_objects,
bind_data RAW(2000),
parsing_schema_name VARCHAR2(30),
module VARCHAR2(48),
action VARCHAR2(32),
elapsed_time NUMBER,
cpu_time NUMBER,
buffer_gets NUMBER,
disk_reads NUMBER,
direct_writes NUMBER,
rows_processed NUMBER, …
optimizer_cost NUMBER, optimizer_env RAW(2000),
first_load_time VARCHAR2(19),
…
plan_hash_value NUMBER,
sql_plan sql_plan_table_type,
bind_list sql_binds)
SQL Tuning Sets einfach selektieren
• Überblick über DBA_SQLSET
• Details in DBA_SQLSET_STATEMENTS
NAME CREATED STATEMENT_COUNT
------------------------------ --------- ---------------
REPLAY_us_r_44488776 20-MAR-12 1487
SCOTT_STS 21-MAR-12 19
SH_STS 20-JAN-11 12
SPA_DML 28-MAR-12 12
SQL_TEXT EXECU BUFFER_GETS
-------------------------------------- ----- -----------
update emp set empno=1 1 97
insert into test_emp select * from emp 1 55
update test_emp set sal=1 1 37
insert into test_emp values (1,'t', 2 4
't',1,sysdate,1,0,10)
SQL Tuning Sets selektieren im EM
SQL Tuning Sets selektieren im EM
Grundlegendes zu STS
• Seit Oracle 10g automatisch ohne Installation
verfügbar
• Integriert in Enterprise Manager und im Package
DBMS_SQLTUNE
• Vor. : Privileg ADMINISTER SQL TUNING SET
• Lizenzierung über Tuning Pack
• Ausnahme: enthalten in Lizenz von Real Application Testing
• Parameter: control_management_pack_access
Administration mit DBMS_SQLTUNE
Select
Load
Create
Update/Delete
Drop
• Erzeugen eines neuen leeren STS
• Voraussetzung vor dem Laden
• create_sqlset(sqlset_name, desc,…
• Ändern innerhalb eines STS
• update_sqlset(sqlset_name, sql_id,…
• Löschen von Statements eines STS
• delete_sqlset(sqlset_name, filter …
• Löschen des gesamten Sets
• drop_sqlset(sqlset_name)
execute dbms_sqltune.create_sqlset ('STS1')
 STS können …
 aus dem Cursor Cache (auch über bestimmten Zeitraum)
 aus AWR Snapshots
 aus SQL
 als Untermenge eines existierenden STS
 während des Captures bzw. während des Replays
 aus 10046 Trace Dateien
erzeugt werden.
 Schnittstellen
 EM
 Package DBMS_SQLTUNE
Wie werden SQL Tuning Sets befüllt?
Erste Beispiele
• Aus dem Cursor Cache mit mehr als 500 Buffer
Gets
• Aus dem Cursor Cache über eindeutige SQL_ID
SELECT sql_id, sql_text FROM
table(dbms_sqltune.select_cursor_cache('buffer_gets >
500')) ORDER BY sql_id;
SELECT sql_id, plan_hash_value FROM
table(dbms_sqltune.select_cursor_cache('sql_id =
''gmnd4yt3c4zyw'''))
ORDER BY sql_id, plan_hash_value;
Mit PL/SQL laden ...
• Aus dem Cursor Cache mit SQL_ID laden
• Aus dem Cursor Cache über eine bestimmte Zeit
DECLARE
cur sys_refcursor;
BEGIN
open cur for
select value(p) from table(dbms_sqltune.select_cursor_cache
('sql_id = ''gwj1f651t001a''')) p;
dbms_sqltune.load_sqlset(sqlset_name => 'STS_ID',
populate_cursor => cur);
close cur;
END;
execute dbms_sqltune.capture_cursor_cache_sqlset
(sqlset_name => 'STS_CAPTURE',
time_limit => 3600,
repeat_interval => 600,
basic_filter => 'sql_text like ''%emp%'' and buffer_gets> 1000')
Im Enterprise Manager
• Filter setzen
Im Enterprise Manager
• Über einen bestimmten Zeitraum (auch inkrementell)
... aus Snapshots
• Aus Snapshots mit Filter auf SYS
DECLARE
cur sys_refcursor;
BEGIN
open cur for
select value(p) from table(
dbms_sqltune.select_workload_repository
(begin_snap => 20184,
end_snap => 20185,
basic_filter => 'parsing_schema_name <> ''SYS''')) p;
dbms_sqltune.load_sqlset('STS_SNAP', cur);
close cur;
END;
/
... aus SQL Traces
• Erzeuge 10046 Trace
• Erzeuge logisches Directory TRACE_DIR
• Lade SQL in STS
DECLARE
cur sys_refcursor;
BEGIN
open cur for
select value(p) from table(dbms_sqltune.select_sql_trace
(directory => 'TRACE_DIR',
file_name => '%.trc')) p;
dbms_sqltune.load_sqlset('STS_TRACE', cur);
close cur;
END;
/
... aus SQL Traces in andere DB
• Zusätzliche Mapping Tabelle erzeugen
• Mapping Tabelle und Trace Datei wird auf Ziel DB
kopieren
• Laden mit
CREATE TABLE mapping AS
SELECT object_id id, owner, substr(object_name, 1, 30) name
FROM dba_objects
UNION ALL
SELECT user_id id, username owner, null name
FROM dba_users;
… dbms_sqltune.select_sql_trace(directory=>'TRACE_DIR',
file_name => '%.trc',
mapping_table_name => 'MAPPING',
mapping_table_owner => 'HR'))…
Wenn STS zu groß sind ...
• oder dbms_sqltune.select_sqlset
Welche Filterkriterien gibt es?
• sql_id
• sql_text
• parsing_schema_name
•module
• action
• elapsed_time
• cpu_time
• buffer_gets
• disk_reads
• direct_writes
•rows_processed
• ...
Transportieren mit Export/Import
1. Kopiere STS vom SYS Schema in Staging Tabelle (“pack”)
2. Transportiere Staging Tabelle zum Testsystem (Data Pump,
db link, etc.)
3. Kopiere STS aus der Staging Tabelle ins SYS Schema
(“unpack”)
“Pack”
SYSAUX
ADV
AWR
STS
STGTAB STGTAB SYSAUX
STS
AWR
ADV
“Unpack”Transport
Im Enterprise Manager
 Über DBA_SQLSET_PLANS
• Über DBMS_XPLAN
Szenario 1: Ausführungspläne aus STS
SELECT operation, options, object_name, object_type, cost
FROM dba_sqlset_plans
WHERE sql_id = '7kg0av34u0r1k';
SELECT * FROM table
(dbms_xplan.display_sqlset(
sqlset_name => 'SQL_WORKLOAD1',
sql_id => '7kg0av34u0r1k',
format => 'ADVANCED',
sqlset_owner => 'US'))
Szenario 1 ... das Ergebnis ...
...
Outline Data
-------------
/*+
BEGIN_OUTLINE_DATA
IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE('11.2.0.3')
DB_VERSION('11.2.0.3')
ALL_ROWS
OUTLINE_LEAF(@"SEL$1")
INDEX_RS_ASC(@"SEL$1" "COMP"@"SEL$1" ("COMP"."ORT"))
END_OUTLINE_DATA
*/
Peeked Binds (identified by position):
--------------------------------------
1 - :ALLOW_BINDS (VARCHAR2(30), CSID=873): 'Munich'
• Vorhersehbare und
garantierte Planentwicklung
• Identifizierung sich wiederholender Statements
=> Statement Log
• Speicherung der SQL Pläne => SQL Plan History
• Speicherung der verifizierten/akzeptierten SQL Pläne =>
SQL Plan Baseline
• Falls Veränderung und somit neuer Plan eintritt
=> Nutzung der SQL Plan Baseline und Speicherung des
neuen Ausführungsplans in SQL Plan History (zur Verifikation)
• Setup über
• OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES=TRUE/FALSE
• OPTIMIZER_USE_SQL_PLAN_BASELINES=TRUE/FALSE
Szenario 2: SQL Plan Management
Plan history
HJ
HJ
GB
Plan baseline
Statement log
 Upgrade von 10gR2 oder 11g
Test Umgebung mit STS
 STS sind getuned
 Transport des STS auf
Produktion mit Export/Import
 Generierung von
SQL Plan Baselines aus STS
mit
dbms_spm.load_plans_from_sqlset
 Auch möglich:
direkter Export/Import
von SQL Plan Baselines
Szenario 2: SQL Plan Baselines
Plan History
HJ
GB
HJ
Upgrade bzw. ge-tunte Umgebung
Production Database
keine Plan
Regression
HJ
GB
HJ
HJ
GB
HJ
Development/Test Database
Ge-tuned
HJ
GB
HJ
Staging Tabelle
DBA
Plan History
 Generierung von SQL Plan Baselines mit Filterkriterien
• Überprüfung mit DBA_SQL_PLAN_BASELINES
Szenario 2: SQL Plan Baselines
variable pls number;
execute pls := dbms_spm.load_plans_from_sqlset(
sqlset_name => 'STS_WORKLOAD1',
basic_filter => 'sql_text like ''%select%''');
PLAN_NAME ACC ENA FIX
------------------------------ --- --- ---
SQL_TEXT
-----------------------------------------------------------
SQL_PLAN_axcu6w1bk1nyue451c073 YES YES NO
select /*+ use_nl(c) ordered parallel*/ count(*)
from sh.sales s,sh.customers c
• SQL Advisor sind Advisor die bei Tuning von SQL
Statements helfen
• 2 Arten: SQL Tuning und SQL Access Advisor
• Nutzbar über Enterprise Manager, teilweise
SQL*Developer und Packages DBMS_SQLTUNE/
DBMS_ADVISOR
• SQL Tuning Sets sind Voraussetzung bei der manuellen
Nutzung der beiden Advisors
• Voraussetzung: Tuning Pack
Szenario 3: SQL Advisor
• SQL Tuning Advisor
• Manuell bzw. auch automatisch in Automated MaintenanceTasks
• Aufgaben: Überprüfung von Statistiken,
Zugriffsstrukturen, SQL und Profiles
• Ergebnis/Findings:
• Erneuerung von Statistiken
• Restrukturierung von SQL
• SQL Profiles
• Alternative Pläne
• SQL Access Advisor
• Ermittelt geeignete Zugriffs (Access)- Strukturen wie B*/Bitmap,
Function Based Index, Materialized Views, Logs und Partitionen
• Resultat/Empfehlung: DDL-Skript zum Ausführen (CREATE, DROP,
DBMS_STATS...)
Szenario 3: SQL Advisor Funktionsweise
Szenario 3: Ergebnis SQL Tuning
Szenario 3: SQL Access Advisor
DECLARE
t_id number;
t_name varchar2(255);
BEGIN
dbms_advisor.create_task(dba_advisor.sqlaccess_advisor, t_id, t_name);
dbms_advisor.add_sts_ref(t_name,'US','SQL_WORKLOAD1');
dbms_advisor.set_task_parameter(t_name,'ANALYSIS_SCOPE','ALL');
dbms_advisor.execute_task(t_name);
dbms_advisor.create_file(dbms_advisor.get_task_script(t_name),'HOME','s.sql');
END;
/
Bericht anzeigen
u.
Implementierung
Tuning Task
erzeugen
SQL
Tuning Task
ausführen
Advisor Framework
(dba/user views)
Parametrisierung Bericht
erzeugen
Eingabe
lesen
Resultat
schreiben
Szenario 3: Ergebnis SQL Access
Rem SQL Access Advisor: Version 11.2.0.3.0 - Production
Rem
Rem Username: SYS
Rem Task: TASK_34528
Rem Execution date:
Rem
CREATE MATERIALIZED VIEW LOG ON
"US"."COMP"
WITH ROWID, SEQUENCE("ORT","JAHR")
INCLUDING NEW VALUES;
CREATE MATERIALIZED VIEW "SYS"."MV$$_86E00000"
REFRESH FAST WITH ROWID
ENABLE QUERY REWRITE
AS SELECT US.COMP.ORT C1, MAX("US"."COMP"."JAHR") M1, COUNT(*) M2 FROM US.CO
MP GROUP
BY US.COMP.ORT;
begin
dbms_stats.gather_table_stats('"SYS"','"MV$$_86E00000"',NULL,dbms_stats.auto_s
ample_size);
end;
Szenario 3: Resultat im EM
Szenario 4: SQL Performance Analyzer
• Vor: Erfasse SQL als STS und transportiere STS
• Ausführung VORHER mit SPA
• Veränderungen durchführen
• Ausführung NACHHER mit SPA
• Performance Vergleich mit SPA und Tuning
SQL
Tuning
Set
SQL Plan + Stats
Pre-Change Test
SQL Plans + Stats
Post-Change Test
Vergleich der SQL
Performance
Ergebnis Report
SPA Report: Ein Beispiel
Report im Enterprise Manager
• optional
Im Detail
Execution
Plan 1
Execution
Plan 2
 STS Teilmenge bestehend aus „regressed“ Statements
• Laden als SQL Plan Baselines aus STS (siehe Szenario 2)
Szenario 5: SQL Plan Baselines und SPA
execute dbms_sqltune.create_sqlset (sqlset_name => 'SUB_STS1',
description => 'Regressed Statements');
declare
sqlset_cur dbms_sqltune.sqlset_cursor;
begin
open sqlset_cur for
select value(p) from table(dbms_sqltune.select_sqlpa_task
(task_name => 'TASK_21137',
execution_name => 'Vergleich1',
level_filter => 'REGRESSED')) p;
dbms_sqltune.load_sqlset('SUB_STS1', sqlset_cur);
close sqlset_cur;
end;
/
 Selektive Auswahl von Statements über unterschiedliche
Methoden ( Cache, Snapshots, SQL-Ids, Trace etc.)
 Persistente Speicherung in der Datenbank
 Kann auf andere DBs übertragen werden
 Voraussetzung für unterschiedliche Tuning Tasks z.B. für
SQL Tuning Advisor oder SQL Access Advisor
 Vereinfacht das Tuning von SQL Statements =>
Generierung von SQL Plan Baselines
Vorteile
• Handbücher
• Performance Guide
• Package Reference Guide
• Deutsche Datenbank Community
• Aktuelle Informationen
• blogs.oracle.com/dbacommunity_deutsch
• SQL Tuning Sets im Einsatz Teil 1 und Teil 2
Informationen

Weitere ähnliche Inhalte

Andere mochten auch

Oracle SQL Performance Tuning and Optimization v26 chapter 1
Oracle SQL Performance Tuning and Optimization v26 chapter 1Oracle SQL Performance Tuning and Optimization v26 chapter 1
Oracle SQL Performance Tuning and Optimization v26 chapter 1Kevin Meade
 
Tanel Poder Oracle Scripts and Tools (2010)
Tanel Poder Oracle Scripts and Tools (2010)Tanel Poder Oracle Scripts and Tools (2010)
Tanel Poder Oracle Scripts and Tools (2010)Tanel Poder
 
Tanel Poder - Scripts and Tools short
Tanel Poder - Scripts and Tools shortTanel Poder - Scripts and Tools short
Tanel Poder - Scripts and Tools shortTanel Poder
 
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2Tanel Poder
 
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1Tanel Poder
 
Troubleshooting Complex Performance issues - Oracle SEG$ contention
Troubleshooting Complex Performance issues - Oracle SEG$ contentionTroubleshooting Complex Performance issues - Oracle SEG$ contention
Troubleshooting Complex Performance issues - Oracle SEG$ contentionTanel Poder
 
Modern Linux Performance Tools for Application Troubleshooting
Modern Linux Performance Tools for Application TroubleshootingModern Linux Performance Tools for Application Troubleshooting
Modern Linux Performance Tools for Application TroubleshootingTanel Poder
 
Low Level CPU Performance Profiling Examples
Low Level CPU Performance Profiling ExamplesLow Level CPU Performance Profiling Examples
Low Level CPU Performance Profiling ExamplesTanel Poder
 
Oracle db performance tuning
Oracle db performance tuningOracle db performance tuning
Oracle db performance tuningSimon Huang
 
Oracle sql high performance tuning
Oracle sql high performance tuningOracle sql high performance tuning
Oracle sql high performance tuningGuy Harrison
 

Andere mochten auch (18)

Oracle SQL Performance Tuning and Optimization v26 chapter 1
Oracle SQL Performance Tuning and Optimization v26 chapter 1Oracle SQL Performance Tuning and Optimization v26 chapter 1
Oracle SQL Performance Tuning and Optimization v26 chapter 1
 
Oracle sql tuning
Oracle sql tuningOracle sql tuning
Oracle sql tuning
 
Delphix Patching Epiphany
Delphix Patching EpiphanyDelphix Patching Epiphany
Delphix Patching Epiphany
 
ASH and AWR on DB12c
ASH and AWR on DB12cASH and AWR on DB12c
ASH and AWR on DB12c
 
Oracle DB 12c SQL Tuning
Oracle DB 12c SQL TuningOracle DB 12c SQL Tuning
Oracle DB 12c SQL Tuning
 
Snapper
SnapperSnapper
Snapper
 
Tanel Poder Oracle Scripts and Tools (2010)
Tanel Poder Oracle Scripts and Tools (2010)Tanel Poder Oracle Scripts and Tools (2010)
Tanel Poder Oracle Scripts and Tools (2010)
 
Tanel Poder - Scripts and Tools short
Tanel Poder - Scripts and Tools shortTanel Poder - Scripts and Tools short
Tanel Poder - Scripts and Tools short
 
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2
 
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1
 
Troubleshooting Complex Performance issues - Oracle SEG$ contention
Troubleshooting Complex Performance issues - Oracle SEG$ contentionTroubleshooting Complex Performance issues - Oracle SEG$ contention
Troubleshooting Complex Performance issues - Oracle SEG$ contention
 
Modern Linux Performance Tools for Application Troubleshooting
Modern Linux Performance Tools for Application TroubleshootingModern Linux Performance Tools for Application Troubleshooting
Modern Linux Performance Tools for Application Troubleshooting
 
Les 15 perf_sql
Les 15 perf_sqlLes 15 perf_sql
Les 15 perf_sql
 
Agile DBA
Agile DBA Agile DBA
Agile DBA
 
Low Level CPU Performance Profiling Examples
Low Level CPU Performance Profiling ExamplesLow Level CPU Performance Profiling Examples
Low Level CPU Performance Profiling Examples
 
Oracle db performance tuning
Oracle db performance tuningOracle db performance tuning
Oracle db performance tuning
 
Analyzing awr report
Analyzing awr reportAnalyzing awr report
Analyzing awr report
 
Oracle sql high performance tuning
Oracle sql high performance tuningOracle sql high performance tuning
Oracle sql high performance tuning
 

Ähnlich wie SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios

Datentransfer mit Oracle Tools
Datentransfer mit Oracle ToolsDatentransfer mit Oracle Tools
Datentransfer mit Oracle ToolsChristian Gohmann
 
Datenbank-Hausputz für Einsteiger
Datenbank-Hausputz für EinsteigerDatenbank-Hausputz für Einsteiger
Datenbank-Hausputz für EinsteigerMarkus Flechtner
 
Oracle workshop sessiontracing
Oracle workshop sessiontracingOracle workshop sessiontracing
Oracle workshop sessiontracingciganek
 
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...Informatik Aktuell
 
18c: private temporary tables
18c: private temporary tables18c: private temporary tables
18c: private temporary tablesUlrike Schwinn
 
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)Ulrike Schwinn
 
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Ulrike Schwinn
 
Oracle Text 12c New Features
Oracle Text 12c New FeaturesOracle Text 12c New Features
Oracle Text 12c New FeaturesUlrike Schwinn
 
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...Peter Ramm
 
Oracle Old Features DOAG 2011
Oracle Old Features DOAG 2011Oracle Old Features DOAG 2011
Oracle Old Features DOAG 2011Uwe Küchler
 
Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbaseStefan Frömken
 
Hybrid Partitioned Tables in Oracle Database 19c
Hybrid Partitioned Tables in Oracle Database 19cHybrid Partitioned Tables in Oracle Database 19c
Hybrid Partitioned Tables in Oracle Database 19cUlrike Schwinn
 
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG KonferenzDomino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenzpanagenda
 
MySQL Performance Tuning für Oracle-DBA's
MySQL Performance Tuning für Oracle-DBA'sMySQL Performance Tuning für Oracle-DBA's
MySQL Performance Tuning für Oracle-DBA'sFromDual GmbH
 
Oracle Datenbank-Architektur
Oracle Datenbank-ArchitekturOracle Datenbank-Architektur
Oracle Datenbank-ArchitekturMarkus Flechtner
 
Oracle12c für Entwickler
Oracle12c für EntwicklerOracle12c für Entwickler
Oracle12c für EntwicklerCarsten Czarski
 
Oracle12c für Entwickler
Oracle12c für EntwicklerOracle12c für Entwickler
Oracle12c für Entwickleroraclebudb
 
Docker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DBDocker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DBPeter Ramm
 

Ähnlich wie SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios (20)

Datentransfer mit Oracle Tools
Datentransfer mit Oracle ToolsDatentransfer mit Oracle Tools
Datentransfer mit Oracle Tools
 
Datenbank-Hausputz für Einsteiger
Datenbank-Hausputz für EinsteigerDatenbank-Hausputz für Einsteiger
Datenbank-Hausputz für Einsteiger
 
Oracle workshop sessiontracing
Oracle workshop sessiontracingOracle workshop sessiontracing
Oracle workshop sessiontracing
 
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
 
18c: private temporary tables
18c: private temporary tables18c: private temporary tables
18c: private temporary tables
 
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
 
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
 
Oracle Text 12c New Features
Oracle Text 12c New FeaturesOracle Text 12c New Features
Oracle Text 12c New Features
 
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
 
01 sqlplus
01 sqlplus01 sqlplus
01 sqlplus
 
Oracle Old Features DOAG 2011
Oracle Old Features DOAG 2011Oracle Old Features DOAG 2011
Oracle Old Features DOAG 2011
 
Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit Extbase
 
Hybrid Partitioned Tables in Oracle Database 19c
Hybrid Partitioned Tables in Oracle Database 19cHybrid Partitioned Tables in Oracle Database 19c
Hybrid Partitioned Tables in Oracle Database 19c
 
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG KonferenzDomino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
 
MySQL Performance Tuning für Oracle-DBA's
MySQL Performance Tuning für Oracle-DBA'sMySQL Performance Tuning für Oracle-DBA's
MySQL Performance Tuning für Oracle-DBA's
 
Oracle Datenbank-Architektur
Oracle Datenbank-ArchitekturOracle Datenbank-Architektur
Oracle Datenbank-Architektur
 
Explain explain
Explain explainExplain explain
Explain explain
 
Oracle12c für Entwickler
Oracle12c für EntwicklerOracle12c für Entwickler
Oracle12c für Entwickler
 
Oracle12c für Entwickler
Oracle12c für EntwicklerOracle12c für Entwickler
Oracle12c für Entwickler
 
Docker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DBDocker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DB
 

SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios

  • 1. Rund um SQL Tuning Sets Ulrike Schwinn (email: ulrike.schwinn@oracle.com) Oracle Business Unit Database ORACLE Deutschland B.V. & Co. KG
  • 2. Motivation • Sie wollen ... • Mehr über einen Workload erfahren ... • Ausführungspläne aus einem Workload erhalten ... • SQL Plan Baselines nutzen bzw. erzeugen ... • Advisors wie SQL Tuning oder SQL Access verwenden ... • SQL Performance Analyzer verwenden ...
  • 3. • Datenbankobjekte, die • SQL Text • Execution Kontext (Parsing User, Bind Werte, …) • Execution Statistiken (Buffer Gets, CPU, #Executions, …) • Plan • Plan Statistiken usw. beinhalten. • Persistente Speicherung im SYSAUX Tablespace • Größe abhängig von SQL Text, Unterschiede, Binds etc... • Geringer Performance Overhead Was sind SQL Tuning Sets?
  • 4. Hintergrundinfo ... Objekttyp Nutzung CREATE TYPE sqlset_row AS object ( sql_id VARCHAR(13), force_matching_signature NUMBER, sql_text CLOB, object_list sql_objects, bind_data RAW(2000), parsing_schema_name VARCHAR2(30), module VARCHAR2(48), action VARCHAR2(32), elapsed_time NUMBER, cpu_time NUMBER, buffer_gets NUMBER, disk_reads NUMBER, direct_writes NUMBER, rows_processed NUMBER, … optimizer_cost NUMBER, optimizer_env RAW(2000), first_load_time VARCHAR2(19), … plan_hash_value NUMBER, sql_plan sql_plan_table_type, bind_list sql_binds)
  • 5. SQL Tuning Sets einfach selektieren • Überblick über DBA_SQLSET • Details in DBA_SQLSET_STATEMENTS NAME CREATED STATEMENT_COUNT ------------------------------ --------- --------------- REPLAY_us_r_44488776 20-MAR-12 1487 SCOTT_STS 21-MAR-12 19 SH_STS 20-JAN-11 12 SPA_DML 28-MAR-12 12 SQL_TEXT EXECU BUFFER_GETS -------------------------------------- ----- ----------- update emp set empno=1 1 97 insert into test_emp select * from emp 1 55 update test_emp set sal=1 1 37 insert into test_emp values (1,'t', 2 4 't',1,sysdate,1,0,10)
  • 6. SQL Tuning Sets selektieren im EM
  • 7. SQL Tuning Sets selektieren im EM
  • 8. Grundlegendes zu STS • Seit Oracle 10g automatisch ohne Installation verfügbar • Integriert in Enterprise Manager und im Package DBMS_SQLTUNE • Vor. : Privileg ADMINISTER SQL TUNING SET • Lizenzierung über Tuning Pack • Ausnahme: enthalten in Lizenz von Real Application Testing • Parameter: control_management_pack_access
  • 9. Administration mit DBMS_SQLTUNE Select Load Create Update/Delete Drop • Erzeugen eines neuen leeren STS • Voraussetzung vor dem Laden • create_sqlset(sqlset_name, desc,… • Ändern innerhalb eines STS • update_sqlset(sqlset_name, sql_id,… • Löschen von Statements eines STS • delete_sqlset(sqlset_name, filter … • Löschen des gesamten Sets • drop_sqlset(sqlset_name) execute dbms_sqltune.create_sqlset ('STS1')
  • 10.  STS können …  aus dem Cursor Cache (auch über bestimmten Zeitraum)  aus AWR Snapshots  aus SQL  als Untermenge eines existierenden STS  während des Captures bzw. während des Replays  aus 10046 Trace Dateien erzeugt werden.  Schnittstellen  EM  Package DBMS_SQLTUNE Wie werden SQL Tuning Sets befüllt?
  • 11. Erste Beispiele • Aus dem Cursor Cache mit mehr als 500 Buffer Gets • Aus dem Cursor Cache über eindeutige SQL_ID SELECT sql_id, sql_text FROM table(dbms_sqltune.select_cursor_cache('buffer_gets > 500')) ORDER BY sql_id; SELECT sql_id, plan_hash_value FROM table(dbms_sqltune.select_cursor_cache('sql_id = ''gmnd4yt3c4zyw''')) ORDER BY sql_id, plan_hash_value;
  • 12. Mit PL/SQL laden ... • Aus dem Cursor Cache mit SQL_ID laden • Aus dem Cursor Cache über eine bestimmte Zeit DECLARE cur sys_refcursor; BEGIN open cur for select value(p) from table(dbms_sqltune.select_cursor_cache ('sql_id = ''gwj1f651t001a''')) p; dbms_sqltune.load_sqlset(sqlset_name => 'STS_ID', populate_cursor => cur); close cur; END; execute dbms_sqltune.capture_cursor_cache_sqlset (sqlset_name => 'STS_CAPTURE', time_limit => 3600, repeat_interval => 600, basic_filter => 'sql_text like ''%emp%'' and buffer_gets> 1000')
  • 13. Im Enterprise Manager • Filter setzen
  • 14. Im Enterprise Manager • Über einen bestimmten Zeitraum (auch inkrementell)
  • 15. ... aus Snapshots • Aus Snapshots mit Filter auf SYS DECLARE cur sys_refcursor; BEGIN open cur for select value(p) from table( dbms_sqltune.select_workload_repository (begin_snap => 20184, end_snap => 20185, basic_filter => 'parsing_schema_name <> ''SYS''')) p; dbms_sqltune.load_sqlset('STS_SNAP', cur); close cur; END; /
  • 16. ... aus SQL Traces • Erzeuge 10046 Trace • Erzeuge logisches Directory TRACE_DIR • Lade SQL in STS DECLARE cur sys_refcursor; BEGIN open cur for select value(p) from table(dbms_sqltune.select_sql_trace (directory => 'TRACE_DIR', file_name => '%.trc')) p; dbms_sqltune.load_sqlset('STS_TRACE', cur); close cur; END; /
  • 17. ... aus SQL Traces in andere DB • Zusätzliche Mapping Tabelle erzeugen • Mapping Tabelle und Trace Datei wird auf Ziel DB kopieren • Laden mit CREATE TABLE mapping AS SELECT object_id id, owner, substr(object_name, 1, 30) name FROM dba_objects UNION ALL SELECT user_id id, username owner, null name FROM dba_users; … dbms_sqltune.select_sql_trace(directory=>'TRACE_DIR', file_name => '%.trc', mapping_table_name => 'MAPPING', mapping_table_owner => 'HR'))…
  • 18. Wenn STS zu groß sind ... • oder dbms_sqltune.select_sqlset
  • 19. Welche Filterkriterien gibt es? • sql_id • sql_text • parsing_schema_name •module • action • elapsed_time • cpu_time • buffer_gets • disk_reads • direct_writes •rows_processed • ...
  • 20. Transportieren mit Export/Import 1. Kopiere STS vom SYS Schema in Staging Tabelle (“pack”) 2. Transportiere Staging Tabelle zum Testsystem (Data Pump, db link, etc.) 3. Kopiere STS aus der Staging Tabelle ins SYS Schema (“unpack”) “Pack” SYSAUX ADV AWR STS STGTAB STGTAB SYSAUX STS AWR ADV “Unpack”Transport
  • 22.  Über DBA_SQLSET_PLANS • Über DBMS_XPLAN Szenario 1: Ausführungspläne aus STS SELECT operation, options, object_name, object_type, cost FROM dba_sqlset_plans WHERE sql_id = '7kg0av34u0r1k'; SELECT * FROM table (dbms_xplan.display_sqlset( sqlset_name => 'SQL_WORKLOAD1', sql_id => '7kg0av34u0r1k', format => 'ADVANCED', sqlset_owner => 'US'))
  • 23. Szenario 1 ... das Ergebnis ... ... Outline Data ------------- /*+ BEGIN_OUTLINE_DATA IGNORE_OPTIM_EMBEDDED_HINTS OPTIMIZER_FEATURES_ENABLE('11.2.0.3') DB_VERSION('11.2.0.3') ALL_ROWS OUTLINE_LEAF(@"SEL$1") INDEX_RS_ASC(@"SEL$1" "COMP"@"SEL$1" ("COMP"."ORT")) END_OUTLINE_DATA */ Peeked Binds (identified by position): -------------------------------------- 1 - :ALLOW_BINDS (VARCHAR2(30), CSID=873): 'Munich'
  • 24. • Vorhersehbare und garantierte Planentwicklung • Identifizierung sich wiederholender Statements => Statement Log • Speicherung der SQL Pläne => SQL Plan History • Speicherung der verifizierten/akzeptierten SQL Pläne => SQL Plan Baseline • Falls Veränderung und somit neuer Plan eintritt => Nutzung der SQL Plan Baseline und Speicherung des neuen Ausführungsplans in SQL Plan History (zur Verifikation) • Setup über • OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES=TRUE/FALSE • OPTIMIZER_USE_SQL_PLAN_BASELINES=TRUE/FALSE Szenario 2: SQL Plan Management Plan history HJ HJ GB Plan baseline Statement log
  • 25.  Upgrade von 10gR2 oder 11g Test Umgebung mit STS  STS sind getuned  Transport des STS auf Produktion mit Export/Import  Generierung von SQL Plan Baselines aus STS mit dbms_spm.load_plans_from_sqlset  Auch möglich: direkter Export/Import von SQL Plan Baselines Szenario 2: SQL Plan Baselines Plan History HJ GB HJ Upgrade bzw. ge-tunte Umgebung Production Database keine Plan Regression HJ GB HJ HJ GB HJ Development/Test Database Ge-tuned HJ GB HJ Staging Tabelle DBA Plan History
  • 26.  Generierung von SQL Plan Baselines mit Filterkriterien • Überprüfung mit DBA_SQL_PLAN_BASELINES Szenario 2: SQL Plan Baselines variable pls number; execute pls := dbms_spm.load_plans_from_sqlset( sqlset_name => 'STS_WORKLOAD1', basic_filter => 'sql_text like ''%select%'''); PLAN_NAME ACC ENA FIX ------------------------------ --- --- --- SQL_TEXT ----------------------------------------------------------- SQL_PLAN_axcu6w1bk1nyue451c073 YES YES NO select /*+ use_nl(c) ordered parallel*/ count(*) from sh.sales s,sh.customers c
  • 27. • SQL Advisor sind Advisor die bei Tuning von SQL Statements helfen • 2 Arten: SQL Tuning und SQL Access Advisor • Nutzbar über Enterprise Manager, teilweise SQL*Developer und Packages DBMS_SQLTUNE/ DBMS_ADVISOR • SQL Tuning Sets sind Voraussetzung bei der manuellen Nutzung der beiden Advisors • Voraussetzung: Tuning Pack Szenario 3: SQL Advisor
  • 28. • SQL Tuning Advisor • Manuell bzw. auch automatisch in Automated MaintenanceTasks • Aufgaben: Überprüfung von Statistiken, Zugriffsstrukturen, SQL und Profiles • Ergebnis/Findings: • Erneuerung von Statistiken • Restrukturierung von SQL • SQL Profiles • Alternative Pläne • SQL Access Advisor • Ermittelt geeignete Zugriffs (Access)- Strukturen wie B*/Bitmap, Function Based Index, Materialized Views, Logs und Partitionen • Resultat/Empfehlung: DDL-Skript zum Ausführen (CREATE, DROP, DBMS_STATS...) Szenario 3: SQL Advisor Funktionsweise
  • 29. Szenario 3: Ergebnis SQL Tuning
  • 30. Szenario 3: SQL Access Advisor DECLARE t_id number; t_name varchar2(255); BEGIN dbms_advisor.create_task(dba_advisor.sqlaccess_advisor, t_id, t_name); dbms_advisor.add_sts_ref(t_name,'US','SQL_WORKLOAD1'); dbms_advisor.set_task_parameter(t_name,'ANALYSIS_SCOPE','ALL'); dbms_advisor.execute_task(t_name); dbms_advisor.create_file(dbms_advisor.get_task_script(t_name),'HOME','s.sql'); END; / Bericht anzeigen u. Implementierung Tuning Task erzeugen SQL Tuning Task ausführen Advisor Framework (dba/user views) Parametrisierung Bericht erzeugen Eingabe lesen Resultat schreiben
  • 31. Szenario 3: Ergebnis SQL Access Rem SQL Access Advisor: Version 11.2.0.3.0 - Production Rem Rem Username: SYS Rem Task: TASK_34528 Rem Execution date: Rem CREATE MATERIALIZED VIEW LOG ON "US"."COMP" WITH ROWID, SEQUENCE("ORT","JAHR") INCLUDING NEW VALUES; CREATE MATERIALIZED VIEW "SYS"."MV$$_86E00000" REFRESH FAST WITH ROWID ENABLE QUERY REWRITE AS SELECT US.COMP.ORT C1, MAX("US"."COMP"."JAHR") M1, COUNT(*) M2 FROM US.CO MP GROUP BY US.COMP.ORT; begin dbms_stats.gather_table_stats('"SYS"','"MV$$_86E00000"',NULL,dbms_stats.auto_s ample_size); end;
  • 33. Szenario 4: SQL Performance Analyzer • Vor: Erfasse SQL als STS und transportiere STS • Ausführung VORHER mit SPA • Veränderungen durchführen • Ausführung NACHHER mit SPA • Performance Vergleich mit SPA und Tuning SQL Tuning Set SQL Plan + Stats Pre-Change Test SQL Plans + Stats Post-Change Test Vergleich der SQL Performance Ergebnis Report
  • 34. SPA Report: Ein Beispiel
  • 35. Report im Enterprise Manager • optional
  • 37.  STS Teilmenge bestehend aus „regressed“ Statements • Laden als SQL Plan Baselines aus STS (siehe Szenario 2) Szenario 5: SQL Plan Baselines und SPA execute dbms_sqltune.create_sqlset (sqlset_name => 'SUB_STS1', description => 'Regressed Statements'); declare sqlset_cur dbms_sqltune.sqlset_cursor; begin open sqlset_cur for select value(p) from table(dbms_sqltune.select_sqlpa_task (task_name => 'TASK_21137', execution_name => 'Vergleich1', level_filter => 'REGRESSED')) p; dbms_sqltune.load_sqlset('SUB_STS1', sqlset_cur); close sqlset_cur; end; /
  • 38.  Selektive Auswahl von Statements über unterschiedliche Methoden ( Cache, Snapshots, SQL-Ids, Trace etc.)  Persistente Speicherung in der Datenbank  Kann auf andere DBs übertragen werden  Voraussetzung für unterschiedliche Tuning Tasks z.B. für SQL Tuning Advisor oder SQL Access Advisor  Vereinfacht das Tuning von SQL Statements => Generierung von SQL Plan Baselines Vorteile
  • 39. • Handbücher • Performance Guide • Package Reference Guide • Deutsche Datenbank Community • Aktuelle Informationen • blogs.oracle.com/dbacommunity_deutsch • SQL Tuning Sets im Einsatz Teil 1 und Teil 2 Informationen