Oracle 11g Performance Monitoring und Forecast

Werbung
Performance Tuning mit
Oracle 12c
Agenda
1.
2.
3.
4.
5.
6.
7.
10.11.2013
Adaptive Execution Plans
Adaptive Statistics
SQL Plan-Direktiven
Neuerungen bei Statistiken
Konkurrierendes Sammeln von Statistiken
Private Session-Statistiken
Online-Statistiken
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 2
1
Adaptive Execution Plans
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 3
Adaptive Query Optimization


Der 12c Optimizer ist in der Lage, zur Laufzeit
zusätzliche Informationen zu verarbeiten und
Anpassungen am Ausführungsplan vorzunehmen, um
einen besseren Plan zu erzielen
Damit werden folgende Lücken geschlossen, die zu
nicht-optimalen Plänen führen:



10.11.2013
Statistiken werden häufig nur wöchentlich gesammelt und sind
damit selten aktuell
Datenbanken mit starken Schwankungen in den
Tabelleninhalten (Staging Tables, Data Warehouse)
Statistiken wurden nicht optimal erstellt, sind veraltet oder
wurden gar nicht erstellt
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 4
Adaptive Query Optimization
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 5
Adaptive Pläne




Verschieben die entgültige Enscheidung über den
optimalen Plan auf den Ausführungszeitpunkt
Der Optimizer prüft, ob die Schätzung der Cardinality
von der aktuellen Anzahl von Sätzen abweicht
Wird ein signifikanter Unterschied festgestellt, wird der
Plan (oder ein Teil des Plans) bei der erstmaligen
Ausführung der SQL-Anweisung angepasst
Aktuell zwei Methoden:


10.11.2013
Vereinigungsmethoden
Parallele Ausführungsmethoden
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 6
Adaptive Vereinigungsmethoden





Der Optimizer verfügt über einen initialen Plan (Default Plan)
Während der Ausführung der SQL-Anweisung erhält der StatistikSammler Informationen über die tatsächliche Anzahl vom Sätzen
Basierend auf diesen Informationen trifft der Optimizer die finale
Entscheidung über die Vereinigungsmethode
Aktuell ist der Optimizer in der Lage zwischen einem Nested Loop
Join und einem Hash Join hin und her zu wechseln
Adaptive Vereinigungsmethoden sind in Oracle 12c standardmäßig
implementiert
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 7
SQL Erstausführung
CUST_Z
COUNT(*)
------ ---------68736
1
SQL_ID 4u2cw9xyp9wk3, child number 0
------------------------------------SELECT /*+ gather_plan_statistics */ c.cust_zip,count(*) FROM customers
c, orders o WHERE o.product = 'Smart Phone' AND o.cust_id = c.cust_id
GROUP BY c.cust_zip
Plan hash value: 3920006230
---------------------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
---------------------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
|
| 21157 (100)|
|
|
1 | HASH GROUP BY
|
|
1 |
24 | 21157
(1)| 00:00:04 |
|
2 |
NESTED LOOPS
|
|
|
|
|
|
|
3 |
NESTED LOOPS
|
|
1 |
24 | 21157
(1)| 00:00:04 |
|* 4 |
TABLE ACCESS FULL
| ORDERS
|
1 |
14 | 21156
(1)| 00:00:04 |
|* 5 |
INDEX UNIQUE SCAN
| CUSTOMERS_I1 |
1 |
|
0
(0)|
|
|
6 |
TABLE ACCESS BY INDEX ROWID| CUSTOMERS
|
1 |
10 |
1
(0)| 00:00:01 |
---------------------------------------------------------------------------------------------Note
-----
- this is an adaptive plan
 Änderung in den Daten, signifikant mehr Orders für “Smart Phone”
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 8
SQL – Nach Veränderung der Daten
CUST_Z
COUNT(*)
------ ---------68736
1000000
SELECT * FROM TABLE(dbms_xplan.display_cursor(format=>'+adaptive'));
SQL_ID 4u2cw9xyp9wk3, child number 0
------------------------------------------------------------------------------------------------|
Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
------------------------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
|
| 21157 (100)|
|
|
1 | HASH GROUP BY
|
|
1 |
24 | 21157
(1)| 00:00:04 |
| * 2 |
HASH JOIN
|
|
1 |
24 | 21157
(1)| 00:00:04 |
|3 |
NESTED LOOPS
|
|
|
|
|
|
|4 |
NESTED LOOPS
|
|
1 |
24 | 21157
(1)| 00:00:04 |
|5 |
STATISTICS COLLECTOR
|
|
|
|
|
|
| * 6 |
TABLE ACCESS FULL
| ORDERS
|
1 |
14 | 21156
(1)| 00:00:04 |
|- * 7 |
INDEX UNIQUE SCAN
| CUSTOMERS_I1 |
1 |
|
0
(0)|
|
|8 |
TABLE ACCESS BY INDEX ROWID| CUSTOMERS
|
1 |
10 |
1
(0)| 00:00:01 |
|
9 |
TABLE ACCESS FULL
| CUSTOMERS
|
1 |
10 |
1
(0)| 00:00:01 |
------------------------------------------------------------------------------------------------Note
-----
- this is an adaptive plan (rows marked '-' are inactive)
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 9
Adaptive Vereinigungsmethoden
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 10
IS_RESOLVED_ADAPTIVE_PLAN

