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
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ä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;

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);
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.

