nextgen databases

Willkommen auf meinen Blog rund um das Thema Datenbanken

Hier findest du praxisnahe Einblicke, Tipps und Best Practices zu Administration, Performance-Tuning und Automatisierung.

Mein Ziel ist es, komplexe Themen verständlich aufzubereiten und Lösungen zu teilen, die sich direkt im Alltag von Datenbank-Profis einsetzen lassen

Oracle Statspack - Anwendungsbeispiele und Visualisierung mit Apex

 

Das Lizenfreie Statspack von Oracle ist einfach zu installieren und ist eine gute Alternative zum Diagonstic and Tuning Pack.
Es bringt einen Standard report mit, natürlich kann man aber auch die Tabellen direkt abfragen. Ich will heute verschiedene Anwendungszenarien zeigen in den Statspack sinnvoll eingesetzt werden kann.

 

Parameteränderung erkennen
 

Parameteränderungen können große Auswrkungen auf die Performance haben, mit diesem Statament können die Änderungen mit Statspack sichtbar gemacht werden.
 

SELECT p.name,
       to_char(s.snap_time,'DD.MM.YYYY HH24:Mi:ss') AS CurrentSnapTime,
       p.value AS CurrentValue,
       to_char(s_prev.snap_time,'DD.MM.YYYY HH24:Mi:ss') AS PreviousSnapTime,
       p.PreviousValue
FROM (
     SELECT name,
            snap_id,
            value,
            LAG(value) OVER (PARTITION BY name ORDER BY snap_id) AS PreviousValue,
            LAG(snap_id) OVER (PARTITION BY name ORDER BY snap_id) AS PreviousSnapId
     FROM STATS$PARAMETER ) p
JOIN STATS$SNAPSHOT s ON p.snap_id = s.snap_id
JOIN STATS$SNAPSHOT s_prev ON p.PreviousSnapId = s_prev.snap_id
WHERE p.value <> p.PreviousValue
ORDER BY CurrentSnapTime, p.name ASC;

 

 

Performance - Änderungen von Ausführungsplänen erkennen

 

Nach Änderungen an der Datenbank (Upgrades,Patches,Parameter) kann es zu Änderungen am Ausführungsplan kommen obwohl

das Statement selbst nicht geändert wurde.

 

Es macht Sinn das man sich vor uns nach der Änderungen einen manuellen Snapshot erstellt, so kann man sich sicher das Auswertungen auf den gewünschten Zeitraum (vor bzw. nach dem change) beziehen.

 

Auch bei Lasttest macht dies Sinn, da man so genau über den Zeitraum des Tests Auswerten kann, das gillt natürlich genauso wenn man das Disgnostic & Tuning Pack einsetzt.


Ausführungspläne für ein bestimmtes SQL anzeigen:

SELECT
  SNAP_ID,
  SQL_ID,
  PLAN_HASH_VALUE,
  COST,
  OPTIMIZER,
  LAST_ACTIVE_TIME
FROM
  STATS$SQL_PLAN_USAGE
WHERE
  SQL_ID = '0y1prvxqc2ra9'
ORDER BY
  SNAP_ID;    

 

Ausführungspläne vergleichen:

SELECT
    a.snap_id AS snap_id_1,
    b.snap_id AS snap_id_2,
    COALESCE(a.id, b.id) AS id,
    a.operation AS operation_1,
    a.options AS options_1,
    a.object_name AS object_1,
    a.object_type AS object_type_1,
    a.cost AS cost_1,
    a.cpu_cost AS cpu_cost_1,
    a.io_cost AS io_cost_1,
    a.temp_space AS temp_space_1,
    a.access_predicates AS access_predicates_1,
    a.filter_predicates AS filter_predicates_1,
    a.time AS time_1,
    b.operation AS operation_2,
    b.options AS options_2,
    b.object_name AS object_2,
    b.object_type AS object_type_2,
    b.cost AS cost_2,
    b.cpu_cost AS cpu_cost_2,
    b.io_cost AS io_cost_2,
    b.temp_space AS temp_space_2,
    b.access_predicates AS access_predicates_2,
    b.filter_predicates AS filter_predicates_2,
    b.time AS time_2
FROM
    STATS$SQL_PLAN a
FULL OUTER JOIN
    STATS$SQL_PLAN b
    ON a.id = b.id
    AND a.plan_hash_value = &plan1
    AND b.plan_hash_value = &plan2
WHERE
    a.plan_hash_value = &plan1 OR b.plan_hash_value = &plan2
ORDER BY
    COALESCE(a.id, b.id);

 

Visualisierung mit Apex


Oracle APEX (Application Express) als Low-Code-Plattform zur schnellen Entwicklung von datenbankgestützten Webanwendungen eignet sich bestend um 
Statspack Daten zu visualisieren. So kann man sich mit relativ wenig Aufwand ein eigenes Dashboard bauen.