Oracle-Performance-Tuning ist ein wichtiger Schritt, um eine schnelle Anwendungsfunktion und eine schnelle Datenabfrage sicherzustellen. Hier haben wir für Sie einige Fakten, die Sie kennen sollten, um die Datenbankleistung zu verbessern.
Allen Datenbankadministratoren (DBA) ist die lästige Aufgabe der Leistungssteigerung der Datenbank wohl bekannt. Zur Beschleunigung der Anwendungsfunktionen müssen Datenbankadministratoren die Abfragereaktionszeit verkürzen, was bedeutet, dass die Admins ein klares Verständnis davon haben müssen, wie die Datenbank organisiert ist und wie sie ihren Zweck erfüllt. Mit anderen Worten sollen DBA nicht nur die eigentliche Datenbank gut kennen, sondern auch die dedizierte Computersprache, die zwecks Datenabruf, Datenmanipulation oder Datenlöschung auf die Datenbank zugreift.
Was ist Oracle-Performance-Tuning?
Fragen Sie sich, wie genau das Performance-Tuning in Oracle erfolgen soll? Oracle ist ein relationales Datenbank-Managementsystem (RDBMS) und verwendet Structured Query Language (SQL) für die Kommunikation zwischen den Anwendungen und der Datenbank. Unter Performance-Tuning versteht man den Prozess der Optimierung der Oracle-Performance durch Rationalisierung der Ausführung von SQL-Anweisungen. Anders ausgedrückt, vereinfacht das Performance-Tuning den Prozess, wie auf Daten in der Datenbank zugegriffen wird und wie diese geändert werden, um die Abfragereaktionszeiten und den Anwendungsbetrieb zu verbessern.
Zur weiteren Erläuterung wollen wir zunächst die unterschiedlichen Komponenten des Datenbank-Managementsystems analysieren, wobei wir mit der Datenbank anfangen. Wie erwähnt, verwendet Oracle das relationale Datenbankmodell.
Was ist eine relationale Datenbank?
- Eine relationale Datenbank ist ein Informationssystem. Es ist eine computergestützte Methode zur Speicherung und Nutzung von Informationen.
- Eine relationale Datenbank hat den Zweck, Informationen zu konsolidieren, zu verwahren und bei Bedarf durch die Anwendungen abzurufen. Die Anwendungen setzen diese Daten dann zu bestimmten Zwecken ein. Ein Unternehmen kann eine Datenbank beispielsweise zur Speicherung von personenbezogenen Daten seiner Kunden verwenden. Eine Segmentierungs-App kann die Datenbank nach E-Mail-Adressen von Kunden durchsuchen, die im letzten Monat einen Kauf tätigten – dadurch erhält das Unternehmen personenbezogene Angaben, die verwendet werden können, um spezifische Kundensegmente im Targeting-Verfahren per E-Mail-Rundsendung anzusprechen.
- Eine relationale Datenbank speichert Daten in Tabellen. Diese Tabellen werden als „Relationen“ bezeichnet und ähnlich wie ein Tabellenkalkulationsprogramm konfiguriert: die Spalten sind „Felder“ mit unterschiedlichen Attributen und die Zeilen enthalten spezifische Einträge. Eine Datentabelle über den Kundenstamm könnte die Zeilen 1 bis 27 enthalten, von denen jede Zeile einem anderen Kundendatensatz entspricht und jede Spalte einem Attribut aus personenbezogenen Daten zugewiesen wurde (Name, E-Mail-Adresse, Datum des letzten Kaufs usw.). Zeile 1 könnte lauten: „John“, john@email.com, “1.1.2019“ usw.
Dieses Datenbankmodell ist das Fundament des Managementsystems. Das Managementsystem selbst ist eine Software, die relationale Datenbanken erstellt und deren Organisation und Interaktion mit anderen datennutzenden Anwendungen verwaltet. Wie von Oracle selbst definiert, sind die Hauptfunktionen eines Datenbankmanagementsystems (DBMS):
- Kernel Code – legt Einstellungen fest und weist dem System Speicher und Speicherplatz zu.
- Ein Datenlexikon – eine Sammlung aus Metadaten. Dieses Repository bietet eine schreibgeschützte Übersicht über die Daten in der Datenbank und zeigt Tabellen und Ansichten sowie Referenzinformationen zur Datenbank selbst und zu ihren Benutzern an.
- Eine spezifizierte Abfragesprache – ermöglicht Anwendungen den Zugriff auf die Datenbankinformationen.
Wie erwähnt, verwendet Oracle SQL als seine Datenbanksprache. SQL zeichnet sich durch die Fähigkeit aus, Daten in eine Datenbank einzugeben, zu manipulieren, aus der Datenbank abzurufen und zu löschen. SQL gibt Administratoren auch die Möglichkeit, den Zugriff zu erteilen und zu widerrufen sowie ihre eigenen Ansichten und Funktionen zu erstellen. SQL schreibt keine Verfahren vor, das heißt SQL-Anweisungen informieren das Datenbankmanagementsystem, was zu tun ist, schreiben aber keine Vorgehensweise vor. Im Grunde erkennt die Software im Datenbankmanagementsystem, wie Anweisungen auszuführen sind, indem sie die verfügbaren Optionen analysiert und die beste Handlungsabfolge wählt. SQL ist nicht nur eine schnell zu beherrschende Sprache, Benutzer können SQL auch in andere Host-Sprachen einbetten.
Wie funktioniert Oracle-Datenbank-Performance-Tuning?
Performance-Tuning berücksichtigt die vielen Elemente in einem relationalen Datenbank-Managementsystem, um die Ursache von Leistungsproblemen zu beheben. Datenbankadministratoren stehen oft vor einer schwierigen Aufgabe: Benutzer des Netzwerks melden Verzögerungen in der Anwendung oder langsam ladende Seiten, aber Administratoren können den Ursprung dieser Datenbankengpässe nicht benennen. Liegt es an dem Optimierungsprogramm? Ist die Codierung der Abfrageanweisungen die Schwachstelle? Oder liegt das Problem am Rechner?
Um die Ursachen erkennen zu können, müssen Administratoren beim Performance-Tuning die vielen Elemente eines relationalen Datenbank-Managementsystem untersuchen, um die Verzögerungen im Datenbankbetrieb aufzudecken. Performance-Tuning erfordert mitunter nicht nur viel Zeit, es kann auch schwierig sein, zu wissen, wo man anfangen soll. Ein intensiver Performance-Tuning-Prozess muss auf Systemebene ansetzen und RDBMS-Komponenten von oben nach unten durchlaufen.
Viele Datenbankexperten heben hervor, dass die Feineinstellung einzelner SQL-Anweisungen – eine nach der anderen – wenig bewirken wird, wenn der Administrator nicht zuerst eine Feineinstellung auf Systemebene vorgenommen hat, das heißt auf dem Server, in den Instanzen und Objekten. Wir empfehlen die Bewertung der Input- und Output-Maßnahmen (I/O-Maßnahmen), der Optimierungsparameter und -statistik und der Instanzeneinstellungen, bevor Sie sich an die Einstellung einzelner SQL-Anweisungen machen. Andernfalls wird das sorgfältige SQL-Tuning später von der Optimierung rückgängig gemacht, da sie ein Ausführungsprotokoll erkennt, das von den entwickelten Ausführungsplänen abweicht.
10 Schritte zum effektiven Oracle-Performance-Tuning
Sobald die Datenbankadministratoren das System geprüft haben, können sie mit dem Tuning der SQL-Abfragen beginnen. Generell geht es beim SQL-Tuning darum, die Anzahl der Schritte – „Datenbankkontakte“ – im Anschluss an eine Abfrage zu minimieren, was Dauer, Kosten und Wartezeit reduziert. Dabei wollen viele kleine SQL-Besonderheiten und best practices bedacht sein. Obwohl diese Liste auf keinen Fall einen Anspruch auf Vollständigkeit oder universelle Gültigkeit erhebt, haben sich die folgenden Richtlinien in den meisten Fällen als ausgesprochen hilfreich erwiesen.
Unsere Top 10 Tipps für das SQL-Abfrage-Performance-Tuning:
- Beginnen Sie mit der Identifizierung der kostenintensivsten Abfragen, um Ihre Tuning-Bemühungen dementsprechend einstufen zu können. In Wirklichkeit ist das Performance-Tuning von SQL-Abfragen ein laufender Prozess, denn Verbesserungsbedarf besteht immer und es wird ständig mehr zum optimierenden Code und mehr Überwachung und Wartung geben, was das Gefühl erweckt, das Ganze könnte nie enden. Aus diesem Grunde ist es wichtig, die SQL-Anweisungen mit hohen Auswirkungen zu isolieren – das heißt jene, die am häufigsten ausgeführt werden und die meiste Datenbank- und I/O-Aktivität erfordern. Diese Anweisungen versprechen in Bezug auf eine verbesserte Datenbankleistung die größten Erfolge und daher lohnt es sich, sie sich vorzunehmen, da die erreichte Verbesserung den Aufwand am ehesten rechtfertigt.
- Minimieren Sie stets die Menge der Daten, die in einem Vorgang gescannt werden soll. Viele Abfrageanweisungen veranlassen die Datenbank, die gesamte Tabelle zu scannen, was viel mehr I/O verursacht und die Leistung herabsetzt, indem Vorgänge verlangsamt und unnötig umfangreiche Suchvorgänge ausgeführt werden.
Zur Straffung des Datenabrufs:
-
- Indizieren Sie Tabellen, wenn Sie auf weniger als 5 % der Daten Zugriff benötigen, es sei denn, es sind relative kleine Tabellen (die effizienter komplett durchsucht werden, unabhängig davon, ob Sie wenig oder viele Daten brauchen).
- Vermeiden Sie * in Ihren SELECT-Anweisungsabfragen, außer es ist zum Datenabruf unverzichtbar, denn das Symbol belastet das System.
- Setzen Sie in WHERE-Klauseln Filter ein, um die Größe des Datensatzes zu beschränken.
- Wählen Sie in einem spaltenorientierten System nur die Spalten, die Sie für die Abfrage benötigen.
- Entfernen Sie unnötige Tabellen aus Abfrageanweisungen. Manchmal vergessen Entwickler, JOINS zu entfernen, die nichts zur Abfrage beitragen. In der Testphase mag dies keine Rolle spielen, aber nach Inbetriebnahme des Systems können JOINS zu Tabellen, die nicht zu den abgerufenen Daten gehören, die Verarbeitungszeit enorm verlängern.
- Verwenden Sie EXISTS in Subabfragen. Damit wird Oracle mitgeteilt, dass es nach Auffinden einer Übereinstimmung die Suche beenden kann, statt den Scan der gesamten Tabelle standardgemäß fortzusetzen.
- Vermeiden Sie Indizes für Tabellen, die mehr UPDATE- oder INSERT-Operationen durchlaufen, da Indizes die Dateneingabe verlangsamen können. Gleichermaßen kann es sinnvoll sein, die Indizes ganz wegzulassen, wenn Sie Batch-Aktualisierungen oder -Einfügevorgänge planen. In dem Fall ist es eventuell optimal, die Indizes nach jedem einzelnen Batch-Ereignis neu zu erstellen oder Indizes ganz wegzulassen, wenn in den Tabellen von vornherein häufig Batch-Datenladevorgänge vorkommen.
- Datentypen nicht mischen und keine Zahlen in Zeichen umwandeln. Der Vergleich kann den Betrieb und die Leistung drosseln.
- In bestimmten Fällen mag es einfacher sein, ein neues Feld zu erstellen, statt die Berechnung über die JOIN- oder WHERE Klausel auszuführen. In dem Fall enthielte das neue Feld den errechneten Wert, den die Anweisung AUSWÄHLEN würde, anstatt ihn selbst zu berechnen. Um dies zu erreichen, benötigt die Person, die den Code optimiert, natürlich Zugriffsberechtigung zur Änderung der Datensätze, was für einen DBA oder einen anderen IT-Administrator kein Problem sein dürfte.
- Richten Sie Ihre SQL-Anweisungen und -Datensätze allgemeiner aus. Durchsuchen Sie dazu die SQL-Syntax, um sicherzugehen, dass Sie Anweisungen geschrieben haben, die zur Datenstruktur passen und einen leichten Zugriff ermöglichen.
- Setzen Sie ein Protokoll durch, indem Sie anstelle von einzelnen Anweisungen Verfahren verwenden. Ein Verfahren ist eine Sammlung von Anweisungen, die die Kosten für die Ausführung einer sich wiederholenden Abfrage verringert. Wenn Sie zum Beispiel eine App verwenden, mit der Sie einmal die Woche Daten abrufen, kann diese Abfrage eine beträchtliche Menge der Datenbankaktivität beanspruchen. Sie könnten ein Verfahren einrichten, das gewährleistet, dass die Abfrage schnell und ganz nach Plan ausgeführt wird, da Datenbank-Engines Prozeduren ausführen, ohne sie zu optimieren.
- Setzen Sie, soweit möglich, globale temporäre Tabellen (GTT) ein, um Komplikations-Summierungsabfragen zu vereinfachen. Durch Unterteilung der arbeitsintensiven Subabfragen können GTT die Datenbankleistung nachweislich erheblich verbessern.
- Arbeiten Sie mit „hints“ oder Hinweisen. Zur Unterstützung von Anwendungsentwicklern und Datenbankadministratoren stellt Oracle online eine Liste der „Hints“ bereit. Ihr Zweck, wie von der Datenbank selbst erläutert, ist es, Administratoren und Entwicklern die „Änderungen von Ausführungsplänen“ und das „Erzwingen verschiedener Ansätze“ zu erlauben. Somit können Entwickler, die ihre SQL-Anweisungen feineinstellen, in bestimmten Fällen die Kontrolle über den Optimizer übernehmen, wenn Menschen mehr über die Daten wissen als das Optimierungsprogramm. In den Fällen können sie dafür sorgen, dass die Ausführungspläne befolgt und nicht außer Kraft gesetzt werden, wenn ein Datenzugriffspfad gewählt wird, der die Geschwindigkeit und Leistung nicht optimiert.
- Abschließend: Machen Sie Performance-Tuning zur Routine. Auch wenn Sie keine redundanten Arbeitsvorgänge auf das fortwährende Tuning immer gleicher Abfragen einstellen wollen, erfordert Performance-Tuning in SQL eine routinemäßige Wartung, um eine zeitlich bedingte Leistungsabnahme in der Datenbank zu verhindern, die durch die Weiterentwicklung der Datensätze wie der RDBMS-Software entsteht. Nehmen Sie sich unter dem Gesichtspunkt die routinemäßige Normalisierung und Defragmentierung der Datenbank vor.
Empfehlungen von Oracle-Performance-Tuning-Software und Oracle-Performance-Tuning-Tools
Natürlich ist es fast unmöglich, diese ganze Arbeit der Leistungsüberwachung und Leistungsbewertung von Oracle manuell auf einer Ad-hoc-Basis zu erledigen. Es gibt zahlreiche Software-Pakete, die nützlich und kostengünstig sind, die die Nachverfolgung der Datenbankleistung automatisieren und Datenbankadministratoren dabei helfen können, die Ursache für Performance-Probleme zu ermitteln. So sparen IT-Abteilungen jede Menge Zeit. Statt nach Erkennung einer Verzögerung den Code und die Datenbank nach dem Ursprung durchsuchen zu müssen, können die Administratoren die Software auf Abfragen überprüfen, bei denen die Leistung am stärksten betroffen war.
Dies sind die von mir am meisten geschätzten Oracle Datenbank-Tools:
SolarWinds® Database Performance Analyzer® (DPA) ist eine der leistungsstärksten Analyse-Lösungen, mit der die SQL-Abfrageleistung in Oracle geprüft werden kann. Das Dashboard wurde benutzerorientiert entworfen und bietet umfassende, informative Visualisierungen, die SQL-Statement-Aktivitätsdaten aufschlüsseln, die auf anderen Plattformen verdichtet und schwer zu analysieren sein können.
Das Dashboard zeigt ein Zeitanalysediagramm, das den Tag mit der gesamten Reaktionszeit auf Abfragen darstellt (die Zeitspanne zwischen einer Anfrage und der Antwort, das heißt die kumulative Verarbeitungszeit und die Wartezeit auf die Verfügbarkeit der Ressourcen). Der jeweilige Tagesbalken ist nach Abfrageanweisung farbcodiert, was es DBA ermöglicht, schnell Einblick in die Messwerte jeder einzelnen Abfrage zu erlangen, indem sie sie einfach anklicken.
Der Database Performance Analyzer® sammelt Daten in Echtzeit. Somit sind die Informationen von einem Moment auf den nächsten aktuell. Auch zeigt das Tool Warnmeldungen im Dashboard an (oder sendet diese per E-Mail oder als mobile Benachrichtigung), wenn es systemkritische Probleme erkennt. Das hilft DBA, ihre chaotische Arbeitslast hierarchisch einzuteilen und sich zuerst um potenzielle Probleme und Abfragewartezeiten zu kümmern, die die größten Auswirkungen auf die Systemleistung haben, bevor sie sich anderen Dingen widmen.
Diese Funktion des Oracle-Performance-Monitoring und -Tuning-Tools von SolarWinds® ist besonders nützlich, denn sie setzt den Fokus der Performance-Tuning-Arbeit, welche bei falscher Handhabung hohe Investitionen ohne merkliche Erfolge bringt, auf einen Aspekt: die Wartezeit. Viele Tools und selbst IT-Abteilungen machen den Fehler, beim Performance-Tuning die Ressourcennutzung zu priorisieren, aber das kann zur Verschleierung der Ursache des Leistungsproblems führen. Es geht in erster Linie um Vermutungen – was in der Datenbank-Performance-Analyse nicht der Fall ist, denn sie vergleicht spezifische Abfragen, Wartezeitereignisse, I/O- und Speicherstatistik und Datenbankaktivität untereinander, um Kausalitäten zu bestimmen und Performance-Lösungen zu finden.
SolarWinds® DPA ist beispiellos in der Art und Weise, wie es Daten konsolidiert und analysiert, um sie wirklich verwertbar zu machen. Sein Diagramm der SQL-Anweisungen mit den schlechtesten Leistungsergebnissen gibt Benutzern die Möglichkeit, spezifische Wartevorgangstypen und Ereignisse zu erkennen, die Wartezeit in Anwendungen verursachen. Wenn das Tool erkennt, dass ein Wartevorgang zum Beispiel an der CPU liegt, haben DBA einen Ausgangspunkt, an dem das Performance-Tuning beginnen kann: bei der eigentlichen Ursache. Die Behebung dieses Problems ergibt sofort eine Leistungssteigerung mit messbarem Nutzen für die Netzwerkbenutzer und die Anwendungen. Weiter verbessert DPA die Gruppenkommunikation und den institutionellen Arbeitsspeicher. DPA verwahrt nicht nur historische Daten, sondern gibt auch benutzerspezifische Berichte, Warnmeldungen und Metriken für Datenbankadministratoren aus, die sie intern ihren Kollegen oder extern anderen Abteilungen oder sogar Kunden vorlegen können.
Ein weiteres hervorragendes Oracle-Performance-Monitoring und -Tuning-Tool für alle, die wissen wollen, wie sie die Oracle Datenbank-Performance prüfen können, ist der Idera SQL Diagnostic Manager. Er enthält vergleichbare Funktionen wie das SolarWinds® DPA-Tool, zum Beispiel prädiktive Warnmeldungen und anpassbare Überwachungseinstellungen für mehrere Server.
Unserer Ansicht nach liegt seine größte Stärke in den präskriptiven Empfehlungen. Wenn also ein Leistungsproblem vorliegt, markiert das Tool dieses Problem und empfiehlt eine Lösung wie ein ausführbares Skript. Dies ist besonders hilfreich für IT-Mitarbeiter, die sich noch mit dem Performance-Tuning von SQL-Abfragen beschäftigen, obwohl sie selbstverständlich ihr eigenes Fachwissen benötigen, wenn es darum geht, komplexe Engpässe zu beheben.
Die Oberfläche erscheint ein wenig überladen, aber das Tool ist mit Sicherheit eine gute Option für Windows-Anwender. Das einzige andere Problem, was erwähnt werden sollte, sind die konfigurierbaren Berichte und die Überwachung, die beide nicht so robust wirken, wie sie sein sollten.
Bemerkenswert ist auch die Gratis- oder Free-Version von SolarWinds® DPA. Es bietet nicht alle Funktionen der gebührenpflichtigen Version, sticht jedoch als einziges Zeitüberwachungs-Tool für Datenbanken hervor.
DPA Free umfasst einige großartige Funktionen: das Tool überwacht die Reaktionszeit und zeigt sowohl Warteereignisse als auch Wartevorgangstypen an, die Datenbankadministratoren einen datengesteuerten Ansatz und nützliche Visualisierung bieten. Genau wie die gebührenpflichtige Version von DPA arbeitet es ohne Agenten, unterstützt eine unbegrenzte Anzahl von Benutzern und belastet den Server zu weniger als 1 %.
Angesichts der nicht vorhandenen Kosten und dieser Spezifikationen hat DPA Free einen hohen Wert und ist ein ausgezeichneter Ausgangspunkt für diejenigen, die diese Arbeit zum ersten Mal in Angriff nehmen. Datenbankadministratoren, die jedoch tiefer gehende Funktionen suchen, um anhand von Reaktionszeiten die Ursachen einer Leistungsabnahme in der Datenbank zu untersuchen, sind zweifelsohne mit der Premium-Version von DPA besser bedient.