Fakultät für Mathematik und Informatik Lehrstuhl für Datenbanken und Anwendungssysteme Seminar: Aspekte und Werkzeuge der DB Administration und deren Automatisierung »ORACLE 10g: The self-managing database« Sommersemester 2006 Benedikt Terschluse, Matrikelnr.: 67605 Inhalt 1. Einleitung 3 2. Funktionalität von ORACLE 10g 4 2.1 self-configuring 4 2.1.1 Das automatische Speichermanagement 4 2.1.2 Der Size Advisor 6 2.2 self-optimizing 7 2.2.1 Die Automatic Workload Repository (AWR) 8 2.2.2 Der Automatic Database Diagnostic Monitor (ADDM) 8 2.2.3 Der Enterprise Manager 10 2.2.4 SQL Tuning in Database 10g 11 2.2.5 Der SQL Tuning Advisor 12 2.2.6 Der SQL Access Advisor 14 2.3 self-organizing 14 2.3.1 Der Resource Manager 15 2.3.2 Beispiele für Ressourcenpläne 16 2.4 self-inspecting 19 2.5 self-protecting 19 2.6. self-healing 19 3. Vergleich zu DB2 21 4.Fazit 22 2 1. Einleitung ORACLE wurde 1977 in Kalifornien (USA) von Larry Ellison, Bob Miner und Ed Oates gegründet. Heutiger CEO ist Lawrence J. Ellison. Das Unternehmen beschäftigt heute rund 55000 Mitarbeiter weltweit und hat bei Datenbanken einen Marktanteil ca. 41%, in etwa soviel wie Hauptkonkurrent IBM mit DB2. In dieser Ausarbeitung wird ORACLE Database 10g Release 2 betrachtet (von 2005). ORACLE gibt vor, mit Database 10g das erste Datenbankmanagementsystem geschaffen zu haben, was sich zu großen Teilen selbst verwalten und optimieren kann. Dazu sollen die entsprechenden Features in den folgenden Gebieten betrachtet werden [1]: • Self-configuring: Eine Datenbank sollte nach der Installation eine Konfiguration annehmen, mit der man arbeiten kann, ohne großartig etwas einzustellen. Wünschenswert ist hier eine automatische Analyse der Rechenpower, etc. um dem Kunden dann eine möglichst passende Konfiguration „out of the box“ anzubieten. Es gibt auch Wizzards, die nach der eigentlichen Installation aufgerufen werden können. • Self-optimizing: Eine Datenbank sollte sich selbst optimieren können. Das heißt, sie muss erkennen wo Schwachstellen liegen und diese beseitigen. • Self-healing: Bei Fehlern sollte die Datenbank diese lösen, oder zumindest dem Administrator Lösungsvorschläge machen. • Self-protecting: Die Datenbank sollte Sicherheitslücken erkennen um sich selbst vor potentiellen Angriffen schützen zu können. • Self-organizing: Die Datenbank sollte mit den gegeben Ressourcen gut wirtschaften und diese performanceoptimal verteilen. Dieser Punkt ist recht eng mit self-optimizing verwoben. • Self-inspecting: DBMS sollte sich kennen. Es muss wissen, wann welche workload anfällt, also Statistiken sammeln, etc. 3 2. Funktionalität von ORACLE 10g In diesem Kapitel sollen nun analysiert werden, welche Funktionen Database 10g in den eben angesprochenen Bereichen besitzt. 2.1 self-configuring Mitunter dauert schon die reine Installation einer Datenbank sehr lange, ganz zu schweigen von der ersten halbwegs lauffähigen Konfiguration. Bei ORACLE Database 10g soll eine Server-Installation (1.5 GB) in 20 Minuten abgeschlossen sein, vorher soll es doppelt so lange gedauert haben. Eine Client Installation soll sogar in nur einer Minute geschafft sein und ist 80MB groß. Um eine Datenbank zu erstellen gibt es den Database Creation Assistent (DBCA). Der DBCA leitet den DBA als eine Art Wizzard durch den Einrichtungsvorgang. Hier kann man direkt alle Einstellungen tätigen, um eine erste, funktionierende Datenbank zu erstellen. Dies ist auf dem Gebiet der out-of-the-box Konfiguration die einzige Möglichkeit, die Database 10g bietet. Denkbar wäre hier auch eine selbständige Konfiguration auf Grund der verfügbaren Hardware, ohne einen Eingriff des Benutzers. Dies wird aber nicht angeboten. Für spätere Updates gibt es den Database Update Assistent (DBUA). Er leitet durch den Update-Vorgang. Auch die manuellen updates wurden vereinfacht: Man muss nur noch das catupgrd.sql Skript ausführen. Es ruft dann selbständig alle weiteren notwendigen Skripte auf [2]. 2.1.1 Das automatische Speichermanagement Auf Grund der Einführung des Automatic Shared (SGA) Memory Management (SGA steht für System Global Area, den Bereich wo Daten und Informationen für eine Datenbank gehalten werden) muss der DBA nicht mehr festlegen welche Komponente wie viel Speicher bekommt, sondern legt nur noch den SGA_TARGET Parameter fest. Dieser verteilt dann, je nach Workload, den Speicher an die einzelnen Komponenten [4]. Diese sind: - shared pool (für die Ausführung von SQL und PL/SQL) - java pool (java excecution state) - large pool (für große Bedarfe wie RMAN) - buffer cache - streams pool Vor Database 10g musste man für jede dieser Komponenten den Speicher einzeln festlegen. Dieser Wert war dann fix. Hatte eine Komponente nun eine hohe Last, so konnte es zu einem 4 Out-Of-Memory-Fehler kommen, auch wenn das System möglicherweise noch Speicher zur Verfügung hatte, dieser aber anderen Komponenten zugeteilt war. Hier müsste dann der DBA explizit eingreifen und die Speicherverteilung ändern. In Database 10g läuft das nun folgendermaßen ab: Man legt den SGA_TARGET Parameter fest. Nun verteilt das System den zur Verfügung stehenden Speicher nach der aktuellen Workload. Ändert sich diese und braucht dadurch eine Komponente mehr Speicher, so wird dieser von einer anderen Komponente übertragen. Hierfür ist kein Benutzereingriff mehr notwendig. Eingriffsmöglichkeiten für den DBA bestehen hier insoweit, dass er für die einzelnen Komponenten minimale Speichergrößen festlegen kann. Der verbleibende Speicher kann dann wiederum automatisch verteilt werden. Hierzu ein kleines Beispiel: SGA_TARGET = 132 MB SHARED_POOL_SIZE = 32 MB DB_CACHE_SIZE = 20 MB Für SHARED_POOL_SIZE und DB_CACHE_SIZE werden nun nie weniger als 32, bzw. 20 MB bereitgestellt. Die verbleibenden 80MB können dagegen frei an die anderen Komponenten vergeben werden. Diese Einstellungen kann man sich im Enterprise Manager oder im View V$SGA_DYNAMIC_COMPONENTS ansehen. Abbildung 1: Festlegen und Aktivieren des SGA_Target Parameters im Enterprise Manager 5 Es gibt allerdings noch Komponenten, für die der DBA den Speicher weiterhin manuell zuteilen muss. Dies sind zum Beispiel die Recycle Buffer Caches und Additional Buffer Caches. Der hier verbrauchte Speicher steht dann ebenfalls nicht für die automatische Verwendung zur Verfügung. Zusammenfassung der Vorteile durch das automatische Speichermanagement: 1. Out-Of-Memory-Fehler treten seltener auf und auch nur dann, wenn tatsächlich kein Speicher mehr vorhanden ist. Beispiel: Datenbank mit 1 GB Speicher. Alte Konfiguration: SHARED_POOL_SIZE = 128 MB DB_CACHE_SIZE = 896 MB. Versucht das System nun mehr als 128 MB dem Shared Pool zuzuweisen gibt es einen Out-Of-Memory-Fehler, auch wenn noch Speicher zur Verfügung steht, dieser aber für DB Cache reserviert ist. Neue Konfiguration: SGA_TARGET = 1GB. Nun kann das System diese 1GB frei verteilen, je nach dem wo sie benötigt werden. 2. Performance wird deutlich verbessert: Ändert sich die Workload, beispielsweise durch Saisonzyklen oder Tag/Nacht Wechsel, so kann das System direkt darauf reagieren und die Speicherzuweisungen anpassen. Der DBA müsste hier zunächst mal analysieren, wie sich die Belastungen überhaupt geändert haben und kann dann erst reagieren. 3. Einfacher zu bedienen: Der DBA braucht im Minimum nur einen Parameter festlegen und kann dann einfach das System machen lassen. Das automatische Speichermanagement lässt sich auf zwei verschiedene Weisen aktivieren: Entweder explizit im Enterprise Manager auf „Enable“ klicken (siehe Abbildung 1) oder implizit über die Kommandozeile: Dort ALTER SYSTEM SET SGA_TARGET = „Größe des Speichers“ und alle anderen Komponenten auf Null setzen. 2.1.2 Der Size Advisor Um die optimale Größe für den SGA_TARGET-Parameter zu finden gibt es den Size Advisor. Dazu gibt es in Database 10g ein Diagramm, was die Veränderung der Dauer von Anfragen an die Datenbank zeigt (in Abbildung 2 als Improvement in DB Time bezeichnet), je nach dem 6 wie viel Speicher zur Verfügung gestellt wird. Dieses Diagramm ist in Abbildung 2 zu sehen: In diesem Beispiel ist Ab ca. 165MB ist hier keine weitere Verbesserung zu erkennen. Dies liegt daran, dass der Speicher dann einfach nicht mehr die knappe Ressource ist. Eine weitere Speichererhöhung bringt also keine Performance mehr. Abbildung 2: Veränderung der Performance in Abhängigkeit vom bereitgestellten Speicher Natürlich kann man dem SGA_TARGET nicht mehr Speicher zuweisen, als das System besitzt (SGA_MAX_SIZE). Außerdem kann man auch nicht weniger zuweisen, als für die Summer der Minimalkonfigurationen der anderen Komponenten benötigt wird. Dazu ein kleines Beispiel [4]: SGA_MAX_SIZE = 1024 MB DB_CACHE_SIZE = 96 MB SHARED_POOL_SIZE = 128 MB Der SGA_TARGET kann nun zwischen 224 und 1024 MB auf jeden beliebigen Wert gesetzt werden. Er muss allerdings innerhalb dieser Grenzen bleiben. 2.2 self-optimizing Self-optimizing beschreibt alle Maßnahmen, die vom DBMS unternommen werden, um die Datenbank so schnell wie möglich zu machen. Das bedeutet, dass Datenbankoperationen zu jeder Zeit möglichst schnell ausgeführt werden können. Damit sind Lese- wie auch Schreibzugriffe gemeint. Je nach dem, welcher Last die Datenbank ausgesetzt ist, müssen hier unterschiedliche Strategien angewendet werden. Es kommt also immer darauf an, einen geschickten trade-off zwischen den Kosten, welche beispielsweise die Pflege eines weiteren Indexes oder Matirialized Views verursacht, und der eingesparten Suchzeit zu finden. Mit 7 dieser Problematik beschäftigt sich auch die Optimierungsarchitektur von Database 10g. Um Probleme überhaupt erst zu finden gibt es das sogenannte AWR und ADDM. AWR ist die Automatic Workload Repository und ADDM der Automatic Database Diagnostic Monitor [2]. Abbildung 3: Optimierungsarchitektur in Database 10g 2.2.1 Die Automatic Workload Repository (AWR) Die AWR läuft automatisch im Hintergrund. Standardmäßig erstellt sie alle 30 Minuten einen Snapshot der Workload und löscht Daten, die älter als 7 Tage sind. Somit wird sichergestellt, dass die Festplatte nicht mit Statistiken überschüttet wird. Diese Parameter können natürlich angepasst werden, und den DBA kann auch jederzeit selbst einen snapshot machen. Die Daten, die in der AWR gespeichert und verwaltet werden, stellen die Basis für alle Optimierungen des ADDM da [7]. 2.2.2 Der Automatic Database Diagnostic Monitor (ADDM) Der ADDM schaut sich das gesamte System an und analysiert, was zur Verbesserung der Performance beitragen kann. Er schlägt dann vor, was man optimieren könnte oder leitet an einen der Spezialisten, wie z.B. den SQL Tuning Advisor weiter. Diese Spezialisten werden 8 später noch vertiefend betrachtet. Das Ziel des ADDM ist es, die Bereiche der Datenbank zu finden, welche die meiste Datenbankzeit verbrauchen. Diese Probleme werden vom ADDM dann weiter analysiert, um die Ursachen zu finden (Abbildung 3). Reports, die das ADDM erstellt hat, kann man sich in Textform oder auch mit graphischen Illustrationen im Enterprise Manager (siehe: 2.2.3) ansehen. Über den Enterprise Manager kann man sich komfortabel bis zur Quelle des Problems navigieren (Abbildung 4). Man bekommt verschiedene Lösungsvorschläge generiert und eine Angabe über die mögliche Zeitersparnis (Abbildung 5). Man kann also abschätzen, ob sich ein Eingriff lohnt oder ob man besser an anderer Stelle optimieren sollte [3]. Abbildung 4: Vom ADDM gefundene Performanceprobleme Abbildung 5: Lösungsvorschläge für diese Probleme 9 2.2.3 Der Enterprise Manager Abbildung 6: Titelseite des Enterprise Manager An dieser Stelle soll der Enterprise Manager mit seinen verschiedenen Reports näher erläutert werden. Von dort aus kann man diverse Untermenüs aufrufen, um sich oben genannte Problemlösungsvorschläge genauer anzuschauen oder einen Blick auf die Lastverteilung des Systems zu werfen. Der Enterprise Manager verfügt über folgende Komponenten: - DB Home - Performance Page - Top Session - Top SQL - Wait Detail - SQL Detail - Session Detail - ADDM Page - ADDM Detail Die Struktur, in der diese Komponenten zusammenhängen ist in Abbildung 7 dargestellt. 10 Abbildung 7: Struktur des Enterprise Managers Die Wait-Detail-Seite zeigt an, welche Sessions oder Seiten am längsten warten müssen. So kann man herausfinden, ob es Kandidaten gibt, die aus der Reihe fallen. Will man sich diese genauer anschauen, kann man aus dem wait detail direkt zum session detail, sowie zum SQL detail springen. Im SQL-Detail kann man sich den Text des ausgewählten SQL Statements anschauen, sowie die CPU Auslastung. So kann man analysieren, ob das Statement wirklich bearbeitet wird oder noch auf andere Ressourcen wartet. Im Session-Detail bekommt man Informationen zu den Sessions. So kann man analysieren, ob die Wartezeiten in etwa gleich auf die Sessions verteilt sind, oder ob es Sessions gibt, die überhaupt nicht mehr an die Reihe kommen. 2.2.4 SQL Tuning in Database 10g Einer der wichtigsten Punkte zur Performanceoptimierung sind die SQL Anfragen, die von den Anwendungen, die mit der Datenbank arbeiten, gesendet werden. Diese zu optimieren ist Aufgabe des Optimizers. In ORACLE 10g gibt es den rule-based Optimizer nicht mehr, sondern nur noch den cost-based Optimizer. Dieser berechnet die optimale Ausführung der Anfrage auf Grund der Ausführungskosten (in CPU-Zeit). Ein Eingriff des DBA ist hier nicht mehr erforderlich. Um SQL Anfragen zu tunen, gibt es im Wesentlichen 3 Schritte, die so lange wiederholt werden, bis die Performance entweder akzeptabel wird oder sich einfach keine signifikanten Verbesserungen mehr einstellen. Diese Schritte sehen folgendermaßen aus [5]: 1. Herausfinden, welche Anfragen sehr lange dauern und einen besonders hohen Bedarf an Systemressourcen haben. 11 2. Sicherstellen, dass der Query-Optimizer die Anfrage bereits gut optimiert hat. 3. Andere Ausführungspläne testen, um die Anfrage schneller zu machen. Die Abarbeitung der Schritte, sowie die Anzahl der Wiederholungen laufen in Database 10g vollkommen automatisch ab. ADDM und AWR finden die SQL Anfragen, die am längsten dauern (high load SQL). Diese können dann mit dem SQL Tuning Advisor getunt werden. 2.2.5 Der SQL Tuning Advisor Abbildung 8: SQL Tuning in Database 10g Der SQL Tuning Advisor hat gegenüber dem bisher verwendeten Optimizerkonzept den Vorteil, dass er mehr Zeit für die Optimierung der Statements hat, da hier nur die echten „Härtefälle“ landen. Alle Statements wurden ja bereits mit dem Query Optimizer getunt. Dieser hat aber in der Regel nur Sekunden für die Erstellung eines geeigneten Ausführungsplans, da der laufende Betrieb weitergeht. Daher muss er sich auf Heuristiken und grobe Statistiken verlassen und hat auch keine Möglichkeit die Resultate zu analysieren. Der SQL Tuning Advisor dagegen bekommt einige Minuten um seinen Ausführungsplan zu erstellen. Dazu fährt er Analysen in vier verschiedenen Bereichen: 1. Analyse von Statistiken: Es wird jedes Objekt in der Anfrage nach fehlenden Statistiken analysiert. Ebenfalls geprüft wird, ob die Statistiken auch aktuell sind. Dann können Vorschläge gemacht werden, was man in Zukunft noch erheben sollte und welche Statistiken aktualisiert werden sollten. 12 2. SQL-Profiling: Hier werden zunächst einmal die Daten verifiziert, auf deren Basis der Query Optimizer seinen Ausführungsplan angelegt hat. Das heißt, es wird geschaut, ob er nicht Fehleinschätzungen vorgenommen haben könnte, da er zum Beispiel mit Standardheuristiken gerechnet hat, da es keine guten Statistiken zu den Tabellen gibt, über die eine Anfrage gestellt wurde. So etwas kann zu gewaltigen Fehleinschätzungen und somit zu ineffizienten Ausführungsplänen führen. Ist dieser Teil abgeschlossen, so prüft der Tuning Optimizer noch, ob er Informationen aus den zurückliegenden Ausführungen des SQL Statements gewinnen kann. Wenn also beispielsweise ein Statement meistens nur teilweise ausgeführt wird, so könne er den Optimizer entsprechend darauf einstellen. Hat der SQL Tuning Advisor nun einen geeigneten Plan gefunden, erstellt er ein SQL Profil. Anschließend wird dem Benutzer vorgeschlagen dieses zu speichern und zu benutzen. Ist ein SQL Profil erst einmal gespeichert, so kann es der Optimizer jederzeit verwenden, um für Anfragen gleicher oder ähnlicher Charakteristik einen geeigneten Ausführungsplan zu erstellen (Abbildung 9). Abbildung 9: Erstellen und benutzen des SQL Profils 3. Zugriffspfadanalyse: Es wird geschaut, ob das Anlegen eines neuen Indexes die Ausführung der Anfrage deutlich beschleunigen kann. Dabei wird auch darauf geachtet, dass der Aufwand zum Anlegen des Indexes nicht seinen Nutzen übersteigt. 4. SQL Struktur Analyse: Hier wird die SQL Anfrage auf ihre Struktur geprüft und dann ggf. verbessert. Diese Verbesserungen können syntaktischer, sowie semantischer Natur sein. 13 Aufrufen kann man den SQL Tuning Optimizer im ADDM. Hier bekommt man die Ergebnisse seiner oben aufgeführten Bemühungen dann auch wieder graphisch zu sehen und kann dann auch festlegen, welchen seiner Vorschläge man beherzigen will (Abbildung 10). Abbildung 10: Vorschlag des SQL Tuning Advisors 2.2.6 Der SQL Access Advisor Der SQL Access Advisor analysiert ein vorgeschlagenes Datenbankschema für eine bestimmte Workload und schlägt dann vor, welche Indexe und Materialized Views zu erstellen sind. Hierbei wird auch wieder beachtet, dass die Kosten zum Anlegen dieser Strukturen nicht den Nutzen, den man durch kürzere Ausführungszeiten erhält, übersteigen. 2.3 self-organizing Ein DBMS sollte die Fähigkeit haben sich selbst zu organisieren. Das bedeutet, die gegebenen Ressourcen geschickt nutzen und auf die Anfragen verteilen. Dieser Punkt ist natürlich nicht trennscharf von self-configuring oder self-optimizing abzugrenzen, da hier auch eine Art Konfiguration passiert und es letztendlich, wie immer, um die Optimierung der Performance geht. ORACLE Database 10g besitzt für die Verteilung der Systemressourcen den Resource Manager. 14 2.3.1 Der Resource Manager Im Resource Manager kann man einstellen, wie die Systemressourcen (angegeben in CPUZeit) auf die Anwendungen verteilt werden können. Hier kann man also bestimmten Anwendungen oder Benutzern, die auf der Datenbank arbeiten möchten, bestimmte Prozentsätze der CPU Leistung zuweisen. Außerdem ist es möglich, Batch Jobs Resourcen zu bestimmten Zeiten unterschiedlich zuzuweisen, um diese z.B. nur in Nebenzeiten auszuführen, damit sie den laufenden Betrieb nicht stören. All diese Dinge (und noch mehr) kann man in einem Resource-Plan festlegen [6]: - CPU-Zeit: Hier lässt sich, wie oben schon gesagt, die Verteilung der CPU-Zeit auf die anfragenden Anwendungen und Benutzer(-gruppen) verteilen. Es ist möglich, verschiedene Pläne anzulegen, je nach dem wie die Workload gerade aussieht. Außerdem kann man auch Unterpläne festlegen, in welchen man Aktionen bestimmt, die bei einer CPU-Auslastung von 100% ausgeführt werden. Hier kann man beispielsweise festlegen, dass dann hoch prioritäre Anwendungen mehr CPU Zeit bekommen. Hat man also beispielsweise bei einem großen Versandhaus eine Anwendung, die für die Verwaltung des Lagers auf die Datenbank zugreifen möchte, so ist diese sicherlich als höher prioritär anzusehen als beispielsweise ein Sicherungsjob, der auch zu einer Nebenzeit (z.B. nachts) durchgeführt werden kann. Hier würde das System dann einfach die CPU Zeit ganz an die Lagerverwaltung geben, damit die Kunden bedient werden können. - Anzahl aktiver Sessions: Hier kann man die maximale Anzahl gleichzeitiger Anfragen festlegen, die pro Benutzergruppe ausgeführt werden dürfen. Ist diese maximale Anzahl erreicht und wird eine weitere Anfrage abgesetzt, so wird sie eingereiht und muss warten, bis eine frühere abgearbeitet ist. - Parallelitätsgrad: Dieser Punkt ist hauptsächlich für Data-Warehouses interessant: Man kann festlegen wie viele Server parallel eine Anfrage ausführen dürfen. Das soll verhindern, dass eine einzige Operation das gesamte System belegt. - Automatischer Wechsel der Gruppen: Hier kann man festlegen, dass eine Session, wenn sie einen bestimmten Ressourcenverbrauch erreicht hat, automatisch einer anderen Verbrauchergruppe zugeordnet wird. Diese hat dann meist eine niedrigere Priorität, so dass zunächst kürzere Anfragen eine Chance haben, bearbeitet zu werden. - Abbrechen von Anfragen und Sessions: Eine Abwandlung des Gruppenwechsels von eben dahingehend, dass lang laufende Sessions nicht mehr nur eine niedrigere Priorität bekommen sondern direkt beendet werden. 15 - Grenzen für die Ausführungszeit: Man kann eine maximale Ausführungszeit für Datenbankoperationen festlegen. Wenn das DBMS schätzt, dass die Anfrage länger als diese Zeit dauern wird, so wird sie gar nicht erst ausgeführt. - Rücksetzungspool: Hier legt man fest, wie viele oder auch wie lange alte Daten gespeichert bleiben sollen und Aktionen wieder rückgängig machen zu können. Dies kann viele Ressourcen kosten und daher hier limitiert werden. - Grenzen für Untätigkeit: Hier kann man festlegen, wie lange eine Session maximal untätig sein darf, bis sie beendet wird. 2.3.2 Beispiele für Ressourcenpläne Am deutlichsten wird die Notwendigkeit verschiedener Ressourcenpläne wenn man sich ein paar Beispiele zu den verschiedenen Einsatzmöglichkeiten ansieht: 1. Banksystem: Tabelle 1: Ressourcenverteilung Bank Für die Bank kommt es darauf an, dass die Kunden möglichst schnell bedient werden. Daher teilt man ihnen auch 90% der verfügbaren CPU-Zeit zu. Nur 10% verbleiben dann für Batch-Jobs (Tabelle 1). Man kann diesen Plan auch nochmals unterteilen (Subplan festlegen): So kann man dann beispielsweise festlegen, dass bestimmte Premiumkunden 70% von diesen 90% bekommen sollen (Abbildung 11). Abbildung 11: Mehrstufige Ressourcenverteilung für die Bank 16 2. ERP- oder CRM-System Tabelle 2: Ressourcenverteilung ERP oder CRM System In diesem Beispiel haben wir ganz andere Anforderungen als bei der Bank. In einem ERP-System kann es auch länger dauernde Operationen geben. Somit legt man hier fest, dass eine Operation, wenn sie länger als 3 Minuten dauert, automatisch in die BATCH-Gruppe gegeben wird und ihr damit weniger CPU-Ressourcen zur Verfügung stehen sollten. Dadurch wird verhindert, dass einzelne Operationen das System lahm legen. Des Weiteren wird hier festgelegt, dass nur maximal 6 Batchoperationen gleichzeitig laufen dürfen. Dies ist vernünftig, da der gesamten Gruppe ohnehin nur 30% der CPU Zeit zur Verfügung steht und sonst möglicherweise Batchoperationen sehr lange dauern. Noch dazu werden alle Batchoperationen abgebrochen, die länger als 12 Stunden laufen (Tabelle 2). 3. Data Warehouse Tabelle 3: Ressourcenverteilung Data Warehouse In diesem Beispiel haben wir 3 verschiedene Gruppen, je nach dem, wie wichtig die jeweiligen Operationen sind. Läuft eine Operation länger als 60 Minuten, so wird sie in die „low priority“ Gruppe geschoben. Mehr als 20 Operationen dürfen außerdem nicht gleichzeitig laufen. Damit soll auch verhindert werden, dass die Operationen sich gegenseitig blockieren. Für die Maximum Estimated Excecution Time wird geschätzt, wie lange eine Operation wohl brauchen wird. Ist das Ergebnis mehr als 15 Stunden, so wird sie gar nicht erst gestartet (Tabelle 3). 17 Anhand dieser Beispiele wird klar, warum es so wichtig ist, dass je nach Anforderungen unterschiedliche Ressourcenpläne festgelegt werden sollten. Einstellen kann man diese, wie immer, über das graphische Interface des Enterprise Managers (Abbildung 12). Abbildung 12: Resource Monitor im Enterprise Manager Neben der Ressourcenverteilung des Resource Monitors gibt es noch weitere Möglichkeiten im Bereich des self-optimizing in Database 10g: Die Intelligent Capacity Planning ermöglicht Schätzungen über die voraussichtliche Größe der Objekte, bevor sie erstellt werden. So kann man direkt den besten Speicherort auswählen und vermeidet eine übermäßige Fragmentierung der Platten. Der Storage Manager verteilt die Daten so auf die zur Verfügung stehenden Platten, dass eine minimale Lade- und Schreibzeit gebraucht wird. Grundlage für die Anordnung ist hierbei eine Analyse der workload. ASM ermöglicht auch die Vergrößerung der Datenbank, ohne die Notwendigkeit diese zuvor herunterzufahren. 18 2.4 self-inspecting Ein DBMS sollte sich kennen, also jederzeit Bescheid wissen, wie es um die Ressourcen und die workload bestellt ist. Gerade Letzteres ist nicht gerade einfach, da die workload sich dauernd ändert und nicht immer unbedingt regelmäßig. Daher ist es wichtig, dass das DBMS seine Statistiken stets aktuell hält. Nur dann können die Optimierungsfunktionen die richtigen Maßnahmen ergreifen. In Database 10g übernimmt diesen Job die AWR (Automatic Workload Repository) mit ihren regelmäßigen Snapshots. Da dieses bereits in Abschnitt 2.2 erklärt wurde, soll hier nicht noch einmal darauf eingegangen werden. 2.5 self-protecting Dieser Punkt beinhaltet sowohl den Schutz vor Angriffen auf die Datenbank als auch den Schutz vor deadlocks und Abstürzen durch schlechte Anfragen oder schlechte Ressourcenverteilung. Für ersteres ist der Resource Manager zuständig, der bereits in Abschnitt 2.3 erklärt wurde. Mit den richtigen Ressourcenplänen kann hier bereits verhindert werden, dass eine Anwendung oder eine Benutzergruppe die Datenbank in die Knie zwingt (siehe Beispiele in 2.3). Zum Schutz vor Angreifern bietet ORACLE die row-level security an. IBM und Microsoft setzen hier eher auf security per table. Vorteile der row-level security sind, dass mehrere Anwendungen mit unterschiedlichen Berechtigungen auf der selben Tabelle arbeiten können, ohne dass Materialized Views erstellt werden müssen. Da dies aber auch nur regelbasiert und nicht automatisch abläuft, soll hier nicht weiter darauf eingegangen werden. 2.6. self-healing Der Bereich self-healing stellt für ein autonomes DBMS folgende Anforderungen: Es muss in der Lage sein die Datenbank nach einem Fehler schnell wieder in einen funktionierenden Zustand zurückzuversetzen. Dabei muss natürlich gewährleistet sein, dass sensible Daten nicht verloren gehen und keine Inkonsistenzen entstehen (ACID-Eigenschaften müssen erfüllt werden). Wichtig ist aber auch, die Downtime möglichst klein zu halten. In Database 10g gibt es hierfür den Recovery Manager (RMAN). Der Benutzer muss hier nur noch ein Zeitfenster festlegen, in dem das Backup stattfinden, sowie die Stelle, wo das Backup hingespeichert werden soll. Dies legt man über den Parameter DB_RECOVERY_FILE_DEST fest. Alles was man für ein Backup braucht (control files, log files, ...) wird dann hier gespeichert und verwaltet. Gerade diese Verwaltung ist ein entscheidendes Feature: Die Dateien werden so komprimiert und angeordnet, dass eine maximale Ausnutzung des Speicherplatzes möglich ist. Außerdem werden alte und nicht mehr benötigte Dateien automatisch gelöscht [2]. 19 Das inkrementelle Backup gibt es bereits seit ORACLE Database 8.0. Inkrementelle Backups sichern nur die Änderungen seit dem letzten Backup. In Database 10g lassen sich diese nun schneller durchführen, da die Datenbank sich im laufenden Betrieb die Blöcke merkt, die geändert wurden. Somit entfällt eine lange Suche, wenn das Backup angestoßen wird. Dadurch wird sowohl der Speicherbedarf, als auch die Zeit für das eigentlich Backup reduziert. Ein Hauptproblem für die Sicherheit in Datenbanken ist immer der Benutzer. Fehler, die durch Benutzereingriff entstehen, sind auch sehr schwer zu vermeiden. Um nach einem Benutzerfehler wieder in einen funktionierenden Zustand zurück zu kommen gibt es das flashback feature. Damit kann man sehr schnell den Fehler ungeschehen machen. Die Beispieltabelle (Tabelle 4) zeigt, um wie vieles einfacher es in Database 10g ist, eine versehentlich gelöschte Tabelle wiederherzustellen: Tabelle 4: Wiederherstellung einer versehentlich gelöschten Tabelle Das Verfahren hinter dieser Funktionalität ist das Prinzip des „doppelten Bodens“, wie man es auch von Windows kennt: Es gibt einen Papierkorb, in dem gelöschte Objekte aufbewahrt werden, bis der Benutzer sich entschließt sie endgültig zu löschen. Bei Database 10g gibt es für dieses endgültige Löschen den neuen PURGE-Befehl. Noch dazu werden alte Objekte im Papierkorb spätestens dann gelöscht, wenn der Speicher für andere Objekte benötigt wird [2]. Alle Objekte, die sich noch im Papierkorb befinden, können wie in Tabelle 4 beschrieben wiederhergestellt werden. 20 3. Vergleich zu DB2 In diesem Abschnitt bezieht sich hauptsächlich auf eine Studie der Edison Group, in der Oracle Database 10g und IBM DB2 verglichen wurden (Datum der Studie: 1.11.2004) [8]. Es wurden Aufgaben aus verschiedenen Bereichen, die für die Datenbankadministration relevant sind, gestellt. Dabei wurde geprüft, wie viel Zeit benötigt wird, um die Aufgabe zu lösen und wie viele Schritte erforderlich waren. Bereiche und Ergebnisse: - Installation und erste, einfache out-of-the box Konfiguration. Hier ist ORACLE 11% schneller und braucht 29% weniger Schritte - Täglicher Betrieb: ORACLE ist 52% schneller und braucht 21% weniger Schritte - Sicherungen und Wiederherstellung nach einem Fehler. Sehr gute Werte für ORACLE: 58% schneller und 30% weniger komplex - Performancediagnose und Tuning. Hier ist der Vorteil von ORACLE am größten: 76% schneller und 62% weniger komplex Insgesamt zeigt sich schon, dass ORACLE mit Database 10g sehr gute Performancewerte erzielen konnte. Zusammengefasst über alle Bereiche ergibt sich folgendes Endergebnis: Tabelle 5: Vergleich ORACLE/DB2 Database 10g ist 47% schneller und man braucht im Schnitt 36% weniger Schritte um zum gewünschten Ergebnis zu kommen. Noch dazu wird dann hier die Arbeitsersparnis für den DBA ausgerechnet. Das kann man aber analog zu den oben genannten Daten sehen. Zusammenfassend kann man also sagen, dass die Ergebnisse dieser Studie eine klare Sprache für ORACLE sprechen. Fast 50% Zeitersparnis ziehen für ein Unternehmen erhebliche Kosteneinsparungen nach sich. Da Oracle verstärkt auf einfache Bedienbarkeit wert legt (siehe Enterprise Manager) und auch versucht, viele Informationen und Funktionen direkt am entsprechenden Objekt anzubieten ist dieses Ergebnis verständlich. Allerdings muss man auch 21 dazu sagen, dass dies EINE Studie zu diesem Thema war. Nimmt man andere Aufgaben, dann entsteht evtl. schon wieder ein anderes Bild. 4.Fazit ORACLE Database 10g bringt eine Vielzahl an automatischen Features mit. Sehr positiv ist in meinen Augen, dass vor allem auf einfache Bedienbarkeit und eine klare Struktur der Funktionalitäten wert gelegt wurde. Man hat also versucht es dem DBA so leicht wie möglich zu machen. Ein Beispiel: Im ADDM wird angezeigt, wo viele Ressourcen gebraucht werden. Dann kann man sich Details anzeigen lassen, wo gezeigt wird, was für das Problem verantwortlich war. Hier lässt sich dann auch das entsprechende Tuningfeature starten (z.B. SQL Tuning Advisor). Des Weiteren erleichtern auch Komponenten wie die Automatische Speicherverwaltung, wo der DBA nur noch den SGA-TARGET festlegen muss, die Arbeit. Bei der Optimierung ist die Kombination aus AWR und ADDM eine gute Idee. Auf diese Weise kann man eine große Menge an Statistiken anhäufen, diese auch gleich strukturieren und analysieren. Die Ergebnisse dieser Analysen sind dann sowohl die Basis für automatische Verbesserungen des DBMS, als auch für den DBA eine nützliche Hilfe um sich schnell ein Bild von der aktuellen Situation der Datenbank zu machen. Ebenfalls sehr komfortabel ist dann auch die Auswahl entsprechender Maßnahmen zur Performanceverbesserung. Die Vorschläge des ADDM muss man meist nur noch ausführen. Noch dazu bekommt man auch bereits vorher eine Schätzung, wie viel diese Maßnahme ungefähr bringen wird. Daher weiß man, ob man diese Maßnahme in Angriff nehmen, lieber einen alternativen Weg versuchen oder gar nichts verändern sollte. Auch das ist ein guter Ansatz, um dem DBA die Möglichkeit zu geben so produktiv wie möglich zu sein. Er wird also in seinen Entscheidungen unterstützt, ihm werden zeitraubende Tätigkeiten abgenommen und er kann sich auf das Wesentliche konzentrieren. Deutlich wird dies auch in der Studie: Im Schnitt braucht man zum Erreichen eines gewünschten Ergebnisses in Database 10g wesentlich weniger Schritte als in DB2. Klar ist allerdings auch, dass es für diese Automatismen und Assistenten gewisse Grenzen gibt, an denen auch sie nicht weiter kommen. Für die alltäglichen Grundfunktionen stellen sie aber eine große Erleichterung dar. Über die Qualität der Ergebnisse der Optimierungsarchitektur kann ich natürlich nicht all zu viel sagen. Hier müsste man viele DBAs befragen, die bereits vorher mit anderen ORACLE Datenbanken gearbeitet haben. Nach den Ergebnissen der Edison Group Studie scheint die Performance schon sehr gut zu sein. Allerdings werden die 22 Ergebnisse stark variieren, je nach dem, was man für Anforderungen stellt. Meiner Einschätzung nach wird es sich insgesamt nicht viel im Vergleich zu DB2 nehmen. Die hier angegebenen 47% schneller sind sicher über die Masse der verschiedenen Einsatzgebiete nicht zu halten. Größter Kritikpunkt ist allerdings, dass man viele Einstellungen immer noch von Hand machen muss. Eine Datenbank, die sich selbst komplett managed und organisiert ist Database 10g wahrlich noch nicht: Dies beginnt bereits nach der Installation. Anstatt ausgehend von den vorhandenen Ressourcen eine fertige Konfiguration bereitzustellen muss man den DMCA als Wizzard durchlaufen. Denkbar wäre hier, dass man nur eingibt, welche Daten man in der Datenbank pflegen möchte und das DBMS diese dann selbständig in bestimmten Tabellen anordnet und ggf. restrukturiert, je nach dem wie sich die Anforderungen verändern. Einfach zu realisieren wäre das allerdings nicht, und außerdem würde es wohl eine Zeit dauern, bis eine vernünftige Performance erreicht werden kann. Ein weiterer Kritikpunkt sind die vielen Einstellungen, die man doch noch von Hand machen muss: Insbesondere im Bereich des selfprotecting ist nicht all zu viel passiert. Eine Datenbank, die selbständig (z.B. anhand eines bestimmten Nutzerverhalten) erkennt ob ein Nutzer „böse“ Absichten hat, ist Database 10g nicht, aber auch dieser Punkt ist sicher nicht besonders einfach zu realisieren und vielleicht auch nicht das, wo die oberste Priorität der Hersteller liegt.Sonst gibt es aber an Database 10g nicht viel auszusetzen. Die Eingriffsmöglichkeiten, die dem DBA an vielen Stellen bleiben, sind natürlich sinnvoll. So muss man z. B. beim Resource Plan eben von Hand festlegen, wie man seine Ressourcen verteilen möchte. Als generelles Fazit kann man sagen, dass ORACLE hier schon eine sehr autonome Datenbank geschaffen hat, was sich auch in der Performance und Bedienbarkeit niederschlägt. Auch wird der DBA sehr gut an die Grenzen der autonomen Fähigkeiten geführt, wo ihm dann vorgeschlagen wird, was er nun versuchen sollte. Der DBA wird also keineswegs ersetzt, aber ihm wird die Möglichkeit geboten, effizienter zu arbeiten und sich somit auf die wirklich wichtigen Punkte zu konzentrieren. 23 Abbildungsverzeichnis Abbildung 1: Festlegen und aktivieren des SGA_Target Parameters im Enterprise Manager 5 Abbildung 2: Veränderung der Performance in Abhängigkeit des bereitgestellten Speichers 7 Abbildung 3: Optimierungsarchitektur in Database 10g 8 Abbildung 4: Vom ADDM gefundene Performanceprobleme 9 Abbildung 5: Lösungsvorschläge für diese Probleme 9 Abbildung 6: Titelseite des Enterprise Manager 10 Abbildung 7: Struktur des Enterprise Managers 11 Abbildung 8: SQL Tuning in Database 10g 12 Abbildung 9: Erstellen und benutzen des SQL Profils 13 Abbildung 10: Vorschlag des SQL Tuning Advisors 14 Abbildung 11: Mehrstufige Ressourcenverteilung für die Bank 16 Abbildung 12: Resource Monitor im Enterprise Manager 18 24 Literaturverzeichnis [1] Said, Elnaffar; Powley, Wendy; Benoit, Darcy; Martin, Pat: Today´s DBMSs: How autonomic are they?; September 2003 [2] Kumar, Sushil: Oracle Database 10g Release 2: The self managing database; Mai 2005 [3] Wood, Graham; Hailey, Kyle: The self managing database: Automatic Performance Diagnosis; November 2003 [4] Lahiri, Tirthankar; Nithrkashyap, Arvind: The self managing database: Automatic SGA Memory Management with Oracle Database 10g Release 2 [5] Ziauddin, Mohammed; Zait, Mohammed, Minhas, Mughees, Yagoub, Khaled: The self managing database: Guided Application & SQL Tuning; November 2003 [6] Kumar, Sushil: Oracle Database 10g Resource Manager; Oktober 2005 [7] Nanda, Arup: Oracle Database 10g: The Top 20 Features for DBAs [8] Werman, Aaron; Norris, Craig; Cohan, Barry: Comparative Management Cost Study: Oracle Database 10g and IBM DB2 Universal Database 8.2; November 2004 25