Neue Spalte in V$SQL



‘Y’ … Der Plan ist “adaptiv” und der finale Plan wurde ausgewählt
‘N ‘ … Der Plan ist “adaptiv”, der finale Plan wurde jedoch noch nicht ausgwählt
NULL … Der Plan ist nicht “adaptiv”
SELECT sql_id,child_number,is_resolved_adaptive_plan
FROM v$sql
WHERE sql_id = '4u2cw9xyp9wk3';
SQL_ID
CHILD_NUMBER I
------------- ------------ 4u2cw9xyp9wk3
0 Y
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 11
Verwendete Parameter

Die Optimizer-Parameter befanden sich auf “Standard”:
NAME
-----------------------------------optimizer_adaptive_features
optimizer_dynamic_sampling
optimizer_features_enable
optimizer_adaptive_reporting_only
10.11.2013
TYPE
----------boolean
integer
string
boolean
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
VALUE
---------TRUE
2
12.1.0.1
FALSE
Seite 12
Reporting-Modus

Im Reporting-Modus werden alle Informationen für adaptive
Vereinigungsmethoden gesammelt, allerdings wird der DefaultPlan nicht verändert
ALTER SESSION SET optimizer_adaptive_reporting_only = TRUE;
SELECT * FROM TABLE(dbms_xplan.display_cursor(format=>'+report'));
Adaptive plan:
------------This cursor has an adaptive plan, but adaptive plans are enabled for
reporting mode only. The plan that would be executed if adaptive plans
were enabled is displayed below.
Plan hash value: 3920006230
--------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
--------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
|
| 21157 (100)|
|
|
1 | HASH GROUP BY
|
|
1 |
24 | 21157
(1)| 00:00:04 |
|* 2 |
HASH JOIN
|
|
1 |
24 | 21157
(1)| 00:00:04 |
|* 3 |
TABLE ACCESS FULL| ORDERS
|
1 |
14 | 21156
(1)| 00:00:04 |
|
4 |
TABLE ACCESS FULL| CUSTOMERS |
1 |
10 |
1
(0)| 00:00:01 |
---------------------------------------------------------------------------------
optimizer_dynamic_sampling =
11
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 13
2
Adaptive Statistics
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 14
Adaptive Statistiken

Der neue Ansatz, Ausführungspläne an die aktuellen
Datenbestand anzupassen, erfordert, das Statistiken dynamisch
angepasst werden

Dazu wurden in 12c folgende Features eingeführt:



10.11.2013
Dynamic Statistics
Automatic Reoptimization
SQL Plan-Direktiven
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 15
Beispiel Dynamic Statistics
ALTER SESSION SET optimizer_dynamic_sampling = 11;
SELECT * FROM TABLE(dbms_xplan.display_cursor(format=>'+adaptive'));
------------------------------------------------------------------------------------------------|
Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
------------------------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
|
| 21211 (100)|
|
|
1 | HASH GROUP BY
|
|
1 |
27 | 21211
(1)| 00:00:04 |
| * 2 |
HASH JOIN
|
|
1 |
27 | 21211
(1)| 00:00:04 |
|3 |
NESTED LOOPS
|
|
|
|
|
|
|4 |
NESTED LOOPS
|
|
1 |
27 | 21211
(1)| 00:00:04 |
|5 |
STATISTICS COLLECTOR
|
|
|
|
|
|
|
6 |
VIEW
| VW_GBF_7
|
1 |
17 | 21210
(1)| 00:00:04 |
|
7 |
HASH GROUP BY
|
|
1 |
14 | 21210
(1)| 00:00:04 |
| * 8 |
TABLE ACCESS FULL
| ORDERS
| 1542K|
20M| 21156
(1)| 00:00:04 |
|- * 9 |
INDEX UNIQUE SCAN
| CUSTOMERS_I1 |
1 |
|
0
(0)|
|
|10 |
TABLE ACCESS BY INDEX ROWID| CUSTOMERS
|
1 |
10 |
1
(0)| 00:00:01 |
|
11 |
TABLE ACCESS FULL
| CUSTOMERS
|
1 |
10 |
1
(0)| 00:00:01 |
-------------------------------------------------------------------------------------------------
Note
----- dynamic statistics used: dynamic sampling (level=AUTO)
- this is an adaptive plan (rows marked '-' are inactive)
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 16
Automatic Reoptimization

