Oracle 12c und SAP Monitoring
Ein SQL Statement im SAP Standard Baustein SDO0_GET_DF_SPACE_INFO läuft in Oracle 12c Datenbanken möglicherweise viel zu lange (wir haben Laufzeiten von 30 Sekunden und mehr gesehen).
Dieser Baustein wird standardmäßig alle 5 Minuten vom SAP CCMS (Computing Center Management System) gestartet. Dieser Artikel beschreibt, wie man das Performance Problem mit Oracle 12c lösen kann.
Das SQL Statement
Das SQL Statement hat die SQL_ID 0xfjmsqqsrgf2 (diese könnte in anderen SAP Versionen variieren) und fällt mit extrem vielen reads und gets auf. Bei einigen Datenbanken war es DAS Top SQL Statement.
SELECT file_id, SUM (bytes)
FROM dba_free_space
GROUP BY file_id
UNION ALL
SELECT file_id * -1, bytes_free + bytes_used
FROM v$temp_space_header
UNION ALL
SELECT file_id * -1, NVL (bytes_used, 0) * -1
FROM gv$temp_extent_pool
UNION ALL
SELECT file_id, SUM (bytes)
FROM dba_undo_extents
WHERE status IN ('EXPIRED', :A0)
GROUP BY file_id;
Analyse des Performanceproblems
Bei der Analyse des Statement (Executionplan) sind folgende Punkte aufgefallen:
- Die Data Dictionary Statistik war anscheinend veraltet.
- Der Zugriff auf die Fixed Table X$KTFBUE erfolgt mit einem Full Table Scan.
Der erste Ansatz war sowohl die Data Dictionary Statistiken als auch die Fixed Objekt Statistiken neu zu rechnen. Das hat zwar einiges an Performance gebracht, das Statement ist aber immer noch im Bereich von ca. 10 Sekunden gelaufen.
Also haben wir geprüft ob die Fixed Objekt Statistiken auch die Statistiken auf die Fixed Table X$KTFBUE erzeugen - was nicht der Fall war. Somit haben wir die Statistiken für diese manuell gerechnet und nun läuft das Statement im Bereich von 70ms (statt 30 Sekunden).
exec dbms_stats.gather_dictionary_stats();
exec dbms_stats.gather_fixed_object_stats();
exec dbms_stats.gather_table_stats(‚SYS‘,‘X$KTFBUE‘, no_invalidate=>‘FALSE‘);
Wichtig: Dabei ist zu beachten, dass dies während des Normalbetriebs erfolgen muss (zumindest die beiden letzten Befehle), damit in den X$ und V$ Views auch sinnvolle Datenmengen enthalten sind.
Wenn Ihre Datenbank schon aktuelle und gültige System und Fixed Objekt Statistiken hat, reicht die letzte Zeile.