Real Application Testing Teil 2: SQL Performance Analyzer
von Ulrike Schwinn, Oracle Deutschland B.V. & Co. KG
Real Applicaton Testing steht seit Oracle Datenbank Version 11g als neue Option der Datenbank zur Verfügung.
Es handelt sich dabei um 2 Komponenten - Database Replay (kurz DB Replay) und SQL Performance Analyzer (kurz SPA).
Wichtig zu wissen ist, daß SPA nicht nur unabhängig von DB Replay nutzbar ist, sondern auch als eine gute Ergänzung bzw.
Vorbereitung für den DB Replay Testlauf dienen kann.
Database Replay wurde in Teil 1 im ersten Teil des Tipps ausführlich besprochen und demonstriert. In diesem Artikel liegt der Fokus nun auf der Komponente SQL Performance Analyzer.
Wie Database Replay lässt sich der SQL Performance Analyzer einfach über die graphische Oberfläche des Enterprise Managers oder auch im Linemode
über Package Zugriffe bzw. SQL Aufrufe verwenden. Auch hier sollte die Umgebung gewissen Voraussetzungen genügen:
- Bevor man startet, sollte man sich unbedingt die My Oracle Support Note 560977.1 ansehen, um unter Umständen notwendige Patches
einzuspielen.
- Überprüfen Sie, ob Real Application Testing auch wirklich installiert worden ist. Dies geschieht über die View V$OPTION.
Der VALUE sollte dabei auf TRUE stehen.
- Informieren Sie sich über die Lizenzierung des Produkts. Real Application Testing ist eine zusätzliche Option der Datenbank. Möchte man das vollständige Report bzw. Tuning Framework nutzen,
ist zusätzlich die Lizenzierung von Diagnostics und Tuning Pack notwendig. Mehr dazu finden Sie auch im Licensing Guide.
Um einen besseren Überblick zu gewährleisten, gliedert sich der Artikel in folgende Abschnitte:
SPA im Überblick
Der Fokus von SQL Performance Analyzer liegt auf der detaillierten Statement Analyse eines definierten SQL Workloads. Ein SQL Workload
besteht dabei aus SELECT bzw. DML Statements (nur im Linemode), die über ein SQL Tuning Set (kurz STS) zur Verfügung
gestellt werden. Der SQL Workload wird dabei zweimal abgespielt - vor der Veränderung und nach einer Veränderung. Das Ergebnis ist eine detaillierte Vergleichsanalyse - vor und nach der Veränderung - der einzelnen Statements gemessen an verschiedenen
Metriken beispielsweise elapsed time. Möchte man nun einen Tuning Prozess anschliessen, ist dies einfach möglich durch die Integration des SQL Tuning
Advisors oder durch die Nutzung von SQL Plan Baselines.
Vorteil von SPA ist die einfache Handhabung und die Verfügbarkeit. Da keine DML-Statements die
Testumgebung verändern - DML Statements werden automatisch zurück gerollt - ist kein Zurücksetzen nach dem Test erforderlich. Zudem kann die
Analyse schon für 9i Datenbanken erfolgen. Der folgende Screenshot zeigt ein Beispiel eines SPA-Reports in Enterprise Manager Database Control.
Für eine größere Ansicht auf das Bild klicken.
Wie erzeugt man nun SQL Tuning Sets? Da eine gute Integration von SPA in DB Replay existiert, können SQL Tuning Sets zum Beispiel
automatisch beim DB Replay Capture (ab Version 11.2.0.2) oder beim Replay erzeugt werden. Folgende Aufrufe zeigen die Verwendung.
Unabhängig davon ist es möglich SQL Tuning Sets über AWRs oder aus dem Cache zu erzeugen und gegebenenfalls über Data Pump Export und Import
auf eine andere Datenbank zu verlagern. Wer sich genauer über SQL Tuning Sets informieren möchte, kann folgende Tipps zu rate ziehen.
Hinweis: Im Fall von 9i Datenbanken können die SQL Tuning Sets über SQL Traces erzeugt werden.
Wie funktioniert SPA? Nach der Erzeugung eines STS wird SPA für den ersten Testlauf gestartet, danach wird die Umgebung verändert
und SPA zum zweiten Mal durchgeführt. Bei beiden Durchläufen werden die entsprechenden Statistiken (wie elapsed time (default), cpu time, disk reads, direct writes, optimizer costs etc.) gesammelt,
die Ausführungspläne gespeichert und der Anteil am Workload notiert, um eine Gewichtung des Statements durchzuführen. Um relevante Ergebnisse
zu erzielen, erfahren die Statements ab Release 11g Release 2 ein "Warm up" und werden mehrfach ausgeführt. Die Analyse ordnet dabei die Statements nach Relevanz für den
Workload (siehe "Net Impact on Workload(%)"), listet die verschiedenen Metriken pro Statement auf, zeigt an, ob Ausführungspläne "gekippt"
sind und gibt die Ausführungspläne aus.
SPA im Enterprise Manager
In der Regel ist es sehr einfach SPA über die graphische Oberfläche wie Grid Control, Cloud Control oder Database Control anzuwenden.
Um einen kleinen Einblick in die Nutzung zu erhalten, wird in folgendem Abschnitt die Vorgehensweise kurz erläutert.
Bevor man starten kann, ist ein STS notwendig, das entweder über PL/SQL Aufrufe oder auch über die graphische Oberfläche (im Performance Bereich)
leicht generiert werden kann. Danach navigiert man auf die Startseite von SPA.
Je nach Art des Werkzeugs ist dies entweder in Database Control über "Software and Support => SQL Performance Analyzer"
oder in Cloud Control 12c über "Performance => SQL => SQL Performance Analyzer" möglich. Die Startseite (siehe folgender Screenshot generiert mit Cloud Control 12c) und
das weitere Vorgehen ist danach bei jedem Werkzeug gleich.
Für eine größere Ansicht auf das Bild klicken.
Die beiden Links "Upgrade from 9i or 10i" und "Upgrade from 10.2 or 11g" unterstützen die Nutzung bei Verwendung in unterschiedlichen Datenbank
Versionen im Upgrade Fall. Für 9i und 10.1 Datenbanken müssen dabei zusätzlich aus SQL Traces SQL Tuning Sets erzeugt werden.
Der Link "Parameter Change" ermöglicht das einfache Ändern eines einzigen Initialisierungsparameters (Auswahl aus 158 Parametern). Danach wird
der Parameter automatisch gesetzt, und die beiden Testläufe werden durchgeführt. Seit 11g gibt es die Möglichkeit Statistiken über die Technologie
"Pending Statistics" vor der produktiven Nutzung vorab zu testen (siehe auch Community Tipp
). Auch dies wird in der graphischen Oberfläche im Link "Optimizer Statistics" berücksichtigt. Bei komplexeren Setups sollte der Link
"Guided Workflow"
verwendet werden. Dieser ermöglicht die Testumgebung zwischen dem ersten und zweiten Lauf selbst zu erstellen - zum Beispiel mehr als einen
Initialisierungsparameter zu verändern, das Storage zu ändern usw.
Die Liste der Ergebnisse mit verschiedenen Metriken sieht dann wie folgt in Enterprise Manager Database Control aus.
Für eine größere Ansicht auf das Bild klicken.
Ein Klick auf das Brillensymbol führt dann zu der Ergebnisseite (siehe Screenshot zum Beispiel eines SPA-Reports). Reichen die Metrikvergleiche zur Bewertung nicht aus,
kann über den Button "Run SQL Trial Comparison" schnell ein weiterer Report generiert werden.
SPA im Linemode
Steht für das Testsystem keine graphische Oberfläche zur Verfügung, können die entsprechenden PL/SQL Packages wie DBMS_SQLPA
und DBMS_SQLTUNE für die Linemode Nutzung verwendet werden. Der folgende Abschnitt demonstriert die Verwendung an einem Beispiel -
dabei sollen auch DML Statements berücksichtigt werden. (Zur Erinnerung: DML Statements werden bei Nutzung der graphischen
Oberfläche noch nicht unterstützt; es werden nur SELECT Statements bzw SELECT Anteile in Statements berücksichtigt.)
Hinweis: Die Skripte stehen zum Download zur Verfügung. Das Readme führt Sie durch die Anwendung der einzelnen Skripte.
- Im ersten Schritt wird eine SQL Tuning Task erzeugt. Für unseren Fall ist schon das SQL Tuning Set SPA_DML1 vorab generiert worden.
Zur Kontrolle überprüfen wir die View USER_ADVISOR_TASKS.
- Da alle DML Statements berücksichtigt werden sollen, muss eine zusätzliche Parameter-Einstellung (EXECUTE_FULLDML) vorgenommen werden.
Der Default ist übrigens FALSE. Weitere Informationen zu den Einstellungen finden Sie im Handbuch
Table 138-10.
- Nun wird der erste Test durchgeführt. Um ein "Warm Up" des Buffer Caches vorzubereiten und um möglichst gute Run-Time Statistiken zu
erhalten, werden die Statements ab 11g Release 2 mehrfach ausgeführt (siehe Parametereinstellung DISABLE_MULTI_EXEC).
Die Langläufer unter den Statements werden dabei nur zweimal ausgeführt.
Nun kann die Umgebung entsprechend angepaßt werden. Beispiele für Änderungen wären: Einstellungen der Initialisierungsparameter (OPTIMIZER_FEATURES_ENABLE etc.),
Änderung der Speicherung (Komprimierung etc.), Hinzufügen von Indizes usw.
- Danach erfolgt ein weiterer SPA Testlauf.
-
Nun soll die Auswertung erfolgen. Die Metrik buffer_gets ist für die Bewertung in unserem Beispiel ausschlaggebend. Andere mögliche
Bewertungsmaßstäbe stehen über die Metrik-Einstellungen cpu_time, disk_reads, optimizer_cost, elapsed_time (default) oder direct_writes zur Verfügung.
- Nun werden die zugehörigen Berichte erzeugt. Mögliche Formate sind TEXT, HTML oder XML. Mit dem Parameter LEVEL lassen sich zusätzlich
Detail-Reports zu den einzelnen Themenbereichen generieren wie Berichte über Statements mit geänderten Plänen (CHANGED_PLANS), verschlechterte (REGRESSED)
oder verbesserte (IMPROVED) Statements.
Folgender Screenshot zeigt einen Ausschnitt aus dem generierten Bericht report.html.
Für eine größere Ansicht auf das Bild klicken.
Das anschliessende Tuning
Nachdem wir im letzten Schritt einen Überblick über die Performance Metriken und Pläne der Statements erhalten haben, heisst es den Umfang
der Performance-Unterschiede abzuschätzen. Bei großen Unterschieden und vielen betroffenen Statements sollte die Ursache in der
Gesamtkonfiguration gesucht werden. Falls nur einige Statements betroffen sind, gibt es zwei Optionen wie man mit "regressed statements" umgehen kann.
Die erste Option wäre den SQL Tuning Advisor zu nutzen und die Empfehlungen - wie Profiles, Statementänderungen, Statistiken, alternative Pläne usw. -
zu implementieren.
Hinweis: Hierzu muss das Tuning Pack lizenziert sein.
Der andere Weg wäre mit SQL Plan Baselines zu arbeiten. Die Idee ist, die Statements mit ihren originalen Ausführungsplänen als SQL Plan Baselines
festzulegen. Nutzt man die graphische Oberfläche zum Beispiel im Enterprise Manager Database Control, lassen sich beide Möglichkeiten durch einen einfachen Klick
auf den Button " Run SQL Tuning Advisor" oder "Create SQL Plan Baselines" implementieren.
Für eine größere Ansicht auf das Bild klicken.
Möchte man auch diese Schritte im Linemode durchführen, bietet sich die Nutzung der Packages DBMS_SQLTUNE und DBMS_SPM an. Folgendes Beispiel zeigt
die Implementierung des SQL Tuning Advisors im Linemode. Ausgangslage ist das Beispiel aus dem oberen Abschnitt.
Das Ergebnis wird dann folgendermassen ausgegeben:
Die Empfehlungen in unserem Beispiel weisen darauf hin, daß Statistiken veraltet sind, Indizes hinzugefügt werden könnten und alternative Pläne existieren.
Möchte man hingegen SQL Plan Baselines für die Statements mit "gekippten" Ausführungsplänen nutzen, sind folgende Schritte erforderlich.
Zuerst muß eine SQL Tuning Set Untermenge (SUB_STS1) für die "schlechten" (regressed) Statements erzeugt werden.
Dann können die entprechenden Ausführungspläne mit einem einzigen Aufruf als Baselines geladen werden. Fertig!
Möchten Sie noch weitere Informationen zu Baselines haben, lesen Sie unseren Beitrag in der Community dazu.
Informationen und Links
Folgende Tipps und Links können hilfreich sein:
Mehr zu diesem Thema bzw. zu weiteren Themen rund um die Datenbank lesen Sie in den nächsten Ausgaben ...
Zurück zur Community-Seite
|