UNIVERSITÄT BASEL Prof. Dr. Heiko Schuldt Ihab Al Kabary, MSc Ilir Fetai, MSc Nenad Stojni¢, MSc cs243: Datenbanken FS 2013 Übung 5 Abgabe: 14.05.2013 (23:59 Uhr) Modalitäten der Abgabe: Bitte laden Sie Ihre Lösungen VOR dem Abgabeter- min auf das courses-System. Verspätet abgegebene Lösungsblätter können nicht berücksichtigt werden. Modalitäten der Bearbeitung: Kleingruppen von bis zu zwei Personen sind möglich. Geben Sie auf der Lösung die Namen der Gruppenmitglieder an. Aufgabe 1: Anfrageoptimierung (10 Punkte) Diese Aufgabe ist eine Fortsetzung der Aufgabe 1 des letzten Aufgabenblattes. Nehmen Sie die Optimierung auf Basis von Aufgabe 1 des letzten Aufgabenblattes vor. Nehmen Sie an, dass alle Attributwerte der Attribute a, f und g jeweils unter 10 Werten gleichverteilt und unkorreliert sind. Die Werte der Fremdschlüssel (R.c und S.e) sollen ebenfalls in Bezug auf die Schlüsselwerte gleichverteilt sein. Die Kardinalitäten der Relationen seien mit Card(R) = 10, Card(S) = 10.000, Card(T ) = 100.000 gegeben. Berechnen Sie die Grösse der erwarteten Zwischenergebnismengen (Anzahl Tupel) bei der Ausführung des nichtoptimierten und des optimierten Operatorbaumes! Aufgabe 2: Messung der Kosten einfacher Anfragen (20 Punkte) Diese Aufgabe baut auf den Aufgaben zur Kostenschätzung von vergangener Woche (Aufgaben 2 und 3) auf, in der verschiedene Alternativen für den physischen Entwurf einer Oracle-Datenbank betrachtet und bewertet werden sollten. In dieser Aufgabe sollen Sie Ihre Schätzungen mit Hilfe einiger Performance-Messungen überprüfen. Die Voraussetzungen sind die selben wie beim letzten Aufgabenblatt: Daten Wir betrachten eine Relation R, die zwei numerische Attribute A und B enthält. Die beiden Attribute haben jeweils die Länge 6 Bytes. In dieser Relation sind 50 000 Tupel 1 gespeichert. Die Attributwerte von A sind aus dem Intervall [0 . . . 999] mit Gleichvertei- lung der Tupel über die Attributwerte. Die Attributwerte von B sind aus dem Intervall [0 . . . 999], wobei 40 000 Tupel über das Intervall [0 . . . 99] gleichverteilt und 10000 Tupel über das Intervall [100 . . . 999] gleichverteilt sind. Entwurfsalternativen Für den physischen Datenbankentwurf der Relation R stehen verschiedene Möglichkeiten oen. Im Rahmen dieser Übung sollen Sie die folgenden sechs näher betrachten: 1. Es ist lediglich die Relation R gespeichert (d.h. es gibt keinerlei Indexe). ∗ 2. Es existiert ein Index (B -Baum) über dem Attribut A (Relationenname RA). ∗ 3. Es existiert ein Index (B -Baum) über dem Attribut B (Relationenname RB). 4. Es existiert sowohl über A als auch über B ∗ ein Index (B -Baum, Relationenname RAB). 5. Es existiert ein clustered Index über sortiert (Relationenname A, d.h. die Relation ist bezüglich A physisch RA$). ∗ 6. Es existiert ein kombinierter Index (B -Baum) über A und B , d.h. die Attributwerte RC). werden konkateniert und als ein Wert im Index gespeichert (Relationenname ∗ Alle Indexe ausser Alternative 5 seien mittelbar (indirekte B -Bäume). Nehmen Sie an, dass Relationen und Indexe in verschiedenen Tablespaces gespeichert sind, wobei die Seitengrösse 8 KBytes sei mit 70% Füllgrad für die Indexseiten und 90% Füllgrad für die ∗ Datenseiten. Ein TID oder Zeiger im B -Baum habe eine Länge von 6 Bytes. 48 Bytes werden pro Seite für Seiteninformation benötigt. In dieser Aufgabe geht es jedoch nicht um eine Schätzung der Kosten, wie in der letzten Woche, sondern um einen Messung der Kosten, die tatsächlich in der Datenbank entstehen. Kostenmessung Das Script zum Anlegen der notwendigen Relationen und Indexe heisst kosten.sql und ist auf den Übungsseiten herunterzuladen. Die Relationen können gefüllt werden, indem Sie die public synonyms mit der Vorsilbe GEG_, also z.B. GEG_R für die Relation R, abfragen: insert into Tabellenname select * from GEG_R;. Um die Baumhöhe zu ermitteln, können Sie das Attribut user_indexes blevel der Systemtabelle nutzen, welches die Schritte von der Wurzel zum Blatt angibt. Um eine aktuelle Statistik vom Index zu erhalten, sollten Sie jedoch zuvor: analyze index Indexname compute statistics; ausführen. Da Sie die Rolle PLUSTRACE besitzen, können Sie, um genauere Angaben zur Stati- 2 set autotrace on; arbeiten (zum Abschalten der Statistik- und Ausführungsplanausgabe: set autotrace off;). stik und zum Ausführungsplan einer Anfrage zu erhalten, mit Mit den so erhaltenen Daten können Sie die unten stehenden Mess-Tabellen ergänzen. Nähere Angaben zu den Werten der Statistikausgabe nden Sie unter: http://www.adp-gmbh.ch/ora/sqlplus/autotrace.html. Bevor Sie jedoch ihre Abfragen das erste Mal ausführen, sollten Sie die Statistik aktualisieren, d.h. analyze table compute statistics; Tabellenname ausführen. a) Indexhöhen und Anzahl Zugrie für die Suche im Index bestimmen Ermitteln Sie zuerst die Höhe der Indexe und die nötige Anzahl Zugrie für die Suche im Index. Verwenden Sie die Werte 10 und 500 für die Suche von A und B mit den Entwürfen und tragen Sie ihre Resulate in die untenstehende Tabelle ein. (D.h. verwenden Sie Anfragen der Art: Entwurf Höhe R: kein Index RA: Index über RB: RAB: RA$: RC: select count(*) from R where A=10;) A Index über B Indexe über A u. A = 10 B = 10 A = 500 B = 500 B Clustered Index Kombinierter Index (8 Punkte) b) Messen der Kosten Überprüfen Sie die Richtigkeit Ihrer Kostenschätzungen aus der letzten Woche ebenfalls mit Hilfe von Leistungsmessungen. Tragen Sie die Messresultate in die folgende Tabelle ein und vergleichen Sie die Werte mit Ihren Berechnungen der letzten Woche. Wo gibt es Abweichungen? Können Sie diese Abweichungen erklären? Anfrage Q1 Entwurf R: kein Index RA: Index über RB: RAB: RA$: RC: A Index über B Indexe über A und Q2 Q3 B Clustered Index Kombinierter Index (12 Punkte) 3