1.08k likes | 1.18k Views
Kapitel 10. Anfragebearbeitung. Gegenstand des Kapitels. Datenmodell. Performanz. Datentypen: Satzmengen Operatoren: Operatoren auf Mengen. Mengenorientiert es Datenmodell. Anfragebearbeitung. Optimaler Einsatz der logischen Ressourcen. Datentypen: Sätze und Satzmengen Operatoren:
E N D
Kapitel 10 Anfragebearbeitung
Gegenstand des Kapitels Datenmodell Performanz Datentypen: • Satzmengen Operatoren: • Operatoren auf Mengen Mengenorientiertes Datenmodell Anfragebearbeitung Optimaler Einsatz der logischen Ressourcen Datentypen: • Sätze und Satzmengen Operatoren: • Operatoren auf Sätzen Satzorientiertes Datenmodell Satz- u. Satzmengenverwaltung Vorschau auf zukünftig benötigte Daten Datentypen: • phys. Zugriffsstrukturen auf Sätze Operatoren: • seq. Durchlauf, gezielte Suche Satzzugriffsstrukturen Zugriffsschicht Vermeiden nicht aktuell benötigter Daten Transparenter homogener Speicher Datentypen: • Seite = feste Anzahl von Bytes • Segment = var. Anzahl von Seiten Operatoren: • Anforderung/Freigabe von Seiten • Segmente anlegen/öffnen/schließen Hauptspeicherseiten u. Segmente Segment- u. Pufferverwaltung Bevorratung von Daten im Hauptspeicher (rechtzeitige Bereitstellung vor Benutzung) Dateien Datentypen: • Block = feste Anzahl von Bytes • Datei = variable Anzahl v. Blöcken Operatoren: • Dateien anlegen/öffnen/schließen • Lesen/Schreiben von Blöcken Schneller Transport zwischen Haupt- und Hintergrundspeicher Dateiverwaltung Speicherstruktur Geräteschnittstelle Geräte-E/A
Kapitel 10.1 Vorgehensmodell
Ziel • Sehr hohes Abstraktionsniveau der mengenorientierten Schnittstelle (SQL). • Anfragen sind deklarativ (nicht-prozedural), d.h. es wird spezifiziert, was man finden möchte, aber nicht wie. • Chance und Herausforderung: Das wie bestimmt sich aus der Abbildung der Anfrage auf die Operatoren der internen Ebene. • Zu einem was kann es zahlreiche wie‘s geben: • Verschiedene Algorithmen (Kapitel 9), die auf unterschiedlichen Abbildungen der Relationen auf interne Dateien und logische Zugriffspfade beruhen. • Reihenfolge der Operatoren, um hohe Selektivität zu erreichen. • Effiziente Anfrageauswertung durch Anfrageoptimierung. • Ziel: Gesucht wird nicht die optimale Auswertungsstrategie, sondern eine einigermaßen effiziente Variante (z.B. „avoiding the worst case“).
Ablauf der Anfragebearbeitung Deklarative Anfrage Anfrage-Übersetzer Sichtauflösung Algebraischer Ausdruck Anfrage- Optimierer Auswertungs- Plan (QEP) Codeerzeugung Ausführung
Verfeinerter Ablauf der Anfragebearbeitung Übersetzungszeit deklarative SQL-Anfrage Laufzeit Ergebnis Scanner, Parser, Sichtauflösung Ausführung DBS-Laufzeitsystem Anfrage in interner Form Code Standardisierung Code-Erzeugung QEP Logische Optimierung algebraischer Ausdruck auf internen Dateien QEP Optimierung Planparametri-sierung Physische Optimierung Kostenbasier-te Auswahl Auswertungsplan (Query Evaluation Plan, QEP) auf Satzzugriffsstrukturen
Verfeinerter Ablauf der Anfragebearbeitung deklarative SQL-Anfrage Ergebnis Traditionelle Übersetzung, Ergebnis ist ein standardisierter algebraischer Ausdruck auf Relationen und mit Annahme NSM damit auch auf internen Dateien Scanner, Parser, Sichtauflösung Ausführung DBS-Laufzeitsystem Anfrage in interner Form Code Standardisierung Code-Erzeugung QEP Logische Optimierung algebraischer Ausdruck auf internen Dateien QEP Optimierung Planparametri-sierung Physische Optimierung Kostenbasier-te Auswahl Auswertungsplan (Query Evaluation Plan, QEP) auf Satzzugriffsstrukturen
Verfeinerter Ablauf der Anfragebearbeitung deklarative SQL-Anfrage Ergebnis Scanner, Parser, Sichtauflösung Ausführung DBS-Laufzeitsystem Anfrage in interner Form Code Standardisierung Code-Erzeugung QEP Umformung zunächst unabhängig und dann abhängig von Zugriffstrukturen, dann Bewertung der Pläne. Logische Optimierung algebraischer Ausdruck auf internen Dateien QEP Optimierung Planparametri-sierung Physische Optimierung Kostenbasier-te Auswahl Auswertungsplan (Query Evaluation Plan, QEP) auf Satzzugriffsstrukturen
Verfeinerter Ablauf der Anfragebearbeitung deklarative SQL-Anfrage Ergebnis Scanner, Parser, Sichtauflösung Ausführung DBS-Laufzeitsystem Anfrage in interner Form Code Standardisierung Code-Erzeugung QEP Bei Standardanfragen wird das Ergebnis von Übersetzung und Optimierung gespeichert. Bei Aufruf muss dann der QEP nur noch geeignet parametrisiert werden. Logische Optimierung algebraischer Ausdruck auf internen Dateien QEP Optimierung Planparametri-sierung Physische Optimierung Kostenbasier-te Auswahl Auswertungsplan (Query Evaluation Plan, QEP) auf Satzzugriffsstrukturen
Verfeinerter Ablauf der Anfragebearbeitung deklarative SQL-Anfrage Ergebnis Scanner, Parser, Sichtauflösung Ausführung DBS-Laufzeitsystem Anfrage in interner Form Sofern QEP nicht vom Laufzeitsystem interpretiert wird, muss er in ausführbaren Code übersetzt werden. Code Standardisierung Code-Erzeugung QEP Logische Optimierung algebraischer Ausdruck auf internen Dateien QEP Optimierung Planparametri-sierung Physische Optimierung Kostenbasier-te Auswahl Auswertungsplan (Query Evaluation Plan, QEP) auf Satzzugriffsstrukturen
Kapitel 10.2 Anfrageübersetzung
Stellung in der Anfragebearbeitung deklarative SQL-Anfrage Ergebnis Scanner, Parser, Sichtauflösung Ausführung DBS-Laufzeitsystem Anfrage in interner Form Code Standardisierung Code-Erzeugung QEP Logische Optimierung algebraischer Ausdruck auf internen Dateien QEP Optimierung Planparametri-sierung Physische Optimierung Kostenbasier-te Auswahl Auswertungsplan (Query Evaluation Plan, QEP) auf Satzzugriffsstrukturen
Grundsätze Prinzipielles Vorgehen zur Umsetzung deklarativ imperativ: • Definiere Algebra von Operatoren, die einzelne Algorithmen kapseln und als Basis-Bausteine eines imperativen Programms dienen. • Als Operator-Algebra dient (zunächst) die relationale Algebra. • SQL-Ausdrücke werden zunächst standardisiert (in bestimmte Standardformen überführt). • Für die Standardformen erfolgt Übersetzung anhand von Syntaxbaum. • Imperative Programme sind dann Bäume von Operatoren. • Ordne jeder Grammatikregel der deklarativen Sprache eine Übersetzungsregel zu, die besagt, wie der äquivalente Operatorbaum zu konstruieren ist. • Operatorbaum ist Eingabe für die Optimierungsphase.
Kapitel 10.2.1 Standardisierung der SQL-Anfrage
Bestandteile der Übersetzung Externes Datenmodell relationaler DBMS bietet: • Relation als fundamentalen Datentyp, • Sichten, • Konsistenzbedingungen, • Schutzmechanismen, • Anfragesprache SQL. • Übersetzung von SQL-Anfragen in interne Operator-Ausdrücke auf Relationen. • Behandlung von Sichten durch Query modification: Definition wird in Anfrage eingearbeitet. • Überwachung von Konsistenzbedingungen (ggf. zusätzliche Operatoraufrufe) bei Änderungen, gelegentlich Einbau in die Anfrage zur Nutzung bei der Anfragebearbeitung. • Durchsetzung der Schutzmechanismen durch Rechte-Überprüfung bei Übersetzung der Anfrage.
Grundmuster der SQL-Übersetzung Select-Ausdruck select A1, A2,..., Anfrom R1, R2,..., Rmwhere B wird überführt in: A1, A2,..., An (B (R1 R2 ... Rm)) . Der Select-Ausdruck muss dazu gewissen Standards genügen, die wir nachfolgend entwickeln Schrittweise Transformation der ursprünglichen Anfrage. Wir illustrieren die Vorgehensweise direkt an der SQL-Anfrage. Üblicherweise wird die Transformation an Ausdrücken einer (meist baumartigen) Zwischensprache vorgenommen.
Transformation (1) Beseitigen konjunktiver Bedingungen: selectA1, A2,..., AnfromR1, ..., Rmwhere B mit B B1 ... Bk (B in disjunktiver Normalform). Ersetze Anfrage durch (selectA1, A2,..., AnfromR1, ..., Rmwhere B1)union(selectA1, A2,..., AnfromR1, ..., Rmwhere B2)union ...union(selectA1, A2,..., AnfromR1, ..., Rmwhere Bk) .
Transformation (2) Select-Ausdruck select A1, A2,..., Anfrom R1, R2,..., Rmwhere B wird überführt in: A1, A2,..., An (B (R1 R2 ... Rm)) . • Probleme: • B kann geschachtelte Anfragen enthalten. • Ri kann ein Tabellenausdruck sein, der von R1, ..., Ri-1 abhängt. • group by und having-Klauseln müssen berücksichtigt werden. • A1, A2,..., An können Aggregatfunktionen sein.
Behandlung geschachtelter Anfragen (1) Rückführung von in/notinauf any bzw. all: Ersetze • x in (select A fromR1, ..., Rmwhere B) durch • x =any (select A fromR1, ..., Rmwhere B) . Ersetze • x notin (select A fromR1, ..., Rmwhere B) durch • x <>all (select A fromR1, ..., Rmwhere B) .
Behandlung geschachtelter Anfragen (2) Rückführung von anyund all auf exists bzw. notexists: Ersetze • xany (select A fromR1, ..., Rmwhere B) durch • exists (selectfrom R1, ..., Rmwhere B and x A). Ersetze • xall (select A fromR1, ..., Rmwhere B) durch • notexists (selectfrom R1, ..., Rmwhere B andnot x A).
Behandlung geschachtelter Anfragen (3) Rückführung von notexists auf exists: Ersetze • selectA1, A2,..., AnfromR1, ..., Rmwhere B and notexists (T) durch • selectA1, A2,..., Anfrom ((selectfromR1, ..., Rmwhere B)except(selectfromR1, ..., Rmwhere B andexists (T)))
Behandlung geschachtelter Anfragen (4) Elimination von exists: Ersetze • selectA1, A2,..., AnfromR1, ..., RmwhereBandexists (selectfromRm+1, ..., Rkwhere B') durch • selectA1, A2,..., AnfromR1, ..., Rm, Rm+1, ..., Rkwhere B and B' .
Transformation (3) Select-Ausdruck select A1, A2,..., Anfrom R1, R2,..., Rmwhere B wird überführt in: A1, A2,..., An (B (R1 R2 ... Rm)) . • Probleme: • B kann geschachtelte Anfragen enthalten. • Ri kann ein Tabellenausdruck sein, der von R1, ..., Ri-1 abhängt. • group by und having-Klauseln müssen berücksichtigt werden. • A1, A2,..., An können Aggregatfunktionen sein.
Allgemeiner Tabellenausdruck im Ergebnis Standardisiere selectaufAttribute: Ersetze • allgemeinen Tabellenausdruck T (z.B. select mit groupby/having, join, values etc.) durch • selectfrom (T) as R(A1,A2,...,An) , wobei R ein frei gewählter, sonst nirgendwo vorkommender Name ist und A1, A2,..., An Namen für die Spalten von T sind.
Beispiel (1) FLUGZEUGTYP(FtypId, Name, CockpitCrew, First, Business, Economy) FLUG(FlugNr, FtypId, von, nach, Entfernung, Abflugzeit, Ankunftszeit, Tage) BUCHUNG(FlugNr, TicketNr, PlatzNr, Datum) „Suche nach Flügen, die an irgendeinem Tag überbucht sind“: select FlugNrfrom FLUG F, FLUGZEUGTYP FTwhereF.FtypId = FT.FtypIdandFT.First + FT.Business + FT.Economy <any (selectcount (TicketNr)fromBUCHUNG BwhereB.FlugNr = F.FlugNrgroup by Datum)
Beispiel (2) select FlugNrfrom FLUG F, FLUGZEUGTYP FTwhereF.FtypId = FT.FtypIdandFT.First + FT.Business + FT.Economy <any (selectcount (TicketNr)fromBUCHUNG BwhereB.FlugNr = F.FlugNrgroup by Datum) Allg. Tabellenausdruck T im Ergebnis selectfrom(T) as R(A1,A2,...,An)
Beispiel (3) select FlugNrfrom FLUG F, FLUGZEUGTYP FTwhereF.FtypId = FT.FtypIdandFT.First + FT.Business + FT.Economy <any(selectfrom (selectcount (TicketNr)fromBUCHUNG BwhereB.FlugNr = F.FlugNrgroup by Datum)as T(count)) Rückführung von anyauf exists: xany (select A fromR1, ..., Rmwhere B) exists (selectfrom R1, ..., Rmwhere B and x A)
Beispiel (4) select FlugNrfrom FLUG F, FLUGZEUGTYP FTwhereF.FtypId = FT.FtypIdandexists (selectfrom (selectcount (TicketNr)fromBUCHUNG BwhereB.FlugNr = F.FlugNrgroup by Datum)as T(count)where FT.First+FT.Business+FT.Economy < T.count) Beseitigen von exists: fromR1, ..., RmfromR1, ..., Rm, Rm+1, ..., RkwhereBwhereB and B' andexists (selectfromRm+1, ..., Rkwhere B')
Beispiel (5) select FlugNrfrom FLUG F, FLUGZEUGTYP FT, (selectcount (TicketNr)fromBUCHUNG BwhereB.FlugNr = F.FlugNrgroup by Datum) as T(count) whereF.FtypId = FT.FtypIdandFT.First+FT.Business+FT.Economy <T.count
Transformation (4) Select-Ausdruck select A1, A2,..., Anfrom R1, R2,..., Rmwhere B wird überführt in: A1, A2,..., An (B (R1 R2 ... Rm)) . • Probleme: • B kann geschachtelte Anfragen enthalten. • Ri kann ein Tabellenausdruck sein, der von R1, ..., Ri-1 abhängt. • group by und having-Klauseln müssen berücksichtigt werden. • A1, A2,..., An können Aggregatfunktionen sein.
Behandlung von from-Abhängigkeiten (1) Komplikation: • Tabellenausdrücke in from-Klausel können von weiter links stehenden Tabellenausdrücken abhängen. • In diesem Fall kann from-Klausel nicht direkt in kart. Produkt übersetzt werden. from FLUG F, FLUGZEUGTYP FT, (selectcount (TicketNr)fromBUCHUNG BwhereB.FlugNr = F.FlugNrgroup by Datum) as T(count) • Dann sukzessives Eliminieren von Abhängigkeiten wie bei geschachtelten Anfragen.
Behandlung von from-Abhängigkeiten (2) Herausfaktorisieren von relationalen Operatoren: Ersetze • fromR1, ..., Rm, (T1union T2) durch • from ((selectfromR1, ..., Rm, T1)union(selectfromR1, ..., Rm, T2)) , und analog für intersect, except, join.
Behandlung von from-Abhängigkeiten (3) Herausfaktorisieren von select: Ersetze • fromR1, ..., Rm, (select E1, ..., Enfrom Rm+1, ..., Rkwhere B) durch • from(select R1., ..., Rm., E1, ..., Enfrom R1, ..., Rm, Rm+1, ..., Rkwhere B) (ggf. mit Auflösung von Namenskonflikten).
Behandlung von from-Abhängigkeiten (4) Ebenso mit Gruppierung: Ersetze • fromR1, ..., Rm, (select E1, ..., Enfrom Rm+1, ..., Rkwhere Bgroupby En+1, ..., Elhaving B') durch • from(select R1., ..., Rm., E1, ..., Enfrom R1, ..., Rm, Rm+1, ..., Rkwhere Bgroupby R1., ..., Rm., En+1, ..., Elhaving B')
Beispiel (6) select FlugNrfrom FLUG F, FLUGZEUGTYP FT, (selectcount (TicketNr)fromBUCHUNG BwhereB.FlugNr = F.FlugNrgroup by Datum) as T(count) whereF.FtypId = FT.FtypIdand FT.First+FT.Business+FT.Economy <T.count Herausfaktorisieren von select mit group by
Beispiel (7) select FlugNr from (selectF., FT., count (TicketNr)fromFLUG F, FLUGZEUGTYP FT,BUCHUNG BwhereB.FlugNr = F.FlugNrgroup byF., FT., Datum) as DFT(F.,FT.,count) whereF.FtypId = FT.FtypIdand FT.First+FT.Business+FT.Economy <DFT.count DFT(F.,FT.,count) ist Abkürzung. Genauer: Anstelle von F.* und FT.* hat man sich die gesamte Folge der Attribute vorzustellen, DFT hat also 15 Attribute.
Fazit: Standardisiertes Ergebnis Sukzessive Anwendung vorhergehender Regeln führt schließlich auf einfache Anfragen, d.h. Anfragen der Form: • einzelne Basistabelle, • einzelnes ungeschachteltes select-Statement (evtl. mit Gruppierung), dessen from-Klausel wieder eine einfache Anfrage ist, • relationale Verknüpfung (union, intersect, except, join) einfacher Anfragen.
Kapitel 10.2.2 Übersetzung in Standardform
A1, A2,..., An B Rm R3 R1 R2 Übersetzungsregeln A1, A2,..., An (B (R1 R2 ... Rm)) select A1, A2,..., Anfrom R1, R2,..., Rmwhere B Basistabellen werden durch Referenzen auf entsprechende Datenstrukturen ersetzt. Folge einfacher Anfragen in der from-Klausel führt auf kartesisches Produkt. select-Anweisung (evt. mit Gruppierung) wird in Kombination aus Selektions- und Projektionsoperator auf die from-Klausel übersetzt. Gruppierung wird in Operator der erweiterten Algebra übersetzt. Relationale Verknüpfung (union, intersect, except, join) einfacher Anfragen wird in entsprechende relationale Operatoren übersetzt.
Beispiel (8) select FlugNr from (select F., FT., count (TicketNr)from FLUG F, FLUGZEUGTYP FT, BUCHUNG BwhereB.FlugNr = F.FlugNrgroup byF., FT., Datum) as DFT(F.,FT.,count) whereF.FtypId = FT.FtypIdand FT.First+FT.Business+FT.Economy < DFT.count Folge einfacher Anfragen in der inneren from-Klausel
Beispiel (9) select FlugNr from (select F., FT., count (TicketNr)fromFLUG FFLUGZEUGTYP FTBUCHUNG BwhereB.FlugNr = F.FlugNrgroup byF., FT., Datum) as DFT(F.,FT.,count) whereF.FtypId = FT.FtypIdand FT.First+FT.Business+FT.Economy < DFT.count Innere where-Klausel
Beispiel (10) select FlugNr from (select F., FT.,count (TicketNr)fromB.FlugNr = F.FlugNr(FLUG F FLUGZEUGTYP FT BUCHUNG B)group byF., FT.,Datum) as DFT(F.,FT.,count) whereF.FtypId = FT.FtypIdand FT.First+FT.Business+FT.Economy < DFT.count Gruppierung
Beispiel (11) select FlugNr from (select F., FT.,count (TicketNr)fromF., FT., Datum (B.FlugNr = F.FlugNr(FLUG F FLUGZEUGTYP FT BUCHUNG B)) ) as DFT(F,FT,count) whereF.FtypId = FT.FtypIdand FT.First+FT.Business+FT.Economy < DFT.count Innere select-Klausel
Beispiel (12) select FlugNr from (F., FT., count (TicketNr) (F., FT., Datum (B.FlugNr = F.FlugNr(FLUG F FLUGZEUGTYP FT BUCHUNG B)))) as DFT(F,FT,count) whereF.FtypId = FT.FtypIdand FT.First+FT.Business+FT.Economy < DFT.count Übersetzung der as-Klausel durch Rename-Operator auf die DFT-Attribute
Beispiel (13) select FlugNr from F.,FT.,count (F., FT., count (TicketNr) (F., FT., Datum (B.FlugNr = F.FlugNr(FLUG F FLUGZEUGTYP FT BUCHUNG B))))whereF.FtypId = FT.FtypIdand FT.First+FT.Business+FT.Economy < DFT.count Verbleibende where-Klausel
Beispiel (14) select FlugNr from F.FtypId = FT.FtypId FT.First+FT.Business+FT.Economy < DFT.count (F.,FT.,count ( F., FT., count (TicketNr) (F., FT., Datum (B.FlugNr = F.FlugNr(FLUG F FLUGZEUGTYP FT BUCHUNG B))))) Streng genommen stehen hier die umbenannten DFT-Attribute Verbleibende select-Klausel
Beispiel (15) F.FlugNr ( F.FtypId = FT.FtypId FT.First+FT.Business+FT.Economy < count (F.,FT.,count ( F., FT., count (TicketNr) (F., FT., Datum (B.FlugNr = F.FlugNr(FLUG F FLUGZEUGTYP FT BUCHUNG B)))))) Streng genommen steht hier das umbenannte DFT-Attribut
B.FlugNr = F.FlugNr F.FtypId = FT.FtypId FT.First+FT.Business+FT.Economy < count F., FT., Datum F., FT., count (TicketNr) F., FT., count F.FlugNr FLUGF FLUGZEUGTYPFT BUCHUNGB Beispiel (16) Endergebnisals Operatorbaum: F.FlugNr ( F.FtypId = FT.FtypId FT.First+FT.Business+FT.Economy < count (F.,FT.,count ( F., FT., count (TicketNr) (F., FT., Datum (B.FlugNr = F.FlugNr(FLUG F FLUGZEUGTYP FT BUCHUNG B))))))
Kapitel 10.3 Logische Anfrageoptimierung
Stellung in der Anfragebearbeitung deklarative SQL-Anfrage Ergebnis Scanner, Parser, Sichtauflösung Ausführung DBS-Laufzeitsystem Anfrage in interner Form Code Standardisierung Code-Erzeugung QEP Logische Optimierung algebraischer Ausdruck auf internen Dateien QEP Optimierung Planparametri-sierung Physische Optimierung Kostenbasier-te Auswahl Auswertungsplan (Query Evaluation Plan, QEP) auf Satzzugriffsstrukturen