Dieser Abschnitt beschreibt die Phasen, die eine Anweisung durchläuft, beginnend mit der Kommentierungsphase und endend mit der Ausführung. Darüber hinaus werden die der Planung des Optimierers zugrunde liegenden Annahmen beschrieben und die Selektivitätsschätzung, die Kostenschätzung und die Schritte der Abfrageverarbeitung behandelt.
Weitere Hinweise zur Abfrageverarbeitung in SQL Anywhere finden Sie im Whitepaper "Query Processing Based on SQL Anywhere 12.0.1 Architecture" unter http://www.sybase.com/detail?id=1096047.
Anweisungen, die keine Ergebnismengen haben, wie UPDATE- oder DELETE-Anweisungen, durchlaufen die Phasen der Abfrageverarbeitung
Kommentierungsphase Wenn der Datenbankserver eine Abfrage erhält, verwendet er einen Parser, um die Anweisung zu analysieren, und wandelt sie in eine algebraische Darstellung um, die auch als Parse-Baum bezeichnet wird. In diesem Stadium kommt der Parse-Baum für semantische und syntaktische Prüfungen zum Einsatz (z.B. die Bestätigung, dass die in der Abfrage referenzierten Objekte im Katalog vorhanden sind) sowie für Privilegienprüfungen, Transformationen von KEY JOINs und NATURAL JOINs unter Verwendung von definierten referenziellen Integritätsregeln und für die Erweiterung von nicht materialisierten Ansichten. Die Ausgabe dieser Phase ist eine umgeschriebene Abfrage in Form eines Parse-Baums, der die Kommentare (erweiterte Informationen wie Datentypen) zu allen Objekten enthält, die in der ursprünglichen Abfrage referenziert wurden.
Phase der semantischen Transformationen In dieser Phase durchläuft die Abfrage iterative semantische Transformationen. Während die Abfrage noch als kommentierter Parse-Baum dargestellt wird, werden in dieser Phase Neuschreibungsoptimierungen angewendet wie z.B. Join-Eliminierungen, DISTINCT-Eliminierungen und Prädikatnormalisierung. Die semantischen Transformationen in dieser Phase werden gemäß den semantischen Transformationsregeln durchgeführt, die heuristisch auf die Darstellung des Parse-Baums angewendet werden.
Abfragen mit Plänen, die bereits vom Datenbankserver im Cache abgelegt wurden, überspringen diese Phase der Abfrageverarbeitung. Einfache Anweisungen können ebenfalls diese Phase der Abfrageverarbeitung überspringen. Viele Anweisungen, die eine heuristische Planauswahl im Bypass-Mechanismus des Optimierers verwenden, werden von der Phase der semantischen Transformationen nicht abgearbeitet. Die Komplexität der SQL-Anweisung legt fest, ob diese Phase an einer Anweisung angewendet wird.
Optimierungsphase In der Optimierungsphase wird eine andere interne Darstellung der Abfrage - die Abfragenoptimierungsstruktur - benutzt, die aus dem Parse-Baum erstellt wird.
Abfragen mit Plänen, die bereits vom Datenbankserver im Cache abgelegt wurden, überspringen diese Phase der Abfrageverarbeitung. Zusätzlich können einfache Anweisungen ebenfalls diese Phase der Abfrageverarbeitung überspringen.
Diese Phase wird in zwei Unterphasen aufgeteilt:
Vorphase der Optimierung In der Vorphase der Optimierung wird die Optimierungsstruktur durch die Informationen vervollständigt, die später in der Enumerationsphase benötigt werden. In dieser Phase wird die Abfrage analysiert, um alle relevanten Indizes und materialisierten Ansichten zu finden, die im Zugriffsplan der Abfrage benutzt werden können. Beispielsweise ermittelt der Algorithmus für die Ansichtenübereinstimmung in dieser Phase alle materialisierten Ansichten, die benutzt werden können, um eine Abfrage ganz oder teilweise zu erfüllen. Zusätzlich erstellt der Optimierer aufgrund der Prädikat-Analyse der Abfrage alternative Join-Methoden, die in der Enumerationsphase benutzt werden können, um einen Join für die Tabellen der Abfrage herzustellen. In dieser Phase wird keine Entscheidung über den besten Zugriffsplan für die Abfrage getroffen. Das Ziel dieser Phase ist die Vorbereitung auf die Enumerationsphase.
Enumerationsphase In dieser Phase enumeriert der Optimierer mögliche Zugriffspläne für die Abfrage und benutzt dabei die Bausteine, die in der Vorphase der Optimierung generiert wurden. Der Suchbereich ist sehr groß und der Optimierer verwendet einen herstellereigenen Enumerationsalgorithmus, um die Zugriffspläne zu generieren und zu kürzen. Für jeden Plan wird eine Kostenschätzung berechnet, um den aktuellen Plan mit dem bisher besten gefundenen Plan zu vergleichen. Bei diesen Vergleichen werden kostenträchtige Pläne verworfen. Bei der Kostenschätzung werden die Ressourcennutzung wie etwa Platten- und Arbeitsspeichervorgänge, die geschätzte Anzahl von Zeilen für die Zwischenergebnisse, das Optimierungsziel, die Cachegröße usw. berücksichtigt. Das Resultat der Enumerationsphase ist der beste Zugriffsplan für die Abfrage.
Planerstellungsphase In der Planerstellungsphase wird der beste Zugriffsplan verwendet, um die entsprechende endgültige Darstellung des Abfrageausführungsplans zum Ausführen der Abfrage zu erstellen. Sie können eine grafische Version des Plans in der Plananzeige in Interactive SQL einsehen. Der grafische Plan hat eine Baumstruktur, in der jeder Knoten ein physischer Operator ist, der einen spezifischen relationalen, algebraischen Vorgang implementiert. "Hash-Join" und "Ordered-Group-By" sind z.B. physische Operatoren, die einen Join bzw. einen Group-by-Vorgang implementieren.
Abfragen mit Plänen, die bereits vom Datenbankserver im Cache abgelegt wurden, überspringen diese Phase der Abfrageverarbeitung.
Ausführungsphase Das Ergebnis der Abfrage wird durch den Abfrageausführungsplan berechnet, der in der Planerstellungsphase erstellt wurde.
Eignung für ein Überspringen der Abfrageverarbeitungsphase
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |