Schnellere SELECT-Abfragen in Oracle – Oracle-Abfrageoptimierung

Von Staff Contributor on November 16, 2021

Bei der Arbeit mit Oracle-Datenbanken ist es manchmal notwendig, die Datenbank zu optimieren und zu homogenisieren, um eine gute Leistung zu gewährleisten. Dies wird auch als Datenbankoptimierung bezeichnet. In den meisten Fällen liegt der Fokus bei der Optimierung einer Datenbank auf der SQL-Abfrageoptimierung. In Oracle spielt die SQL-Abfrageoptimierung eine wichtige Rolle bei der Beschleunigung der Datenbankleistung.

In diesem Leitfaden werden zunächst die Grundlagen der SQL-Optimierung sowie die Frage behandelt, warum diese wichtig ist. Anschließend werden sechs Best Practices für die Abfrageoptimierung in Oracle sowie Möglichkeiten für schnellere SELECT-Abfragen in Oracle erläutert. Dies umfasst die Verwendung von SolarWinds® Database Performance Analyzer (DPA) oder eines ähnlichen Tools für die Abfrageoptimierung.

Was ist SQL-Optimierung?
Was ist die SELECT-Abfrage?
Best Practices für die Abfrageoptimierung in Oracle
Schnellere SELECT-Abfragen in Oracle

Was ist SQL-Optimierung?

SQL-Optimierung beschreibt den Prozess der Optimierung einer Datenbank im Hinblick auf eine bessere Leistung. Die bestmöglichen Optimierungsergebnisse werden mit SQL-Abfragen als Schwerpunkt und Optimierung ihrer Funktion erzielt.

Bei der SQL-Optimierung wird versucht, die für den Zugriff auf und für die Navigation in der Datenbank verwendeten SQL-Abfragen in möglichst kurzer Zeit auszuführen. Die reguläre SQL-Leistungsoptimierung ermöglicht die Behebung häufiger SQL-Leistungsprobleme, darunter ineffiziente Indizierung und nicht optimierte SQL-Abfragen.

Wenn Ihre Abfragen ineffizient sind (d. h. wenn Sie große Mengen Daten abfragen, obwohl nur eine kleine Menge benötigt wird), werden die Datenbankantworten langsam und die Leistung Ihrer Anwendungen und Services wird möglicherweise beeinträchtigt. Besonders für Großunternehmen zählt jede Abfrage.

Es gibt zahlreiche Möglichkeiten, SQL-Abfragen zu schreiben, und ihnen können verschiedene Parameter angehängt werden. Einige Abfragen werden häufiger als andere verwendet. Es ist wichtig, diese im größeren Kontext einer allgemeinen Optimierung der Datenbank effizient zu nutzen. Eine der am häufigsten verwendeten Abfragen ist die SELECT-Abfrage. Der Schwerpunkt dieses Leitfadens liegt auf Tipps im Zusammenhang mit SELECT.

Was ist die SELECT-Abfrage?

Die SQL SELECT-Anweisung wird zum Auswählen von Daten aus einer Datenbank verwendet. Wenn Sie die SELECT-Abfrage zum Abrufen von Daten verwenden, werden Ihre Ergebnisse in einer „Ergebnistabelle“ gespeichert. Diese Tabelle mit Ergebnissen wird als Resultset bezeichnet.

Nehmen wir an, Sie haben eine Tabelle mit Informationen namens „Kunden“, die die folgenden fünf Spalten beinhaltet:

Name Ort Alter Postleitzahl Geschlecht
Alice London 27 87208 W
Bob New York 75 15923 M
Charlie Berlin 43 51480 M

Sie können die SELECT-Abfrage verwenden, um Daten aus der Tabelle auszuwählen, indem Sie die folgende Syntax verwenden:

SELECT Name, Alter FROM Kunden;

Die Ergebnistabelle zeigt in diesem Fall nur die Spalten „Name“ und „Alter“ an.

Die SELECT-Abfrage wird zum Filtern von Informationen verwendet, damit Sie kleinere Datensätze verarbeiten können, anstelle mit dem gesamten Datensatz arbeiten zu müssen. Diese Abfrage ist die am häufigsten verwendete Abfrage im Zusammenhang mit Datenbanken. Ihre Optimierung ist daher für die Gesamtleistung entscheidend.

Manchmal wird SELECT * verwendet, um alle Spalten einer bestimmten Tabelle zurückzugeben anstelle bestimmter Spalten. Damit wird eine Menge Informationen zurückgegeben, die für Ihre Zwecke möglicherweise nicht benötigt werden.

Best Practices für die Abfrageoptimierung in Oracle

