www.wikidata.de-de.nina.az
Der Abfrageoptimierer ist Teil eines Datenbankmanagementsystems DBMS der versucht fur eine Datenbankabfrage einen optimalen Auswertungsplan zu berechnen Die Entwicklung von Abfrageoptimierern ist eng mit der Entwicklung der relationalen DBMS verbunden Bei den bis dahin existierenden vor relationalen DBMS auf Basis des hierarchischen Datenbankmodells wie z B IMS oder dem Netzwerk Datenbankmodell hat sich das Anwendungsprogramm die Daten mittels Folgen von navigierenden Aufrufe an das DBMS die benotigten Daten stuckweise beschafft D h die Anwendungsprogrammierer haben im Detail festgelegt in welcher Reihenfolge auf welche Daten zugegriffen wird Ausfuhrliche Beispiele hierzu finden sich z B in 1 und 2 Mit der Vorstellung der Relationenalgebra hat E F Codd 3 im Jahr 1970 einen Weg aufgezeigt wie man mit dieser Abfragesprache in einem Anfrageausdruck die gewunschte Ergebnismenge der Daten beschreiben kann In Anlehnung an die Mengenlehre hat er diese Abfragesprache als Menge von Operatoren konstruiert und zwar so dass jeder dieser Operatoren entweder einen oder zwei Eingabeparameter vom Typ Menge von Tupeln aufweist und als Ergebnis stets eine Menge von Tupeln zuruckliefert Hierdurch kann man diese Aufrufe schachteln und somit eine ganze Folge von Anweisungen in einem Anfrageausdruck formulieren Und damit verbunden gibt noch eine weitere wichtige Eigenschaft der Relationenalgebra Man kann analog zu den Rechenregeln in der Mathematik Regeln formulieren ob und ggf unterwelchen Bedingungen Operanden vertauscht a b b a deren Reihenfolge verandert werden kann a b c a c b oder Operationen zusammengefasst werden konnen a b a c a b c Bei der Relationenalgebra konnen diese Regeln dann z B wie folgt aussehen Aquivalenz Transformationen der Relationenalgebra Auszug Quelle 4 5 Wenn man Regeln dieser Art im DBMS hinterlegt kann nun das DBMS selbststandig alternative Ausfuhrungsmoglichkeiten fur einen gegebenen Anfrageausdruck ermitteln und eine moglichst effiziente Ausfuhrungsreihenfolge auswahlen Trotz dieser Eigenschaften ist die Relationenalgebra fur den direkten Einsatz als Anfragesprache zur Nutzung durch Anwendungsprogrammierer nicht geeignet da geschachtelte Ausdrucke recht komplex werden konnen Deshalb wurde im Kontext des Projekts System R vom Forschungslabor der IBM in San Jose dem spateren Almaden Research Lab die Sprache SEQUEL 6 entwickelt die unter dem Namen SQL zum ISO Standard wurde In den DBMS die Abfrageoptimierung betreiben wie z B Oracle und DB2 werden SQL Abfragen auf einen aquivalenten Anfrageausdruck der herstellerspezifisch erweiterten Relationenalgebra abgebildet Die folgenden beiden Abbildungen illustrieren dies am Beispiel von IBM DB2 V9 Operatorbaum fur SQL Anfrage Beispiel 1 Quelle 5 Operatorbaum fur SQL Anfrage Beispiel 2 Quelle 5 Es lassen sich zwei Typen von Abfrageoptimierern unterscheiden regelbasierte und kostenbasierte Abfrageoptimierer Inhaltsverzeichnis 1 Aufgaben eines Abfrageoptimierers 2 Regelbasierte Abfrageoptimierer 3 Kostenbasierte Abfrageoptimierer 4 EinzelnachweiseAufgaben eines Abfrageoptimierers BearbeitenDer Abfrageoptimierer hat die Aufgabe die Antwortzeit eines Datenzugriffs zu minimieren Da vor allem bei komplexen SQL Abfragen oft mehrere Zugriffswege moglich sind die oft sehr unterschiedliche Antwortzeit haben besteht die Aufgabe darin einen Zugriffsweg mit einer moglichst kurzen Antwortzeit auszuwahlen In einem ersten Schritt werden die verschiedenen Zugriffswege analysiert In einem zweiten Schritt werden die verschiedenen Alternativen bewertet und schliesslich wird ein Zugriffsweg ausgewahlt Zur Ermittlung der verschiedenen Zugriffswege wird auch untersucht ob andere Formulierungen der SQL Abfrage mit identischer Ergebnismenge moglich sind Beispiel Transformation eines Subselects in einen Join oder Transformation eines OR Pradikats in einen Union Falls zwei oder mehrere Tabellen verknupft werden join gibt es mehrere Wege dies zu tun Beispiel mit 3 Tabellen A B und C A B C A C B B C A B A C C A B C B A Bei 3 Tabellen ergeben sich 3 3 2 1 6 displaystyle 3 3 2 1 6 nbsp Varianten Wenn 10 Tabellen miteinander gejoint werden dann ergeben sich 3 6 Mio theoretisch mogliche Varianten Die meisten DBMS haben mehrere Joinalgorithmen mit denen ein Join ausgefuhrt werden kann Wenn z B 4 Joinalgorithmen zur Auswahl stehen dann gibt es alleine fur die Variante A B C genau 4 Joinalgorithmen 3 Tabellen 1 16 displaystyle text 4 Joinalgorithmen text 3 Tabellen 1 16 nbsp Moglichkeiten um die beiden Joins auszufuhren So ergeben sich schon 6 Varianten 16 Joinmoglichkeiten 96 displaystyle text 6 Varianten text 16 Joinmoglichkeiten 96 nbsp verschiedene kombinierte Varianten um die drei Tabellen miteinander zu joinen Wenn Indizes zu den Tabellen existieren dann ergeben sich weitere Moglichkeiten den Datenzugriff zu gestalten Einige DBMS haben die Moglichkeit eine Abfrage durch Parallelverarbeitung von mehreren Prozessoren ausfuhren zu lassen falls eine geeignete Hardware zur Verfugung steht So kann die Anzahl der moglichen Zugriffsvarianten schnell sehr hoch werden Die einzelnen Zugriffsvarianten unterscheiden sich meistens erheblich in ihrer Ausfuhrungszeit Je nach den Mengenverhaltnissen der in einem Join beteiligten Tabellen fuhren bestimmte Joinalgorithmen schnell zum Ergebnis wahrend andere sehr zeitaufwandig in ihrer Ausfuhrung sind Die Verwendung eines Index lohnt sich meistens nur dann wenn das betreffende Pradikat z B ID 1234 eine starke Selektivitat aufweist andernfalls fuhrt ein Lesen der kompletten Tabelle schneller zum Ziel Parallelverarbeitung erfordert auch einen gewissen Koordinationsaufwand Daher ist Parallelverarbeitung nur in bestimmten Fallen von Vorteil Der Abfrageoptimierer hat nun die Aufgabe von den verschiedenen Zugriffsvarianten die mit der besten Ausfuhrungszeit zu ermitteln Regelbasierte Abfrageoptimierer BearbeitenEin regelbasierter Abfrageoptimierer verwendet zur Ermittlung des Auswertungsplans nur die vorhandenen Datenstrukturen Tabellen Indizes Dabei kommt ein festgelegtes Set von Regeln zum Einsatz Eine Regel kann z B lauten Wenn ein vorhandener Index genutzt werden kann dann tue das Nur wenn kein geeigneter Index vorhanden ist fuhre einen Full Table Scan aus Regelbasierte Abfrageoptimierer verwenden fur die Entscheidungen keine Informationen uber die in den Tabellen gespeicherten Daten So werden insbesondere die Anzahl der Datensatze in den beteiligten Tabellen Werte die besonders haufig vorkommen der Sortierzustand der Satze nicht berucksichtigt Das DBMS Oracle hatte bis zur Version 7 nur einen regelbasierten Abfrageoptimierer Eine der Regeln besagte dass die Reihenfolge mit der bei einem Join auf die einzelnen Tabellen zugegriffen wird davon abhangig ist in welcher Reihenfolge die Tabellen in SQL Statement angegeben sind Das hatte den Vorteil dass der Programmierer durch die Formulierung des SQL Statements darauf Einfluss nehmen konnte welcher Auswertungsplan zum Einsatz kommt Regelbasierte Abfrageoptimierer haben den Vorteil dass die ermittelten Auswertungsplane statisch sind Wenn ein Programm in einer Testumgebung mit einem kleinen Datenbestand entwickelt und getestet wurde dann kann man sicher sein dass in einer grosseren produktiven Umgebung dieselben Auswertungsplane verwendet werden Ein periodisches Analysieren des Datenbestands zur Ermittlung von Statistiken ist nicht erforderlich Der entscheidende Nachteil des regelbasierten Abfrageoptimierers ist dass die starren Regeln sich nicht an dem tatsachlich vorhandenen Datenvolumen orientieren Es ist wie die Auswahl einer Route durch die Innenstadt nur anhand eines Stadtplans ohne Kenntnisse von vorhandenen Staus und Baustellen Ein kostenbasierter Abfrageoptimierer liefert meistens bessere Ergebnisse als ein regelbasierter Abfrageoptimierer Kostenbasierte Abfrageoptimierer BearbeitenDer kostenbasierte Optimierer verwendet fur seine Entscheidungen statistische Auswertungen uber die gespeicherten Daten Diese Statistiken mussen von Zeit zu Zeit aktualisiert werden Es empfiehlt sich nach jeder umfangreichen Anderung am Datenvolumen die Statistiken zu erneuern Dabei werden je nach DBMS unterschiedliche statistische Werte ermittelt die Anzahl der Satze und der belegte Speicherplatz pro Tabelle und Index die Anzahl unterschiedlicher Werte pro Spalte diese Information ist vor allem bei Spalten sinnvoll die auch in einem Index vorkommen der grosste und der kleinste Wert pro Spalte der Sortierzustand einer Tabelle im Vergleich zur Sortierreihenfolge eines Index Clustering Order Einige DBMS z B Oracle konnen Histogramme fur jede Spalte ermitteln Andere DBMS z B DB2 konnen Haufigkeitsverteilungen fur am haufigsten vorkommende Werte fur jede Tabellenspalte ermitteln Kennzahlen uber die vorhandene Hardware wie z B die Zugriffsgeschwindigkeit der Festplatten die Grosse des Arbeitsspeichers die Anzahl der zur Verfugung stehenden ProzessorenDer kostenbasierte Optimierer ermittelt in einem ersten Schritt alle theoretisch moglichen Zugriffsplane In einem zweiten Schritt wird fur jeden Zugriffsplan abgeschatzt welche Kosten die Ausfuhrung dieses Zugriffsplans verursachen wird Mit dem Begriff Kosten ist in erster Linie die Rechenzeit gemeint Es kann auch die Nutzung der Systemkomponenten z B der Speicherbedarf mit einfliessen Eine exakte Berechnung der Kosten ist in der Praxis meist zu aufwandig bzw nicht moglich Daher werden Heuristiken verwendet zur Abschatzung der Kosten Der Zugriffsplan der die beste Bewertung erhalt wird schliesslich ausgefuhrt um die angeforderten Daten zu ermitteln Die nachstehenden Beispiele zeigen wie stark sich ein rein regelbasierter von einem kostenbasierten Ausfuhrungsplan unterscheiden konnen nbsp IBM DB2 V9 SQL Abfrage mit regelbasierter Optimierung Optimierungsklasse 0 Quelle 5 nbsp IBM DB2 V9 Dieselbe SQL Abfrage jetzt mit kostenbasierter Optimierung Opt Klasse 5 Quelle 5 Die Qualitat des kostenbasierten Optimierers ist davon abhangig wie ausgefeilt die Berechnungsmodelle sind Da die SQL Syntax sehr umfangreich ist mussen viele Sonderformen und Ausnahmen berucksichtigt werden Es besteht die Gefahr dass der rechnerisch gunstigste Ausfuhrungsplan tatsachlich nicht optimal ist oder sogar deutlich schlechter ist Der tatsachlich gunstigste Ausfuhrungsplan hat in solchen Fallen durch die verwendete Heuristik ein schlechteres Rating erhalten und wurde daher verworfen Das Ziel ist nicht unbedingt aus den vielen moglichen Ausfuhrungsplanen den absolut besten herauszufinden Wenn der zweitbeste Ausfuhrungsplan in seinen tatsachlichen Kosten nur geringfugig schlechter ist dann ist es nicht schlimm wenn dieser ausgewahlt wird Wenn die Heuristik jedoch die Realitat so schlecht abschatzt dass ein tatsachlich viel schlechterer Ausfuhrungsplan zum Einsatz kommt dann hat der Optimierer eine schlechte Wahl getroffen Wenn ein kostenbasierter Optimierer verwendet wird dann ist eine periodische Erhebung von Statistiken uber die gespeicherten Daten wichtig Wenn sich das Datenvolumen andert und die Statistiken danach nicht aktualisiert werden dann werden die Abfragen anhand der veralteten Statistiken optimiert Das erhoht das Risiko dass der rechnerisch optimale Zugriffsweg tatsachlich nicht der optimale ist Ein weiteres Problem ist die grundsatzliche Unvollstandigkeit der statistischen Daten Es konnen nur bestimmte Kenngrossen ermittelt werden doch in der Realitat gibt es noch viel mehr Faktoren die die Kosten eines Datenzugriffs beeinflussen Oft gibt es Wechselwirkungen zwischen den einzelnen Pradikaten die im Modell der statistischen Zahlen nicht berucksichtigt sind Die Ermittlung von Histogrammen oder Haufigkeitsverteilungen falls das DBMS dazu die Moglichkeit bietet ist sehr zeitaufwandig und es erfordert zusatzlichen Speicherplatz um diese Daten abzulegen Es kommt nicht nur darauf an dass die Ausfuhrung einer Abfrage optimiert wird sondern die Ermittlung des optimalen Ausfuhrungsplans selber darf auch nicht zu lange dauern Damit die Suche bei komplexen Zugriffen nicht zu lange dauert werden bei vielen DBMS nur ein Teil der theoretisch moglichen Zugriffsplane untersucht z B nur maximal 2000 Alle weiteren Zugriffsplane werden erst gar nicht analysiert Das hat zur Folge dass bei einem komplexen Zugriff bei dem z B 200 000 theoretisch mogliche Zugriffsplane existieren nur 1 aller Zugriffsplane genauer untersucht wird Die Wahrscheinlichkeit dass bei diesem Vorgehen ein guter und schneller Zugriffsplan gefunden wird ist eher gering Tatsachlich kommt es oft vor dass fur SQL Statements in denen viele Tabellen z B mehr als 10 miteinander gejoint werden Ausfuhrungsplane mit einer unbefriedigenden Laufzeit zum Einsatz kommen obwohl es andere Ausfuhrungsplane gibt die hundert Mal schneller die gewunschten Daten liefern wurden 7 Ein weiterer Nachteil des kostenbasierten Optimierers ist der unerwartete Wechsel eines Ausfuhrungsplans Da der Ausfuhrungsplan eben nicht einmal festgelegt wird sondern jedes Mal neu ermittelt wird besteht nach jedem Aktualisieren der Statistiken und erst Recht nach jedem Release Wechsel der DBMS Software die Moglichkeit dass danach ein ungunstigerer Ausfuhrungsplan zum Einsatz kommt Dieser ist dann zwar rechnerisch besser aber tatsachlich schlechter als der bisher verwendete So ein Wechsel eines Ausfuhrungsplans kann eine Erhohung der Ausfuhrungszeit um den Faktor 10 oder 100 zur Folge haben Das kann der Grund dafur sein dass ein Programm das schon monatelang mit einer guten Performance im Einsatz war auf einmal eine deutlich schlechtere Performance bekommt 8 Einzelnachweise Bearbeiten Peter Dadam Datenbanksysteme Konzepte und Modell Vorlesung Universitat Ulm Kapitel 3 Hierarchisches Datenmodell 2013 S 57 87 researchgate net Peter Dadam Datenbanksysteme Konzepte und Modelle Vorlesung Universitat Ulm Kapitel 4 Netzwerk Datenmodell 2013 S 90 137 researchgate net E F Codd A relational model of data for large shared data banks In Communications of the ACM Band 13 Nr 6 Juni 1970 ISSN 0001 0782 S 377 387 doi 10 1145 362384 362685 acm org abgerufen am 20 Februar 2023 Peter Dadam Verteilte Datenbanken und Client Server Systeme Springer Berlin Heidelberg New York 1996 ISBN 3 540 61399 4 S 130 a b c d e Peter Dadam Datenbanksysteme Konzepte und Modelle Vorlesung Universitat Ulm Kapitel 6 Relationales Datenmodell II Klassisches SQL Abschnitt 6 8 Anfragebearbeitung Ulm 2013 S 234 261 researchgate net Donald D Chamberlin Raymond F Boyce SEQUEL A structured English query language In Proceedings of the 1976 ACM SIGFIDET now SIGMOD workshop on Data description access and control FIDET 76 ACM Press Not Known 1976 S 249 264 doi 10 1145 800296 811515 acm org abgerufen am 20 Februar 2023 Christian Antognini Troubleshooting Oracle Performance 2011 ISBN 978 1 4302 4296 3 Kapitel Processing Joins Jonathan Lewis Cost Based Oracle Fundamentals Apress New York 2006 ISBN 1 59059 636 6 Kapitel 10 Abgerufen von https de wikipedia org w index php title Abfrageoptimierer amp oldid 235319728