Friedrich – Schiller – Universität Jena Lehrstuhl für Datenbanken und Informationssysteme Institut für Informatik Prof. Dr. Klaus Küspert Aspekte und Werkzeuge der Datenbankadministration und deren Automatisierung – „Automated Statistics Collection“ Seminar Siegmundsburg im Sommersemester 2006 Betreuer: David Wiese Robert Fleischer Stauffenberg Straße 2a/112, 07747 Jena Tel.: 03641 / 234803 E-Mail: [email protected] Inhaltsverzeichnis 1. Autonomic Computing und dessen Motivation ............................................... 3 2. Statistiken in DB2 UDB .................................................................................. 4 2.1 Das Runstats Tool .................................................................................... 4 2.2 Beispiel für fehlerhafte Statistiken ............................................................. 5 3. Die „Automated Statistics Collection“ Architektur ........................................... 6 3.1 Der UDI Prozess im Detail ........................................................................ 8 3.2 Der QF Prozess im Detail ......................................................................... 9 3.3 Der Scheduler ......................................................................................... 12 3.3.1 Datenfluss zum Scheduler ............................................................... 12 3.3.2 Regeln zur Prioritätslisten Erstellung................................................ 13 3.3.3 Der Scheduling Algorithmus ............................................................. 14 4. Performance Messungen mit und ohne ASC ............................................... 15 5. Zusammenfassung ....................................................................................... 17 Literaturverzeichnis .......................................................................................... 19 Abbildungsverzeichnis ...................................................................................... 20 Tabellenverzeichnis .......................................................................................... 21 2 1. Autonomic Computing und dessen Motivation In einem im Jahr 2001 von IBM veröffentlichten Dokument [4] wurde herausgestellt das eines der größten Hindernisse für die IT - Industrie in naher Zukunft eine als „Complexity Crisis“ oder Komplexitätskrise beschriebenes Problem sei. Die Basis für diese Erkenntnis stellte die Tatsache dar das heutige Softwaresysteme nicht länger durch die Entwicklungsmöglichkeiten, diese sind durch Weiterentwicklungen von Designmöglichkeiten Programmiersprachen nicht mehr das primäre Problem, und der Programmierer begrenzt sind, sondern vielmehr durch ihre eigene Komplexität. Es gilt eine Vielzahl heterogener Softwareprodukte zu Unternehmensweiten Anwendungen zu verschmelzen und darüber hinaus so zu gestalten das Dienste über das Internet angeboten werden können. Das Administrieren und Konfigurieren dieser komplexen Systeme wird in Zukunft die menschlichen Kapazitäten und Möglichkeiten überschreiten. Hier setzt die Idee des „Autonomic Computing“ an. Die Idee ist denkbar einfach, Systeme die sich anhand grober Richtlinien selbst managen und konfigurieren. Hier bietet sich der Vergleich mit dem autonomen Nervensystem des menschlichen Körpers an, was zum Beispiel die Körpertemperatur konstant auf 37 Grad Celsius hält. Diese Idee wird auch als Self-Management bezeichnet und gliedert sich in vier Teilkonzepte. Das Erste stellt das Self-Configuration dar. Bisher ist das installieren, konfigurieren und integrieren verschiedener Systeme in einem Unternehmen ein sehr zeitaufwändiges Unterfangen. Das installieren komplexer Ecommerce- oder ERP-Systeme zum Beispiel, vor allem da diese meist von verschiedensten Anbieter stammen, in Systemumgebungen großer Ebusiness-Unternehmen kann ganze Teams von Programmierern Monate beschäftigen. Mit SelfConfiguration soll festgelegt werden was zu geschehen hat und in welchen Grenzen, jedoch ohne wie bei herkömmlichen Systemen exakt festzulegen wie es zu geschehen hat. Ein weiterer Bereich wird durch das Self-Optimization Konzept abgedeckt. Hierbei geht es primär darum Administratoren dahingehend zu entlasten, das es nicht mehr von Nöten sein soll eine nahezu unüberschaubare Anzahl an Performance beeinflussenden Parametern manuell zu überblicken und justieren 3 zu müssen. Dies gestaltet sich vor allem deswegen schwierig, da Änderungen an Subsystemen komplexer Systeme ungeahnte Rückwirkungen auf andere Subsysteme haben können. Der Hauptteil dieser Arbeit, die Automatische Statistiksammlung oder „Automatic Statistics Collection“, fällt in diesen Bereich des Self-Management. Das dritte Teilkonzept, Self-Healing, soll das aufwändige erkenne, diagnostizieren und beheben von Fehlern weitestgehend automatisieren. Im konkreten Fall von DB2 geschieht dies mit Hilfe des Health Monitors und des Health Centers, welche Zustände verschiedener Datenbankobjekte aufzeichnen und anschließend analysieren um daraufhin vom Administrator festgelegte Aktionen auszuführen. Diese reichen von einfachen Log – Einträgen bis hin zu direkten Manipulationen am entsprechenden Datenbankobjekt. Das vierte und letzte Teilkonzept bildet das Self-Protection. Dieser Bereich widmet sich dem entdecken und verhindern von Angriffe auf das System sowohl von außen als auch aus dem Inneren des Systems heraus. Diese Arbeit wird sich im Folgenden wie Bereits erwähnt mit dem Bereich des Self-Optimization befassen und im speziellen mit Statistiken in DB2. 2. Statistiken in DB2 UDB 2.1 Das Runstats Tool DB2 speichert Statistiken zu einzelnen Tabellen im Systemkatalog (SYSTAT Schema) in verschiedenen Statistiktabellen. Einen Überblick über einen Teil der im Katalog zu Statistiksammlung verwendeten Tabellen ist in Tabelle 1 zu sehen. In diesem Katalog werden Statistiken zu Tabellen bezüglich allgemeiner Eigenschaften, detaillierter Informationen zu einzelnen Spalten und Indizes, die für Tabellen existieren, abgelegt. Der DB2 Optimizer nutzt diese Informationen um einen optimalen Anfrageplan zu erstellen bzw. auszuwählen. Existieren für eine Tabelle keine Statistiken oder keine aktuellen ist es möglich, dass der Optimizer einen falschen Anfrageplan auswählt und somit die Ausführungsperformance einer Anfrage negativ beeinflusst wird. Tabellenname Inhalt 4 Für das sammeln der Tables Statistiken ist das Runstats-Tool Columns zuständig. Dabei handelt es sich um ein Tool, welches Indexes Statistiken neu anlegen aber Coldinst auch veraltete Statistiken im Systemkatalog aktualisieren Colgroups Anzahlt Spalten einer Tabelle Anzahl eingetragener Werter einer Spalte Anzahl existierender Index Schlüssel Quantile und häufig verwendete Werte einer Spalte Gruppen eingetragener Werte für eine Spaltengruppe kann. Die Ausführung findet tabellenspezifisch statt, d.h. das Runstats auf jede Tabelle 1, Auszug verwendeter Tabellen [1] gewünschte Tabelle einzeln ausgeführt werden muss. Vor der Ausführung kann durch Parameter festgelegt werden welche einzelnen Spalten und Indizes in die Statistikerfassung einbezogen werden sollen. Zusätzlich wird der Zeitpunkt der letzen Erfassung im Systemkatalog festgehalten. Die genauen Parameter bezüglich zu überprüfender Spaltengruppen, häufig aufgerufener Werte und Quantile etc. werden in Runstatsprofilen abgelegt. Gespeichert werden diese in der Tabelle SYSTAT.PROFILE. 2.2 Beispiel für fehlerhafte Statistiken In Abbildung 1 sind drei einfache Anfragepläne abgebildet. resultieren Sie aus einer relationalen Beispieldatenbank Fahrzeugdaten. sind unter mit Hierin anderem Tabellen über Fahrzeughalter, Abbildung 1, Beispiel für Schätzfehler [2] Fahrzeugdaten und Unfälle enthalten. Jede einzelne Anfrage besteht aus einer Select-Anfrage auf 5 die nicht indizierte Tabelle Car mit mehreren Milliarden Tupeln, die genaue Anfrage kann im unteren Bereich der Abbildung abgelesen werden, welche die Zeilenanzahl liefern soll. Die ersten beiden enthalten jeweils ein einfaches Prädikat („model“ bzw. „make“), die Dritte ein kombiniertes Prädikat („model“ und „make“). Im mittleren Bereich sieht man oben jeweils die vom DB2 Optimizer geschätzten Kardinalitäten und unten die tatsächlich aufgetretenen. Im Falle der einfachen Prädikate stimmen aufgetretene und geschätzte Kardinalitäten mit 101443 vs. 84496 bzw. 64353 vs. 55853 nahezu überein oder sind zumindest in einem akzeptablen Verhältnis zueinander. Im dritten Fall mit kombinierten Prädikaten fallen die Werte jedoch weit auseinander, 64353 vs. 3295,34. Dies kann damit begründet werden, dass der Optimizer aufgrund nicht vorhandener oder aktueller Statistiken davon ausgeht das zwischen den Prädikaten Unabhängigkeit vorliegt. Somit wird fälschlicherweise von einer zusätzlichen Selektivität („model“ vs. „make“ und „model“) ausgegangen. Jedoch liefert die Automarke zusätzlich zum Modell keinerlei Zusatzinformation und somit keine höhere Selektivität, was ebenfalls anhand der identischen aufgetretenen Kardinalitäten im zweiten und dritten Fall von 64353 abgelesen werden kann. Somit zeigt dieses Beispiel eindeutig das vorhandene bzw. aktuelle Statistiken von Nöten sind und in Bezug zur Auswahl des Anfrageplans gesetzt einen nicht unerheblichen Einfluss auf die Performance von DB2 haben können. Mit dieser Tatsache befasst sich das im Folgenden behandelte „Automated Statistics Collection“. 3. Die „Automated Statistics Collection“ Architektur Die „Automated Statistics Collection“-Komponente (ASC-Komponente) ist bereits in DB2 UDB Version 8.2 integriert. Sie besteht aus zwei Prozessen, dem UDI – Prozess und dem QF – Prozess, sowie aus ein Scheduler Komponente. Der UDI – Prozess befasst sich grundsätzlich mit dem überwachen der Aktivität von Tabellen indem er UDI- (Update, Delete, Insert) sowie Load-Statements aufzeichnet und empfiehlt gegebenenfalls die Ausführung von Runstats wenn die Statistiken nicht mehr aktuell genug sind. 6 Der Zweite Prozess versucht anhand von Anfrageaktivitäten auf bestimmte Tabellen deren Runstats-Profile möglichst optimal zu halten und wenn nötig eine Runstats Ausführung zu empfehlen. Die Scheduler-Komponente stellt das eigentlich „entscheidende“ Glied in der ASC Architektur dar, da sie die Ergebnisse der beiden Eingangs erwähnten Prozesse kombiniert und Abbildung 2, Die ASC Architektur [1] letztendlich die Runstats Ausführung auf einzelne Tabellen oder Tabellengruppen anstößt. Diese Ausführungen finden jedoch grundsätzlich nur in einem vorher vom Datenbankadministrator definierten Wartungsfenster oder –intervall statt. Einen Gesamtüberblick über die ASC Architektur liefert Abbildung 2. Im linken Bereich der Abbildung sind Standardkomponenten und –schritte der DB2 Implementierung dargestellt. Darunter der Anfrageprozessor, der DMLProzessor, der DB2-Optimizer sowie die Anfrageplanausführung. Des Weiteren sind verschiedene Monitoring-Komponenten integriert, welche neben der ASC Architektur noch weitere den Autonomiegrad erhöhende Komponenten in DB2 unterstützen. Als Beispiel dafür wäre der learning- und der progressive Optimzer von DB2 (LEO bzw. POP) zu nennen. Im oberen Bereich ist der UDIProzess zu sehen und die dazugehörigen Bestandteile, der Activity Monitor, der UDI-Counter sowie der Activity Analyzer. Unten ist der zweite Prozess mit Planund Runtime-Monitor, Query-Feedback-Warehouse und Query Feedback 7 Analyzer zu erkennen. Abschließend sei noch der rechte Bereich erwähnt, welcher mit dem Scheduler und den Analyzern aus beiden Prozessen eine Erweiterung des Health-Centers darstellt um die automatische Statistik Sammlung zu realisieren. 3.1 Der UDI Prozess im Detail Dieser Prozess befasst sich wie bereits erwähnt mit Fragen der Datenaktivität. In Abbildung 3 ist der Prozess im Detail abgebildet. Er besteht aus einer Monitoring-Komponente, die sich aus dem Activity Monitor und dem UDI Counter zusammensetzt und einer Analysekomponente, dem Activity Analyzer der noch einmal in den Data Activity Checker (DAC) und den Change Analyzer (CA) aufgeteilt werden kann. Der Activity Monitor (AM) bezieht seine Informationen direkt vom DML-Prozessor, der bei Anfragen entsprechenden nicht Datenbestand nur den manipuliert, sondern auch Informationen Abbildung 3, Der UDI Prozess [1] an den AM schickt. Dieser zeichnet mit Hilfe dieser Daten jeden Zugriff auf und speichert die Anzahl dieser im UDI-Counter. Dieser wird mit jeder überwachten Tabelle abgelegt und bei jedem um eins erhöht wenn eine existierende Spalte einer Tabelle verändert bzw. gelöscht wird oder eine neue eingefügt wird. Der Counter wird auf null zurückgesetzt wenn eine Tabelle neu angelegt wird oder Runstats ausgeführt wurde. Die Analyse der Tabellenstatistiken auf nicht aktuelle Statistiken beginnt mit dem DAC, da Datenaktivität benötigt wird damit Statistiken an Aktualität verlieren. Dies prüft der DAC auf zwei Arten. Zuerst wird geprüft ob die Tabellendaten im Cache (Bufferpools) vorgehalten werden, ist dies nicht der Fall, kann davon ausgegangen werden das eher wenig Datenaktivität vorliegt und somit keine Aktualisierung erforderlich ist, da DB2 häufig verwendete 8 Daten automatisch im Cache ablegt. Wurden die entsprechenden Daten hingegen im Cache gefunden ist die Tabelle möglicherweise ein Kandidat zur Statistikaktualisierung und es wird anhand des UDI-Counters geprüft ob ein bestimmter prozentualer Schwellwert überschritten wurde und daraus folgend genügend Datenaktivität vorliegt. Dieser Wert ist gewöhnlich auf 10% eingestellt. Vom DAC werden potentielle Tabellen an den CA weitergegeben. Dieser stellt für jede Spalte der eingegebenen Tabellen zwei statistische Zusammenfassungen auf. Zum einen auf Basis einer Stichprobe aus der Tabelle und zum anderen auf Basis der im Systemkatalog abgelegten und möglicherweise falschen Statistiken. Aufgrund dieser Zusammenfassungen werden für jede Spalte zwei Histogramme bezüglich der Datenaktivität erstellt. Ist der Abstand zwischen den Histogrammen für jede Spalte einer Tabelle unter einem bestimmten Grenzwert, werden die Statistiken für aktuell erklärt und nicht zur Aktualisierung empfohlen. Wird dieser Grenzwert jedoch auch nur bei einer Spalte überschritten, werden die Statistiken für nicht aktuell erklärt. Diese Vorgänge sind gut anhand von Mengen zu erläutern. Es wird eine Tabellenmenge G an den UDI-Prozess gegeben. Der DAC streicht anhand der Kriterien „Ablage im Cache“ und eine Menge X 1 aus dieser Menge heraus. Der CA entfernt wiederum einige Tabellen anhand der Abstände zwischen den Histogrammen aus der Menge, dies sei die Menge X 2 . Der UDI-Prozess liefert also an den Scheduler am Ende eine mit Prioritäten versehene Menge D G X1 X 2 . 3.2 Der QF Prozess im Detail Der Query Feedback Prozess (Abbildung 4) hingegen wertet Informationen bezüglich der Ausführung von Anfragen aus, das heißt es werden bereits aufgetretene Fehler, konkret Schätzfehler des Optimzers bezüglich Kardinalitäten, untersucht. Der Prozess besteht ähnlich dem UDI Prozess aus einer Monitoring- und einer Analysekomponente. Die Monitoring-Komponente besteht in diesem Fall jedoch aus zwei Monitoren, dem Plan-Monitor (PM) und 9 dem Runtime-Monitor (RM) und einem Query-Feedback-Warehouse (QFW). Der PM zeichnet während dem kompilieren die Prädikate der betroffenen Anfrage auf, zum Beispiel Spaltennamen, relationale Operatoren und Werte, Abbildung 4, Der QF Prozess [1] sowie die für jedes Prädikat durch den Optimizer geschätzten Kardinalitäten. Der RM hingegen zeichnet die bei Anfrageplanausführung wirklich aufgetretenen Kardinalitäten für Prädikate und Tabellen auf. All diese Daten werden im QFW zur weiteren Verwendung abgelegt. Das QFW besitzt eine relationale Tabellenstruktur, die aus fünf Tabellen besteht, siehe Abbildung 5. Unterteilt wird das QFW in einen Feedback, drei Tabellen, und einen Empfehlungsteil mit zwei Tabellen. An dieser Stelle wird bereits sichtbar, das nicht nur aus einer Richtung Informationen in das QFW geschrieben werden, sondern auch aus Richtung des Analyzers, welcher sein Empfehlungen bezüglich Statistikaktualisierungen darin ablegt. Der Feedbackteil enthält eine Query_Tabelle, welche die einzelnen Anfragen und dazugehörige Anfragepläne (in grober Form, „skeleton query plan“) enthält, eine Predicate-Tabelle, welche von Anfragen verwendete Prädikate bzw. Prädikatgruppen und statistische Informationen dazu enthält und eine ColumnTabelle die zu den Prädikaten den Spaltenname, den verwendeten Operator und den gesuchten Wert enthalten. Der Empfehlungsteil enthält in der jeweiligen Tabelle Empfehlungen zu Spalten und Spaltengruppen bezüglich abgelaufener Statistiken, häufig aufgerufenen Werten und Korrelationen 10 zwischen einzelnen Spalten. Diese Empfehlungen stammen vom QueryFeedback-Analyzer (QFA) auf den ich im Folgenden eingehen möchte. Der QFA verarbeit jene Informationen die von PM und RM im QFW abgelegt worden sind. Dabei befasst er sich vor allem mit Fehlern in Optimizer basierenden Kardinalitätsschätzungen und liefert dabei nicht nur eine mit Prioritäten versehene Tabellenliste an den Abbildung 5, Das QFW [1] Scheduler sondern aktualisiert im Gegensatz zum UDI Prozess auch die im Kapitel 2.1 erläuterten Runstats Profile. Der QFA kann dabei, wie im rechten Teil von Abbildung 4 zu erkennen, nocheinmal in drei Bestandteile zerlegt werden. Diese sind der TableCardinality-Analyzer (TCA), der Simple-Predicate-Analyzer (SPA) sowie der Correlation-Analyzer (COA). Vom TCA werden dabei die aktuellen mit den vom Optimizer aufgrund der im Systemkatalog abgelegten Statistiken geschätzten Kardinalitäten verglichen und der Schätzfehler ermittelt. Der SPA verwertet geschätzte und aktuelle Kardinalitäten von einfachen Prädikaten um daraus die Anzahl von häufig genutzten Werten abzuleiten. Als letztes Element des QFA leitet der COA aus den gesammelten Kardinalitäten und Prädikaten Korrelationen zwischen Spalten innerhalb einzelner Tabellen ab. All diese Informationen werden abschließend dazu genutzt auf der einen Seite die Runstats-Profile möglichst optimal zu halten und auf der anderen Seite wird auf Basis der erstellten Daten wie schon beim UDI Prozess eine mit Prioritäten versehene Liste an den Scheduler übergeben. 11 3.3 Der Scheduler Der Scheduler stellt die Hauptkomponente in der ASC Architektur dar. ER verarbeitet die Prioritätslisten von UDI- und QF-Prozess indem daraus eine einzelne Lister erstellt wird (siehe Kapitel 3.3.2). Des Weiteren wird durch den Scheduling-Algorithmus die eigentliche Runstats Ausführung initiiert (siehe Kapitel 3.3.3). 3.3.1 Datenfluss zum Scheduler An dieser Stelle soll noch einmal eine kurze Zusammenfassung über alle Abläufe innerhalb der ASC-Architektur gegeben werden. Grundsätzlich finden diese nur zwischen UDI- bzw. QF-Prozess und Scheduler statt. Der Scheduler kann jeden Prozess einzeln aufrufen oder auch beide gleichzeitig. Bei einem Aufruf des UDI-Prozesses ist es nötig dem Prozess bereits eine Tabellenmenge zu übergeben, der Rückgabewert ergibt sich dann auf Basis dieser Menge, jedoch reduziert um jene Tabellen welche die Kriterien der UDI-Komponenten nich erfüllt haben. Ein Aufruf des QF-Prozesses hingegen ist ohne übergabe einer Tabellenmenge möglich. Der Prozess liefert in jedem Fall aufgrund der im QFW gesammelten Daten eine Prioritätsliste zurück. Gleichzeitig werden nur vom QF-Prozess bei Bedarf die Runstats-Profile aktualisiert. Bei einem Runstats Aufruf nutzt das Tool automatisch diese Profile. Aufgrund dieser Daten bildet der Scheduler eine Liste mit abzuarbeitenden Tabellen. Dazu mehr in den beiden folgenden Kapiteln. Abbildung 6, Beispiel für eine Prioritätsliste[1] 12 3.3.2 Regeln zur Prioritätslisten Erstellung Das erstellen der vom Scheduling-Algorithmus genutzten mit Prioritäten versehenen Tabellenmenge geschieht anhand festgelegter Vorgaben. Der Scheduler teilt die Tabellen aus den beiden ASC Prozessen in fünf Klassen ein, je nach Wichtigkeit (siehe Error! Reference source not found.). Diese fünf Klassen sind im Einzelnen: Useful: Zwischen und 50 Prozent der Datensätze einer Tabelle müssen verändert worden sein damit eine Tabelle in diese Klasse eingeteilt wird. D.h. das die Einteilung aufgrund der Daten aus dem UDIProzess geschieht. Needed: Um in diese Klasse eingeteilt zu werden ist es nötig das eine Tabelle vom QF-Prozess empfohlen worden ist. Pressing: Mehr als 50 Prozent der Datensätze in einer Tabelle müssen verändert worden sein, das heißt es findet wiederum eine Einteilung aufgrund von Daten des UDI-Prozesses statt. Urgent: Diese Klasse ergibt sich aus der Needed Klasse und der Useful oder Pressing Klasse. Dies bedeutet das eine Empfehlung des QFProzesses vorliegen muss und mehr als Prozent der Datensätze der entsprechenden Tabelle seit der letzten Statistikaktualisierung verändert worden sind. Critical: Diese Klasse nimmt eine Sonderstellung ein. Es werden Tabellen dieser Klasse zugeordnet für die entweder noch nie Runstats ausgeführt wurde oder die schon häufig aufgrund einer niedrigen Kasseneinstufung zurückgestellt wurden. Die nach diesen Regeln aufgestellte Prioritätsregel wird nun innerhalb der Wartungsintervalle nach und nach abgearbeitet. Ein Überblick über den Aufbau einer nach diesen Regeln erstellten Liste ist in Abbildung 6 gegeben. Der zugrunde liegende Algorithmus wird im nächsten Kapitel erläutert. 13 3.3.3 Der Scheduling Algorithmus Abschließend zur ASC Architektur soll nun das Kernelement des Schedulers werden, erläutert der Scheduling Algorithmus, welcher regelt wann eine Runstats Ausführung stattfindet. Abhängig ist Algorithmus der primär von zwei Dingen. Zum einen von der vom Datenbankadministrator festgelegten Menge zu überwachenender Tabellen und zum anderen vom Zeitfenster, dem Wartungsintervall, in dem der Algorithmus Abbildung 7, der Scheduling Algorithmus[1] Runstats ausführen darf. Auch dieses wird vom Datenbankadministrator festgelegt. Die Menge der zu überwachenden Tabellen entspricht der Menge G in Abbildung 7 und kann alle Tabellen einer Datenbank umfassen oder auch nur einen geringen Teil. Alle weiteren angegebenen Mengen sind vor Beginn der ersten Ausführung leer. Den Rahmen für den Algorithmus stecken zwei ineinander geschachtelte While-Schleifen ab. Die Erste befasst sich mit dem Sammeln der benötigten Daten von den beiden ASC, dies geschieht mit den Befehlen D:=AA(G) und Q:=QFA(), sowie mit dem erstellen der endgültigen Prioritätsliste für das aktuelle Wartungsintervall. Die Liste wird aus den drei Mengen D, Q und C gebildet. C entspricht dabei der Menge der kritischen Tabellen bzw. der Klasse Critical. Gebildet wird die Liste mit dem Befehl P:=prioritizeMerge(D,Q,C). Die zweite Schleife ist für das ausführen von Runstats zuständig. Mit T:=Pop(P) wird die Tabelle mit der höchsten Priorität in P ermittelt um danach auf diese 14 Tabelle Runstats auszuführen. Für jede abgehandelte Tabelle wird nach der Ausführung die Datenänderungsrate geschätzt um festzulegen wann eine erneute Runstats Ausführung einzuplanen ist. Diese Schleife läuft solange wie es möglich ist im aktuellen Wartungsintervall noch eine Runstats Ausführung durchzuführen. Ist dies nicht mehr möglich werden mit (G,C):=costructDueTables() der Mengen G und C für die nächste Iteration neu erstellt. Ab diesem Zeitpunkt ist der Algorithmus bis zum nächsten Zeitfenster inaktiv. 4. Performance Messungen mit und ohne ASC Zum Abschluss dieser Arbeit soll anhand des bereits Eingangs verwendeten Beispiels über Autostatistiken aufgezeigt werden inwiefern durch den Einsatz von ASC Performancevorteile zu erwarten sind. Das Beispiel hat folgende Eckdaten: Untersucht wird eine Datenbank mit vier Tabellen (Car, Owner, Demographics, Accident) Es werden 11 Select-Anfragen nach verschieden Schitten (A-E, in den Abbildungen zu erkennen) ausgeführt Schritt C führt als einziger Schritt neue Datensätze ein Anfrage 10 enthält abhängige Attribute der Tabellen Car und Owner (Make, Model und City, Country3) In den beiden folgenden Abbildungen wurden auf der X-Achse jeweils die Anfragen abgetragen und auf der Y-Achse die dazugehörigen Antwortzeiten. In Abbildung wurden die Schritte A und B ausgeführt und nach jedem Schritt der Anfragenkomplex abgearbeitet. Schritt A beinhaltet nur das initiierende Laden der Datenbank und Schritt B wurde nach verwenden von ASC ausgeführt, dem jedoch nur der UDI-Prozess zur Verfügung stand. Wie zu sehen verkürzen sich alle Antwortzeiten, wenn auch nur marginal, bis auf die der Anfrage 10. Deren Antwortzeiten verlängern sich extrem, was auf das nicht beachten der Abhängigkeit zwischen den Prädikaten zurückgeführt werden kann. 15 Abbildung 8, Schritte A und B [2] In Abbildung werden nun drei weitere Schritte durchgeführt. Schritt C führt lediglich neue Datensätze ein, was dazu führt das die Antwortzeiten dieser Abbildung nicht mit denen der vorigen verglichen werden können. In Schritt D Abbildung 9, Schritte C, D und E [2] 16 werden sämtliche Anfragen analog zu Schritt B ausgeführt, nachdem ASC gestartet wurde, jedoch wieder mit der Einschränkung, dass nur der UDI Prozess verwendet wurde. Es ist wiederum zu erkennen, dass die Antwortzeiten der Anfrage 10 sich zwar in diesem Fall nicht verlängern, aber sich auch nur minimal verbessern und weiterhin auf schlechtem Niveau bleiben. Im abschließenden Schritt E werden von ASC beide Prozesse verwendet. Dadurch verbessert sich die Antwortzeit von Anfrage 10 extrem bei gleichzeitigem verbleiben aller anderen Zeiten auf gutem Niveau. 5. Zusammenfassung Ziel der Einführung der „Automated Statistic Collection“ ist es, drei primäre Ziele zu erreichen. Es soll sichergestellt werden das relevante Statistiken existieren, das diese aktuelle sind und dies, ohne eine merkliche Zusatzbelastung des Systems hervorzurufen. Das erste Ziel, das anlegen relevanter Statistiken wird durch die beiden Prozesse der ASC Architektur(UDI und QF) erreicht. Dasselbe gilt für die Überwachung der Aktualität dieser. Das dritte und wichtigste Ziel, da es sozusagen ein KO-Kriterium darstellt wird konnte ebenfalls erreicht werden. Dies ist durch zwei Schritte möglich. Zum einen verursachen die Monitoring-Komponenten der Prozesse, die einzigen Bestandteile von ASC die permanent betrieben werden, nur eine zusätzliche Systembelastung von 1-2 %, je nach Systemaustattung. Der eigentliche Scheduling Algorithmus läuft nur während den vom Datenbankadministrator vorgegebenen Wartungsintervallen. Zum anderen wurde das Runstats Tool dahingehend verbessert, dass es nur noch mit niedriger Priorität läuft und somit nur die Systemressourcen verwendet die auch wirklich frei sind. Somit konnten die drei primären Ziele der Entwicklung der ASC-Komponenten erfüllt werden. Zusätzlich dazu ist eine teilweise recht deutliche Performancesteigerung messbar, was auf besser an die aktuellen Anforderungen an das DBMS angepasste Statistiken zurückzuführen ist. Ziele für zukünftige Weiterentwicklungen der Architektur sind eine automatische Festlegung Wartungsintervalle um den Datenbankadministrator noch weiter zu 17 entlasten und eine allgemeine Verfeinerung der Statistiken, um Anfragepläne in Zukunft noch näher am Optimum gestalten zu können ( ein möglicher Ansatz ist in Quelle [3] zu finden). 18 Literaturverzeichnis Aboulnaga, A; P. Haas, M. Kandil, S. Lightstone, G. Lohman, V. Markl, I. Popivanov, V. Raman (2004): Automated Statistics Collection in DB2 UDB. IBM Almaden Research Center / IBM Toronto Development Lab. [1] Haas, P; M. Kandil, A. Lerner, V. Markl, I. Popivanov, V. Raman, D. Zilio (2005): Automated Statistics Collection in Action. IBM Almaden Research Center / IBM Toronto Development Lab. [2] FIlyas, I;V. Markl, P. Haas, P. Brown, A. Aboulnaga (2004): CORDS:Automatic Discovery of Correlations and Soft Functional Dependencies. Purdue University / IBM Almaden Research Center [3] IBM(2001): Autonomic Computing: IBM’s Perspective on the State of Information Technology. http://www1.ibm.com/industries/government/doc/content/resource/ thought/278606109.html. [4] Kephart, J. O. und D. M.Chess (2003): The Vision of Autonomic Computing. IBM Thomas J. Watson Research Center. [5] Lightstone, S. S.; G. Lohman, D. Zilio(2002):Toward Autonomic Computing with DB2 Universal Database. IBM Canada. [6] Markl, V.; V. Raman, D. Simmen, G. Lohman, H. Pirahesh, M. Cilimdzic (2004): Robust Query Processing through Progressive Optimization. IBM Almaden Research Center / IBM Silicon Valley Lab / IBM Toronto Lab. [7] Raman V.; V. Markl, D. Simmen, G. Lohman, H. Pirahesh (2004): Progressive Optimization in Action. IBM Almaden Research Center. [8] 19 Abbildungsverzeichnis Abbildung 1: Beispiel für Schätzfehler S. 5 Abbildung 2: Die ASC Architektur S. 7 Abbildung 3: Der UDI Prozess S. 8 Abbildung 4: Der QF Prozess S. 10 Abbildung 5: Das QFW S. 11 Abbildung 6: Beispiel für eine Prioritätsliste S. 12 Abbildung 7: Der Scheduling Algorithmus S. 12 Abbildung 8: Schritte A und B S. 16 Abbildung 9: Schritte C, D und E S. 16 20 Tabellenverzeichnis Tabelle 1: Auszug verwendeter Tabellen S. 5 21