1 / 108

Kapitel 10

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:

Download Presentation

Kapitel 10

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Kapitel 10 Anfragebearbeitung

  2. 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

  3. Kapitel 10.1 Vorgehensmodell

  4. 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“).

  5. Ablauf der Anfragebearbeitung Deklarative Anfrage Anfrage-Übersetzer Sichtauflösung Algebraischer Ausdruck Anfrage- Optimierer Auswertungs- Plan (QEP) Codeerzeugung Ausführung

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. Kapitel 10.2 Anfrageübersetzung

  12. 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

  13. 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.

  14. Kapitel 10.2.1 Standardisierung der SQL-Anfrage

  15. 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.

  16. 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.

  17. 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) .

  18. 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.

  19. 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) .

  20. Behandlung geschachtelter Anfragen (2) Rückführung von anyund all auf exists bzw. notexists: Ersetze • xany (select A fromR1, ..., Rmwhere B) durch • exists (selectfrom R1, ..., Rmwhere B and x  A). Ersetze • xall (select A fromR1, ..., Rmwhere B) durch • notexists (selectfrom R1, ..., Rmwhere B andnot x  A).

  21. Behandlung geschachtelter Anfragen (3) Rückführung von notexists auf exists: Ersetze • selectA1, A2,..., AnfromR1, ..., Rmwhere B and notexists (T) durch • selectA1, A2,..., Anfrom ((selectfromR1, ..., Rmwhere B)except(selectfromR1, ..., Rmwhere B andexists (T)))

  22. Behandlung geschachtelter Anfragen (4) Elimination von exists: Ersetze • selectA1, A2,..., AnfromR1, ..., RmwhereBandexists (selectfromRm+1, ..., Rkwhere B') durch • selectA1, A2,..., AnfromR1, ..., Rm, Rm+1, ..., Rkwhere B and B' .

  23. 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.

  24. Allgemeiner Tabellenausdruck im Ergebnis Standardisiere selectaufAttribute: Ersetze • allgemeinen Tabellenausdruck T (z.B. select mit groupby/having, join, values etc.) durch • selectfrom (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.

  25. 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)

  26. 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  selectfrom(T) as R(A1,A2,...,An)

  27. Beispiel (3) select FlugNrfrom FLUG F, FLUGZEUGTYP FTwhereF.FtypId = FT.FtypIdandFT.First + FT.Business + FT.Economy <any(selectfrom (selectcount (TicketNr)fromBUCHUNG BwhereB.FlugNr = F.FlugNrgroup by Datum)as T(count)) Rückführung von anyauf exists: xany (select A fromR1, ..., Rmwhere B) exists (selectfrom R1, ..., Rmwhere B and x  A)

  28. Beispiel (4) select FlugNrfrom FLUG F, FLUGZEUGTYP FTwhereF.FtypId = FT.FtypIdandexists (selectfrom (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 (selectfromRm+1, ..., Rkwhere B')

  29. 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

  30. 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.

  31. 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.

  32. Behandlung von from-Abhängigkeiten (2) Herausfaktorisieren von relationalen Operatoren: Ersetze • fromR1, ..., Rm, (T1union T2) durch • from ((selectfromR1, ..., Rm, T1)union(selectfromR1, ..., Rm, T2)) , und analog für intersect, except, join.

  33. 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).

  34. 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')

  35. 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

  36. 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.

  37. 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.

  38. Kapitel 10.2.2 Übersetzung in Standardform

  39. 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.

  40. 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

  41. Beispiel (9) select FlugNr from (select F., 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 Innere where-Klausel

  42. Beispiel (10) select FlugNr from (select F., FT.,count (TicketNr)fromB.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

  43. Beispiel (11) select FlugNr from (select F., FT.,count (TicketNr)from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 Innere select-Klausel

  44. 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

  45. 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

  46. 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

  47. 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

  48. 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))))))

  49. Kapitel 10.3 Logische Anfrageoptimierung

  50. 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

More Related