Die Oracle SQL-Optimierung findet nicht einmalig statt, sondern muss regelmäßig wiederholt werden. Die Oracle SQL-Optimierung kann komplex sein und dient in der Regel dazu, die Datenbank so zu optimieren, dass alle benötigten Informationen (Zeilen und Spalten) mit möglichst wenigen Touch-Zugriffen (d. h. Lesevorgängen oder Interaktionen) abgerufen werden. Glücklicherweise ist der SQL-Abfrageoptimierungsprozess für viele Datenbanken identisch, sodass im Folgenden der Schwerpunkt auf die Best Practices gelegt werden kann, die unabhängig davon gelten, ob Sie eine Oracle-Datenbank oder eine andere Datenbank verwenden.

Best Practice 1: Ziele festlegen

Eines der ersten Dinge, die Sie berücksichtigen müssen, sind Ihre Geschäftsergebnisse: Warum werden diese Informationen in erster Linie abgerufen und was wird benötigt, um das Geschäftsziel zu erreichen? Vor der Optimierung ist es wichtig, die relevanten Stakeholder und den besonderen Zweck der Abfragen zu bestimmen. Zudem sollten Sie das Publikum für die Ergebnisse kennen. So können Sie Ergebnistabellen mit entsprechenden Details erstellen.

Sobald Sie Ihre Anforderungen festgelegt haben, überprüfen Sie diese noch einmal und richten Sie die Produktionsdatenbank so ein, dass die benötigten Anforderungen befolgt werden.

Best Practice 2: SQL-Anweisungen mit hoher Auswirkung identifizieren

SQL-Anweisungen mit hoher Auswirkung können anhand der Anzahl der verarbeiteten Zeilen, Pufferabrufvorgänge, Datenträger-Lesevorgänge, des Arbeitsspeichers in KB, der CPU-Sekunden, der Sortiervorgänge oder Ausführungen ermittelt werden. Abfragen, bei denen diese Zahlen hoch sind, haben hohe Auswirkungen auf die Leistung und verursachen daher hohe Kosten.

Best Practice 3: Ausführungsplan identifizieren

Ermitteln Sie, wie Ihre SQL-Anweisungen ausgeführt werden müssen. Oracle beinhaltet zu diesem Zweck das explain plan-Dienstprogramm. Mit Oracle explain plan oder einem anderen Ausführungsplan können Sie sehen, wie eine SQL-Anweisung ausgeführt wird, ohne sie ausführen zu müssen.

Es gibt ein umfassendes Angebot an Software, mit der SQL-Anweisungen mit hohen Auswirkungen ermittelt, die Konfiguration der Ausführungspfade angezeigt und anschließend empfohlene Optimierungsmaßnahmen ergriffen werden können. Die Tools werden im weiteren Verlauf erläutert.

Best Practice 4: Große Scans vermeiden

Sie müssen sicherstellen, dass Scans ganzer Tabellen vermieden werden, insbesondere, wenn Sie große Datentabellen verwenden. Hierbei kommt es zu unnötigen Eingabe/Ausgabe-Vorgängen, die alles verlangsamen können.

Schauen Sie sich die Anzahl der Zeilen an, die Sie mit der Abfrage anfordern, und verwenden Sie Indizes, um die Ergebnisse in kleinere Datenmengen aufzuteilen. Indizes ermöglichen ein effizienteres Durchsuchen von Daten, ähnlich wie der Index in einem Buch. Die Erstellung eines Index umfasst die Identifizierung der einzuschließenden Spalten und die Benennung des Index. Die Syntax sieht wie folgt aus:

CREATE INDEX <index_name> in <table_name> ( <column3>, <column42>, … );

Damit können Sie ein Index in einer Tabelle basierend auf den Spalten erstellen, die im Index eingeschlossen sein sollen.

Sie können Ihre Indizes später dazu verwenden, auf kleine Teile der Tabellen zuzugreifen, statt erneut einen Scan der gesamten Tabelle durchführen zu müssen. Bei der Indizierung sollten Sie alle Prädikate in JOIN-, WHERE-, ORDER BY- und GROUP BY-Anweisungen indizieren.

Wenn der Scan einer gesamten Tabelle die schnellste Zugriffsmethode ist, insbesondere für kleinere Tabellen, können Sie den Scan zwischenspeichern, damit der nächste Zugriff schneller erfolgen kann.

Best Practice 5: SELECT-Abfragen optimieren

Eine der wichtigsten Methoden für die Optimierung von SELECT-Abfragen besteht darin, nur die benötigten Spalten einzubeziehen. Meiden Sie nach Möglichkeit SELECT *, da dabei große Datenmengen zurückgegeben werden, die Sie möglicherweise überhaupt nicht benötigen.