Der Optimizer verwendet die Informationen, die während der
Ausführung einer SQL-Anweisung entstehen

Weicht die Ausführung signifikant von den Schätzungen des
Optimizers ab, wird eine Anpassung des Ausführungsplans bei der
nächsten Ausführung in Betracht gezogen

Folgende Features unterstützen die Reoptimization:


10.11.2013
Statistik Feedback
Performance Feedback
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 17
Statistik Feedback


Mit der erstmaligen Ausführung einer SQL-Anweisung entscheidet
der Optimizer, ob ein Monitoring für das Statistik Feedback aktiviert
werden soll
Die Aktivierung erfolgt nach folgenden Kriterien:



Tabellen ohne Statistiken existieren
Mehrere Filter existieren an einer Tabelle
Prädikate mit komplexen Operatoren sind vorhanden
SELECT sql_id,child_number,is_reoptimizable
FROM v$sql WHERE sql_id='c2vq4sacjkh8k';
SQL_ID
CHILD_NUMBER I
------------- ------------ c2vq4sacjkh8k
0 Y
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 18
Beispiel Statistik Feedback
CUST_Z
COUNT(*)
------ ---------68736
901000
SQL_ID c2vq4sacjkh8k, child number 1
------------------------------------SELECT /*+ gather_plan_statistics */ c.cust_zip,count(*) FROM customers
c, orders o WHERE o.product = 'Smart Phone' AND o.cust_id = c.cust_id
AND o.cnt > 1 AND o.amount > 300 AND o.order_text = 'Internet order'
GROUP BY c.cust_zip
--------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
--------------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
|
| 21229 (100)|
|
|
1 | HASH GROUP BY
|
|
1 |
48 | 21229
(1)| 00:00:04 |
|* 2 |
HASH JOIN
|
|
901K|
41M| 21199
(1)| 00:00:04 |
|
3 |
TABLE ACCESS FULL| CUSTOMERS | 10000 |
97K|
17
(0)| 00:00:01 |
|* 4 |
TABLE ACCESS FULL| ORDERS
|
901K|
32M| 21179
(1)| 00:00:04 |
---------------------------------------------------------------------------------
Note
----- statistics feedback used for this statement
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 19
3
SQL Plan-Direktiven
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 20
SQL Plan-Direktiven


SQL Plan-Direktiven werden automatisch angelegt und mit den aus
der SQL Reoptimization gewonnen Erkenntnissen gefüttert
Mit diesen zusätzlichen Informationen ist der Optimizer besser in der
Lage, den optimalen Plan zu bestimmen
SELECT o.owner,o.object_name,o.subobject_name,o.object_type,
d.type,d.reason
FROM dba_sql_plan_dir_objects o, dba_sql_plan_directives d
WHERE o.directive_id = d.directive_id
AND o.owner = 'DOAG';
OWNE
---DOAG
DOAG
DOAG
DOAG
DOAG
OBJECT_
------ORDERS
ORDERS
ORDERS
ORDERS
ORDERS
10.11.2013
SUBOBJECT_NA
-----------PRODUCT
CNT
AMOUNT
ORDER_TEXT
OBJECT
-----COLUMN
COLUMN
COLUMN
COLUMN
TABLE
TYPE
---------------DYNAMIC_SAMPLING
DYNAMIC_SAMPLING
DYNAMIC_SAMPLING
DYNAMIC_SAMPLING
DYNAMIC_SAMPLING
REASON
-----------------------------------SINGLE TABLE CARDINALITY MISESTIMATE
SINGLE TABLE CARDINALITY MISESTIMATE
SINGLE TABLE CARDINALITY MISESTIMATE
SINGLE TABLE CARDINALITY MISESTIMATE
SINGLE TABLE CARDINALITY MISESTIMATE
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 21
4
Neuerungen bei Statistiken
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 22
Top Frequency-Histogramme





