Oracle SQL Access Advisor erhöht die Datenbankleistung

Der Oracle SQL Access Advisor wurde für die Verbesserung der Datenbankabfrage entwickelt. Welche Anweisungen notwendig sind, verrät unser Experte.

Wenn man die Zahl der Indizes und Materialized Views erhöht, verbessert sich auch die Abfrageleistung innerhalb der Datenbank. Allerdings gibt es keine Garantie. Die Erstellung eines falschen Index oder schlecht gestaltete Materialized Views bringen keine Leistungssteigerung. Und ob sich die Leistung nun verbessert oder nicht, hinter dieser Arbeit verbirgt sich immer auch einen Kostenfaktor, sowohl im Bezug auf Speicherplatz als auch auf Zeit. Wenn Datenbank-Admins diese Objekte  zu ihren Datenbanken hinzufügen, kann man in der Regel davon ausgehen, dass die Vorteile die Kosten überwiegen. Für diesen Anwendungsfall wurde Oracle SQL Access Advisor entwickelt.

Der SQL Access Advisor bietet einen Satz materialisierter Views, Protokollansichten und Indizes für festgelegte Workloads. Als Teil der Analyse wägt SQL Access Advisor zwischen Zeilennutzung und Abfrageleistung ab. Anschließend generiert er Referenzen und Empfehlungen mit ein oder mehreren Anweisungen. Sind es mehrere, müsse diese vollständig ausgeführt werden, um wirklich nützlich zu sein.

Ein weiterer Teil der Analyse umfasst die Frage, ob eine oder mehrere Tabellen partitioniert werden sollten. Die einzelnen Partitionen werden dabei in einer einzigen Referenz zusammengefasst. Der Index und die materialisierten Views hängen von der Partitionierung der darunterliegenden Tabellen ab.

Die SQL Access Advisor API bietet folgende Funktionen:

  • referenzierte Materialized Views und Indizes, die auf gesammelten Informationen, Benutzern oder hypothetischen Workloads basieren;
  • Empfehlungen für die Partitionierung von Tabellen, Indizes und Materialized Views;
  • Markierung,  Aktualisierung und Entfernung von Referenzierungen;
  • die schnelle Ausführung einer einzelnen SQL-Anweisung;
  • die Anzeige, wie ein materialisierter View schnell aktualiert wird; und
  • die Anzeige, wie sich ein Materialized View ändern lässt, so dass das Umschreiben von Abfragen möglich ist.

Die Anwendung setzt auf strukturelle Statistiken über Tabellen- und Index-Kardinalitäten der einzelnen Dimensionen, Schlüsselspalten und Tabellen. Fehlen diese Statistiken, markiert SQL Access Advisor bei der Abfrage die Tabelle oder Spalten als ungültig. Bestehende Indizes und Materialized Views sollten daher genau analysiert werden.

SQL Access Advisor hat zwei Modi: Problemlösung und Auswertung. Der Standardmodus ist Problemlösung. Dabei versucht die Anwendung Zugangsprobleme zu beseitigen, indem sie überprüft, ob dies mit neuen Objekten funktioniert. Im Auswertungsmodus kommentiert der Access Advisor lediglich die einzelnen Pfade, die innerhalb des Workloads genutzt werden. Während bei der Problemlösung ein neuer Index kreiert wird, kommt es bei der Auswertung nur zu einer Empfehlung, die beispielsweise für die Beibehaltung eines bereits existierenden Index plädiert. Dabei ist die Auswertung vor allem bei der Bestimmung des verwendeten Index und Materialized Views nützlich.

Das Programm definiert somit, was analysiert wird und wo das Ergebnis abgelegt werden muss. Dabei ist es möglich, eine beliebige Anzahl von Aufgaben festzulegen. Sie basiere alle auf demselben Modell und greifen auf dasselbe Archiv zurück. Aufgaben lassen sich mit CREATE_TASK innerhalb des DBMS_ADVISOR Pakets entwerfen:

VARIABLE task_id NUMBER;

VARIABLE task_name VARCHAR2(255);

EXECUTE :task_name := 'MYTASK';

EXECUTE DBMS_ADVISOR.CREATE_TASK

         ('SQL Access Advisor', :task_id, :task_name);

Die eingegebene Arbeitsbelastung für den SQL Access Advisor ist das SQL Tuning Set. Ein großer Vorteil bei diesem Prozedere ist es, dass auf verschiedene Advisor-Aufgaben verwiesen werden kann. Ein SQL Tuning Set wird mit DBMS_SQLTUNE erstellt. SQL Workload Objekte werden in ein SQL Tuning Set mit folgender Anweisung gezogen:

EXECUTE DBMS_ADVISOR.COPY_SQLWKLD_TO_STS('MYWORKLOAD','MYSTS','NEW');

Man muss die Aufgaben immer mit dem SQL Tuning Set verknüpfen, um Referenzierungen zu generieren. Verknüpfungen lassen sich mit ihrem jeweiligen Namen und der Anweisung ADD_STS_REF entwerfen. Sobald eine Verknüpfung definiert wurde, lässt sich das SQL Tuning Set nicht mehr löschen oder aktualisieren:

EXECUTE DBMS_ADVISOR.ADD_STS_REF('MYTASK', null, 'MYWORKLOAD');

Bevor sich eine Aufgabe oder ein Set löschen lässt, muss die Verknüpfung  aufgehoben werden. Dies erreicht man mit DELETE_STS_REF:

EXECUTE DBMS_ADVISOR.DELETE_STS_REF('MYTASK', null, 'MYWORKLOAD');

Referenzierungen lassen sich mit EXECUTE_TASK erzeugen. Nachdem die Aufgabe abgeschlossen ist, zeigt die Tabelle DBA_ADVISOR_LOG die Zahl der Empfehlungen und Maßnahmen an. EXECUTE_TASK ist eine synchrone Anweisung, bei der die Kontrolle nicht eher an den Anwender zurückgeht, bevor die Anweisung beendet oder unterbrochen wird. Referenzierungen lassen sich mit dem Namen der Aufgabe per DBA_ADVISOR_RECOMMENDATIONS und Handlungen per DBA_ADVISOR_ACTIONS abfragen:

EXECUTE DBMS_ADVISOR.EXECUTE_TASK('MYTASK');

SQL Access Advisor kann ein nützliches Tool für die Verbesserung der Datenbankleistung sein. Im Idealfall sollte man regelmäßig nach bestimmten SQL-Anweisungen suchen und  sie in einem SQL Tuning Set sammeln. Befinden sie sich einmal darin, lassen sie sich mit SQL Access Advisor und SQL Tuning Advisor auswerten. Beide geben anschließend Handlungsempfehlungen. Diese können beispielweise als Input für Oracles Performance Analyzer genutzt werden, um Auswirkungen und Leistungsengpässe schneller zu erkennen.

Erfahren Sie mehr über Business-Software

- GOOGLE-ANZEIGEN

ComputerWeekly.de

Close