MARTIN-LUTHER-UNIVERSITÄT HALLE-WITTENBERG DATENBANKEN IIB
Institut für Informatik Winter 2017/18
Prof. Dr. Stefan Brass [StudIP: Vorlesung]

 

 

Datenbanken IIB: DBMS-Implementierung

Ablauf (Planung der zeitlichen Aufteilung)

Hier wird eine ungefähre Übersicht gegeben, wann welcher Stoff behandelt werden soll. Im Laufe des Semesters ist beabsichtigt, die Liste zu aktualisieren, und den tatsächlich behandelten Stoff einzutragen. Selbstverständlich sind alle Angaben unverbindlich.

Tatsächlicher Ablauf:

1. Dienstag, 10.10.2017:
Kapitel 0: Informationen zur Vorlesung / Organisatorisches (Folie 0-1 bis 0-31)
Inhalte, Motivation, Voraussetzungen, Zeitliche Belastung, Projekt, Literatur, Informationen zur Oracle- und zur IBM-DB2-Zertifizierung.
Kapitel 1: Einführung (Folie 1-1 bis 1-7)
Dienste von Datenbank-Managementsystemen.
1b. Mittwoch, 11.10.2017 (Übung):
Kapitel A: Einführung in C++ für Java-Programmierer (Folie 1 bis 28)
"Hello, World"-Programm, main, Ausgaben (cout, <<), #include, using namespace std, Benutzung des gcc Compilers, Kontrollstrukturen, Wahrheitswerte (automatische Umwandlung von int nach bool), Eingaben, Initialisierung von Variablen, char Typ, typedef, Aufzähungstypen, Arrays, Pointer, Dereferenzierungs-Operator *, Addressoperator &, Pointer-Arithmetik, Null-Zeiger.
2. Dienstag, 17.10.2017 (ink. Teil der Übung):
Kapitel 1: Einführung (Folie 1-8 bis 1-42)
Datenunabhängigkeit, Transaktionen, Log-Datei, Wichtigkeit von Backups, Systemausfälle, Notfall-Systeme, Architektur (Schichteneinteilung) eines DBMS, Aufgaben eines Datenbank-Administrators, Data Dictionaries, Oracle Data Dictionary (Einstieg). Schema-Information im Oracle Data Dictionary.
2b. Mittwoch, 18.10.2017 (Übung):
Kapitel A: Einführung in C++ für Java-Programmierer (Folie 25 bis 59)
Wiederholung zu Zeigern und Arrays, Typ-Umwandlungen, void *, new, delete, malloc, const, Referenzen, Klassische C-Strings, string-Klasse, Deklaration eigener Klassen, header-Datei (.h) und Quelldatei mit Implementierung (.cpp), Objekte als lokale Variablen und auf dem Heap (new), Zugriff auf Komponenten ("." vs. "->"), Konstruktoren, Komponenten-Objekte (objekt-wertige Attribute), Initialisierungs-Syntax für Komponenten-Objekte im Konstruktor, Destruktoren.
3. Dienstag, 24.10.2017:
Kapitel 1: Einführung (Folie 1-43 bis 1-83)
Schema-Information im Oracle Data Dictionary, Zugriffsrechte (Objekt- und Systemrechte bei Oracle), Benutzer anlegen, Benutzer-Identifikation, Tablespaces, Quotas.
3b. Mittwoch, 25.10.2017 (Übung):
Kapitel A: Einführung in C++ für Java-Programmierer (Folie 56 bis 74)
Wiederholung zu Konstruktoren und Destruktoren, const-Methoden, statische Komponenten (static), automatisch vom Compiler erzeugte Methoden (Default Konstruktor, Destruktor, Copy Construktor, Zuweisung), Vorgehen, falls man diese Komponenten nicht wüscht, geschachteltes Include, #ifdef/#ifndef/#endif, #define (so dass der Compiler include-Dateien nur einmal sieht), getrennte Übersetzung, make.
4. Dienstag, 07.11.2017:
Kapitel 1: Einführung (Folie 1-84 bis 1-111)
Wiederholung zum Anlegen von Benutzern, Tabelspaces, Quotas, Sicherheit. Oracle Architektur: Daten-Dateien, Tablespaces, Temporäre Dateien, Control Files, Puffer, Logdateien, Zweck der Logdateien und Sinn des verzögerten Schreibens veränderter Blöcke im Puffer, Parameter von Oracle, Alert-Datei.
4b. Mittwoch, 25.10.2017 (Übung):
Ausfürliche Besprechung der Musterlösung zu Hausaufgabe 2
Erläuterung zu Include Guards und #pragma once. Möglichkeiten zur Speicherreservierung (Array im Objekt vs. dynamische Anforderung mit new). Freigabe dynamisch angeforderten Speichers im Destruktor (Diskussion über Copy-Konstruktor und Zuweisungs-Operator mit der Gefahr unbeabsichtigter/doppelter Speicherfreigaben, Lösungs-Alternativen). const-Zeiger und const-Methoden. Eigener Typ-Name (z.B. str_t) für "const char *" mit typedef. Unterschied zwischen Speichern des Zeigers und Kopieren aller Zeichen im Array. Besprechung/Demonstration von Objekt-Größe und Offsets von Attributen. Diskussion zum virtual Destruktor.
5. Dienstag, 14.11.2017:
Kapitel 1: Einführung (Folie 1-112 bis 1-146)
Oracle Architektur: Prozesse, Haupspeicherbereiche, Puffer, Oracle hoch- und runterfahren.
Kapitel 2: Platten, DBMS-Cache (Folie 2-1 bis 2-18)
Aufbau und Funktionsweise von Magnetplatten. Diskussion zu Stromausfällen und partiell geschriebenen Blöcken.
6. Dienstag, 21.11.2017:
Kapitel 2: Platten, DBMS-Cache (Folie 2-18 bis 2-61)
Drei Komponenten der Zugriffszeit (Seek Time, Latency Time, Transfer Time), Konsequenzen für performante Anwendung, Historische Entwicklung der Leistungsparameter, RAID-Systeme, RAID-Level 0, 1, 10, 4, 5. Tablespaces in Oracle.
7. Dienstag, 28.11.2017:
Kapitel 2: Platten, DBMS-Cache (Folie 2-62 bis 2-112)
Charakteristiken verschiedener Speichermedien, Pufferung von Blöcken im Hauptspeicher, Schnittstelle eines typischen Buffer Managers, Ersetzungsstrategien, LRU, Sequential Flooding des Puffers, DBMS vs. Betriebssystem, Abfrage von Leistungsparatern in Oracle, CREATE TABLE Parameter für Pufferung in Oracle. Die Fünf-Minuten Regel.
8. Dienstag, 05.12.2017:
Kapitel 3: Physische Speicherung von Relationen (Folie 3-1 bis 3-47)
Disk Manager: Segmente, Extents, Extentent Management in Oracle, CREATE TABLE Parameter für klassisches ("DICTIONARY") Extent Management, Algorithmus zur Extent-Anforderung/Belegung, Local Extent Management in Oracle, klassisches UNIX File System als Vergleich. Row Manager, Speicherung von Relationen als Heap-Datei, Zeiger auf Tupel: ROWID/TID.
9. Dienstag, 12.12.2017:
Kapitel 3: Physische Speicherung von Relationen (Folie 3-36 bis 3-69, 3-95 bis 3-108)
Wiederholung zu Aufgaben des Row Managers, Heap Files, ROWIDs/TIDs, Diskussion über Vor- und Nachteile stabiler ROWIDs, Alternativen, Implementierung von Zeilen fester Länge, Implementierung von Zeilen variabler Länge, Migrierte Zeilen, ROWID-Konzept: Verhinderung längerer Verweisketten. Vermeidung migrierter Zeilen mit PCTFREE, Implementierung des Full Table Scan (Hight Water Mark), Reorganisation von Tabellen, Zeilenformat von Oracle, Datenformate von Oracle, Berechnung von Zeilenlänge und Speicherplatzbedarf von Relationen.
10. Dienstag, 19.12.2017:
Kapitel 3: Physische Speicherung von Relationen (Folie 3-70 bis 3-89)
Veraltung von Listen von Bl"ocken mit freien Speicherplatz, PCTUSED, Automatic Segment Space Management, Wiederholung/Zusammenfassung zur CREATE TABLE Syntax mit Speicherparametern, ANALYZE TABLE, Bedeutung für Optimierer.
Kapitel 4: B-Baum Indexe (Folie 4-1 bis 4-26)
Motivation für Index-Strukturen (Berechnung der Dauer eines Full Table Scan für eine große Tabelle), Wiederholung zur physischen Datenunabhängigkeit, Wiederholung zu binären Suchbämen, B+-Bäume (typische Datenstruktur für Indexe), Gründe für die Wiederholung von Schlüsselwerten in Blattknoten (B-Baum vs. B+-Baum), Einfügung in B-Bäume. Asymptotische Komplexität von Suche/Einfügung/Löschung (logarithmisch).
11. Dienstag, 09.01.2018:
Kapitel 4: B-Baum Indexe (Folie 4-27 bis 4-53)
Berechnung von Höhe am Beispiel, Diskussion der Nutzung von Präfixen der Suchschlüssel ("rear compression"), Indexe mit mehreren ROWIDs zu einem Datenwert. Verkettung der Blattknoten. CREATE INDEX Befehl, Nutzung von Indexen zur Anfrageauswertung: Selektion mit Gleichheitsbedingung, Schneiden von TID-Mengen bei Nutzung mehrerer Indexe, Indexe über Attributkombinationen, Selektion mit Range Query, LIKE mit bekanntem Präfix, Index Join, Nutzen für Sortierung, Duplikateliminierung, Gruppierung, "Index only" Zugriffspläne, Verwendung von Indexen für Schlüssel, Fremdschlüssel, Indexe und Nullwerte. Index-Zugriff vs. Full Table Scan.
12. Dienstag, 16.01.2018:
Kapitel 4: B-Baum Indexe (Folie 4-54 bis 4-100)
Beispiel, bei dem Selektion mittels Index sehr viel langsamer als mittels Full Table Scan. Nachteile von Indexen. Index-Auswahl. CREATE INDEX Befehl. Laden großer Datenmengen. Indexe im Oracle Data Dictionary. Schätzung der Speichergröße von Indexen in Oracle. Zusammenfassung zum physischen Datenbank-Entwurf.
Kapitel 5: Weitere Speicher- und Indexstrukturen (Folie 5-1 bis 5-49, Nur kurzer Überblick)
Cluster (Index-Cluster in Oracle), Hashverfahren (Hash-Cluster in Oracle), Partitionierte Tabellen, Bitmap Indexe, Index-Organized Tables.
Kapitel 6: Anfrage-Auswertung (Folie 6-1 bis 6-34)
Anfrage-Auswertungspläne (QEPs: Query Evaluation/Execution Plans), Vergleich mit relationaler Algebra, Erste Beispiel-QEPs in Oracle. Pipelined/Lazy Evaluation (Vermeidung der Speicherung von Zwischenergebnissen), Beispiel-Schnittstelle mit Scan/Cursor/Iterator, Temporärer Speicher für Sortierung, Initialisierungs-Parameter für Sortierung in Oracle, Performance-Daten für Sortierung in Oracle,
13. Dienstag, 23.01.2018:
Kapitel 6: Anfrage-Auswertung (Folie 6-35 bis 6-86)
Mergesort, Verbesserungsmöglichkeiten für Mergesort. Join-Methoden: Nested-Loop Join, Merge-Join, Index-Join, Hash-Join. Optimizer Modes in Oracle, Wahl von Join-Methoden für Optimierungsziel schnelle Antwortzeit (erste Zeile möglichst schnell) oder hoher Durchsatz (letzte Zeile möglichst schnell), Beispiele von Oracle QEPs für Projekt-Selektion-Join Anfragen, Benutzung mehrerer Indexe für Konjunktionen und Disjunktionen, Auswertungspläne für Anfragen mit NOT EXISTS, Auswertungspläne für Aggregations-Anfragen, Auswertungspläne mit Sortierung, Zusammenfassung/Übersicht von Operatoren in Oracle QEPs.
Kapitel 7: Anfrage-Optimierung (Folie 7-1 bis 7-16)
Aufgabe des Optimierers, Direkte/Naive Übersetzung von SQL in relationale Algebra, algebraische Optimierung, Äquivalenzen der Relationenalgebra, Heuristik: Selektionen nach unten schieben (vor Joins), Beispiel, in dem das gerade falsch ist, lineare Join-Reihenfolgen vs. "bushy joins".
13b. Mittwoch, 24.01.2018:
Besprechung einer Beispielklausur
[Klausur aus WS 2015/16]
14. Dienstag, 30.01.2018:
Kapitel 7: Anfrage-Optimierung (Folie 7-17 bis 7-71)
Anfrage-Normalisierung in Oracle (Ersetzen von SQL-Konstrukten durch andere, um syntaktische Varianten zu entfernen und nur eine SQL-Teilmenge im Optimierer behandeln zu müssen). Funktionsweise des früheren, Regel-basierten Optimierers von Oracle: Prioritätenliste von Zugriffspfaden, Auswahl eines Kandidaten-QEPs. Kostenbasierte Optimierung: Eingabedaten, Schätzung der Selektivität verschiedener Bedingungen, Histogramme in Oracle, Kostenschätzung für Full Table Scans, Index Scans, Zeilenzugriff über ROWID (Dereferenzierung), Nested Loop Join, Optimizer Hints in Oracle, Zusammenfassung.

 


Stefan Brass (brass@informatik.uni-halle.de), 03. Februar 2018

Original URL: http://www.informatik.uni-halle.de/~brass/dbi17/ablauf.html   [XHTML 1.0 Checked]   [CSS Checked]   [Links Geprüft]   [Impressum]