Hat eine Spalte mehr als 254 verschiedene Werte, dann wurde
automatisch ein “Height-balanced Histogram” erstellt
Problem: 99% der Zeilen hat weniger als 254 verschiedene Werte
 Risiko: Die meißten populären Werte werden nicht richtig
repräsentiert
Es wäre besser, auf den populären Werten ein „Frequency
Histogram“ zu erstellen und die nicht-populären Werte zu ignorieren
Dies wird durch ein Top Frequency-Histogramm realisiert
Top Frequency-Histogramme werden erstellt, wenn:


Statistiksammlung mit “AUTO_SAMPLE_SIZE”
99,6% der Werte haben <= 254 Werte
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 23
DBMS_STATS-Berichte


Das Sammeln von Statistiken ist Zeit-kritisch und Ressourcenaufwendig
Informationen über Zeiten und Verlauf sind deshalb für die Planung
sehr wichtig
BEGIN
:my_report := DBMS_STATS.REPORT_STATS_OPERATIONS(
since => SYSTIMESTAMP -1, until => SYSTIMESTAMP,
detail_level => 'TYPICAL', format => 'HTML');
END;
/
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 24
DBMS_STATS-Berichte
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 25
5
Konkurrierendes Sammeln von Statistiken
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 26
Konkurrierendes Sammeln



Mehrer Tabellen in einem Schema (Datenbank) oder Patitionen einer
Tabelle parallel bearbeiten
Oracle erstellt einen Job für jede Tabelle und Partition
Die Datenbank führ so viele Jobs wie möglich parallel aus, die
übrigen gehen in eine Warteschlange:
job_queue_processes
 Oracle AQ
SQL> BEGIN
2 DBMS_STATS.SET_GLOBAL_PREFS('CONCURRENT','TRUE');
3 END;
4 /


Verbesserung in 12c:

Ist eine Tabelle oder Partition sehr klein oder leer, dann wird diese automatisch in
einen Batch mit anderen kleinen Objekten gestellt
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 27
6
Private Session-Statistiken
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 28
Statistiken für Global Temporary Tables



Eine GTT wird Datenbank-weit benutzt
Die Daten in einer GTT sind der jeweiligen Session zugeordnet
Mit 12c ist es möglich, Session-bezogene Statistiken für GGT zu
erstellen
SELECT dbms_stats.get_prefs('GLOBAL_TEMP_TABLE_STATS','DOAG') FROM dual;
DBMS_STATS.GET_PREFS('GLOBAL_TEMP_TABLE_STATS','DOAG')
-----------------------------------------------------SESSION
CREATE GLOBAL TEMPORARY TABLE temp_table(text VARCHAR2(200));
INSERT INTO temp_table SELECT product FROM doag.orders;
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 29
7
Online-Statistiken
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 30
Online-Statistiken

Statistiken werden automatische angelegt, wenn:




Ein Index erstellt wird
CREATE TABLE AS SELECT …
INSERT INTO … AS SELECT …
Online-Statistiken für Tabellen erstellen keine Histogramme und
Index-Statistiken
-----------------------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time
|
-----------------------------------------------------------------------------------------------|
0 | CREATE TABLE STATEMENT
|
|
10M|
486M| 34091
(1)| 00:00:05 |
|
1 | LOAD AS SELECT
| ORDERS_COPY |
|
|
|
|
|
2 |
OPTIMIZER STATISTICS GATHERING |
|
10M|
486M| 21160
(1)| 00:00:04 |
|
3 |
TABLE ACCESS FULL
| ORDERS
|
10M|
486M| 21160
(1)| 00:00:04 |
------------------------------------------------------------------------------------------------
Ausschalten:
/*+ NO_GATHER_OPTIMIZER_STATISTICS */

10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 31
F&A
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 32
Vielen Dank für Ihre Aufmerksamkeit !
Performance Tuning
mit Oracle 12c
DOAG-Konferenz 2013
Nürnberg
Copyright © 2013 by Lutz Fröhlich
Alle Rechte vorbehalten.
10.11.2013
Performance Tuning mit Oracle 12c - Copyright (c) 2013 by Lutz Fröhlich
Seite 33
Herunterladen