Zudem sollten Sie auch SELECT DISTINCT nach Möglichkeit meiden. In vielen Fällen beinhaltet eine Tabelle zahlreiche Werte, die möglicherweise doppelt vorkommen. Bei Verwendung von SELECT DISTINCT werden nur unterschiedliche Werte zurückgegeben. Dies mag zwar hilfreich erscheinen, jedoch werden bei dieser Anforderung große Mengen an Ressourcen verarbeitet, da alle Felder in der Abfrage gruppiert werden, um eindeutige Ergebnisse zu erstellen.

Best Practice 6: Drittanbietertools verwenden

Einer der besten Ansätze für die Abfrageoptimierung in Oracle besteht in der Nutzung eines entsprechenden Tools. Meine Wahl fiel auf SolarWinds Database Performance Analyzer (DPA).

DPA wurde speziell für die SQL-Abfrageleistungsüberwachung, ‑analyse und ‑optimierung entwickelt. Der Schwerpunkt liegt insbesondere auf der Antwortzeitanalyse und der Nachverfolgung von Datenbankreaktion und -leistung. So können Sie Leistungsengpässe identifizieren, bestimmen, ob eine Änderung zu einer langsameren Reaktion führt, sowie kritische Problemursachen bestimmen. Die Antwortzeitanalyse von DPA basiert auf sekündlich gesammelten SQL-Daten.

Die Software bietet Diagramme zu SQL-Anweisungen mit schlechter Leistung, Anwendungswartezeiten und Wartetypen oder -Ereignissen, die für einen Leistungsengpass verantwortlich sein könnten. Die Diagramme sind interaktiv: Sie können sich durch diese durchklicken, um weitere Details zu den jeweiligen Problemen anzuzeigen.

Einer der hilfreichsten Aspekte von DPA für die Datenbankoptimierung ist „Tuning Advisors“ (Optimierungstipps), eine spezielle Funktion, die IT-Mitarbeiter in die richtige Richtung weist. Die Optimierungstipps heben Probleme hervor, die sofortige Maßnahmen erfordern, und bieten leicht verständliche Verlaufsdaten zum Vergleich mit aktuellen Metriken. Sie bieten praktische Ratschläge und die Funktionen für die Anomalieerkennung helfen Ihnen dabei, ineffiziente SQL-Anweisungen schnell zu identifizieren. Wenn Sie Ihre Abfragen den Ratschlägen entsprechend anpassen, wird der Prozess beschleunigt und Sie profitieren von einer einfacheren Behebung von Problemen im Zusammenhang mit Abfrageineffizienzen, die eine langsame Ausführung Ihrer Datenbank verursachen können.

Database Performance Analyzer lässt sich über die Orion® Platform mit anderen SolarWinds-Produkten integrieren. So können Sie eine Vielzahl von Lösungen, darunter das Top-Produkt SolarWinds Network Performance Monitor, kombinieren, um eine effiziente Leistung von Datenbanken und Netzwerken zu gewährleisten, und dabei die Auswirkungen auf die Endbenutzer minimieren.

Eine kostenlose Testversion von DPA steht Ihnen auf der SolarWinds-Website zur Verfügung.

dpa-table-tuning-best-practices

Schnellere SELECT-Abfragen in Oracle

Die beste Herangehensweise bei der Oracle-Datenbankoptimierung besteht darin, den Fokus auf die SQL-Optimierung, insbesondere die SELECT-Abfrage zu legen. Sobald Sie Ihre SQL-Abfragen optimiert haben, kann Ihre Oracle-Datenbank schneller funktionieren.

Sie sollten zudem nach Möglichkeit indizieren, insbesondere für die Prädikate in JOIN-, WHERE-, ORDER BY- und GROUP BY-Anweisungen. Zudem sollten Sie große Tabellenscans um jeden Preis meiden, denn je mehr Scans, desto langsamer die Reaktion und Leistung der Datenbank.

Mit dem richtigen Tool können Sie für einen reibungslosen und einfachen Prozess sorgen. Ich empfehle SolarWinds Database Performance Analyzer. Die Lösung bietet Funktionen, die speziell für die SQL-Abfrageoptimierung konzipiert wurden. Mit DPA können Sie die SQL-Anweisungen identifizieren, die Maßnahmen erfordern und die meisten Probleme verursachen. Auf diese Weise können Sie Probleme schnell und effizient beheben, bevor sie sich auf die Leistung von Anwendungen und Services für Endbenutzer auswirken.

Zuletzt sollten Sie Geschäftsanforderungen unbedingt zu Beginn festlegen, damit Ihre Abfragen einen bestimmten Zweck erfüllen können. Klare Geschäftsziele beim Abfragen der Datenbank ermöglichen definierte, schnellere und effizientere Anforderungen.

Related Posts