Performance von relationalen Datenbankabfragen optimieren

Bei vielen Kunden treten Performanceprobleme mit Data-Warehouse-Anwendungen auf. Daher finden Sie hier einige allgemeine Anleitungen zum Analysieren und Verbessern der Performance eines Berichts in Oracle Analytics. In einigen Fällen gestaltet sich die Analyse der von Oracle Analytics generierten SQL-Abfragen komplex. In diesem Thema wird beschrieben, wie Sie Performanceprobleme analysieren und minimieren, die mit den von Oracle Analytics generierten SQL-Abfragen auftreten können.

Hier werden keine Performanceprobleme behandelt, die aufgrund von Problemen mit dem Netzwerk, dem Browser oder der Berichtspräsentation auftreten.

Abfragelog für Oracle Analytics analysieren (Loggingebene 3 erforderlich)

Informationen zum Speicherort dieses Logs und zu dessen Inhalt finden Sie unter Abfragelogs erfassen und analysieren.

  1. Vergleichen Sie die Zeitspanne, die eine Abfrage in Oracle Analytics verbringt, mit der Zeit, die sie in der Datenbank verbringt, also die Antwortzeit mit der physischen Abfragedauer. Normalerweise verbringt eine Abfrage nur wenige Sekunden in Oracle Analytics.
  2. Wenn die Antwortzeit länger als wenige Sekunden ist, analysieren Sie die einzelnen in Oracle Analytics ausgeführten Schritte, um die Ursache zu ermitteln (Loggingebene 5 erforderlich).

Physische SQL analysieren

  1. Prüfen Sie, ob alle in der Abfrage enthaltenen Tabellen wirklich notwendig sind. Suchen Sie nach Tabellen, die verknüpft, aber nicht in der SELECT-Klausel enthalten sind und auf die keine Filter angewendet wurden (echte Filter, keine Join-Bedingungen).
  2. Ermitteln Sie, wie viele physische Abfragen und Unterabfragen generiert werden. Bestimmen Sie genauer gesagt, wie oft die Abfrage eine Faktentabelle liest. Im Idealfall liest die Abfrage eine einzelne Faktentabelle einmalig. Wenn es mehrere Faktentabellen gibt, finden Sie heraus, warum und ob Sie einige davon entfernen können.
  3. Suchen Sie nach ausgeschlossenen Spalten, nicht additiven Aggregationsregeln (REPORT_AGGREGATE, count(distinct)...), Auswahlschritten, Unterabfragen im Bericht, Mengenoperatoren (UNION), Summen, Zwischensummen, mehreren Ansichten usw.
  4. Prüfen Sie, ob Outer Joins vorhanden sind. Ermitteln Sie, woher diese stammen und ob Sie einige davon entfernen können, indem Sie das Design ändern.

Ausführungsplan analysieren

Wenn die SQL-Optimierung nicht ausreicht, analysieren Sie den Ausführungsplan, um die Ursache des Performanceproblems zu ermitteln. Bitten Sie dabei den DBA um Hilfe. Derzeit gibt es vier Hauptmethoden, mit denen Sie die Performance verbessern können:
  1. Reduzieren Sie die I/O-Menge durch Verbesserung der Datenzugriffspfade (Indizes).
  2. Reduzieren Sie die I/O-Menge, indem Sie die Menge der gelesenen Daten verringern. Beispiel: Sie können die angewendeten Filter oder die Datenmodellstruktur prüfen (siehe nächster Abschnitt).
  3. Erhöhen Sie die Parallelität (Anzahl der Threads, die zum Lesen großer Tabellen verwendet werden).
  4. Verbessern Sie die I/O-Geschwindigkeit (Verbesserungen der Infrastruktur, In-Memory-Datenbank usw.).

Datenmodell prüfen und verbessern, um die Menge der gelesenen Daten zu verringern

  1. Erstellen Sie Aggregattabellen.
  2. Verwendeten Sie Fragmentierung.

    Beispiel: Wenn Benutzer größtenteils Daten aus dem aktuellen Jahr, Quartal oder Monat auswählen, könnten Sie den Fakt in zwei Tabellen aufteilen: aktuell und Archiv. In der Oracle-Datenbank können Sie auch Partitionierung verwenden.

  3. Verwenden Sie Denormalisierung (um die Anzahl der Joins zu verringern).
  4. Teilen Sie Tabellen auf, um die Anzahl der Spalten zu verringern.

    Die Menge der gelesenen Daten hängt nicht nur von der Anzahl an Zeilen in jeder Tabelle ab. Das Tabellenvolumen ist auch von der Anzahl und Größe ihrer Spalten abhängig. Beispiel: Sie können eine große Tabelle mit 500 Spalten in zwei Tabellen aufteilen: eine Tabelle mit den 50 am häufigsten verwendeten Spalten und die andere mit den restlichen 450 Spalten, die selten verwendet werden.

Viele Performanceprobleme in Oracle Analytics sind auf mangelhaftes Design zurückzuführen, durch das suboptimale SQL-Abfragen generiert werden. Indem Sie das Design ändern, können Sie die von Oracle Analytics generierten SQL-Abfragen verbessern. Das kann enorme Auswirkungen auf die Performance Ihrer Berichte und die Menge der belegten Ressourcen in der Datenbank haben.