26.02.2014 Aufrufe

ADMIN Magazin Gestapelt - Schneller und sicherer mit RAID (Vorschau)

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Basics<br />

Ausführungspläne<br />

© Gunnar Pippel, 123RF<br />

Datenbank-Ausführungspläne lesen <strong>und</strong> verstehen<br />

Alles nach Plan<br />

Will man das Optimierungspotenzial von SQL-Abfragen oder ihren zukünftigen Ressourcenbedarf abschätzen,<br />

braucht man einen Blick unter die Haube. Den erlauben die Ausführungspläne der Datenbank. Wer sie versteht,<br />

hält den Schlüssel für effektives SQL in der Hand. Markus Winand<br />

Der sogenannte Ausführungsplan (execution<br />

plan, oft auch explain plan oder<br />

query execution plan) enthält die einzelnen<br />

Schritte, die eine Datenbank beim<br />

Abarbeiten einer SQL-Anweisung ausführt.<br />

Ausführungspläne geben zum Beispiel<br />

Aufschluss darüber, welche Indizes<br />

benutzt werden, in welcher Reihenfolge<br />

die Zugriffe auf die verschiedenen Tabellen<br />

erfolgen, <strong>und</strong> welche Algorithmen für<br />

Join-, Sortier- <strong>und</strong> Gruppier-Operationen<br />

zum Zuge kommen.<br />

Im Vergleich <strong>mit</strong> anderen Programmiersprachen<br />

entspricht der Ausführungsplan<br />

ungefähr dem Bytecode von<br />

Scriptsprachen wie Perl oder Python –<br />

er wird intern bei der Ausführung der<br />

SQL-Anweisung verwendet. Aufgr<strong>und</strong><br />

dieser Analogie wird das Erstellen eines<br />

Ausführungsplanes manchmal auch als<br />

Kompilieren bezeichnet. Gebräuchlicher<br />

ist aber die Bezeichnung Prepare für<br />

diese Phase (siehe Abbildung 1). Da die<br />

entsprechende Datenbank-Komponente<br />

Optimizer oder Query Planner heißt, sind<br />

auch die Begriffe Optimieren <strong>und</strong> Planen<br />

gebräuchlich.<br />

Ausführungspläne sind in erster Linie ein<br />

internes Mittel zum Zweck. Der Admin<br />

kann sie aber dennoch einsehen. Weil der<br />

Ausführungsplan die Abläufe auf einer<br />

ähnlichen Abstraktionsebene darstellt<br />

wie SQL, kann man einen Ausführungsplan<br />

sehr schnell lesen – durch die einheitliche<br />

Formatierung oft sogar schneller<br />

als die ursprüngliche SQL-Anweisung.<br />

Kein übergreifender Standard<br />

Einheitlich ist die Formatierung von Ausführungsplänen<br />

aber nur innerhalb einer<br />

Datenbank. Einen herstellerübergreifenden<br />

Standard gibt es dafür nicht. Tatsächlich<br />

sehen die Ausführungspläne einer<br />

MySQL-Datenbank völlig anders aus als<br />

zum Beispiel bei Microsofts SQL Server.<br />

Genauso unterschiedlich sind die Methoden<br />

zur Anzeige eines Ausführungsplanes.<br />

Während es bei PostgreSQL <strong>und</strong><br />

MySQL genügt, der SQL-Anweisung das<br />

Schlüsselwort »explain« voranzustellen,<br />

muss man bei Oracle das Kommando<br />

»xplain plan for« <strong>mit</strong> dem Funktionsaufruf<br />

»DBMS_XPLAN.DISPLAY« kombinieren<br />

(siehe Beispiel 1).<br />

Grafische Benutzeroberflächen bieten<br />

dafür entsprechende Schaltflächen oder<br />

Menüpunkte. Dieser Artikel legt den<br />

Schwerpunkt auf MySQL, Hinweise zu<br />

anderen Produkten finden sich hier [1].<br />

Der Rest dieses Beitrags wird zeigen, wie<br />

der Admin die wichtigsten Informationen<br />

aus Ausführungsplänen herausliest <strong>und</strong><br />

häufige Fehlinterpretationen vermeidet.<br />

Der Cost-Wert<br />

Der Cost-Wert ist ein Benchmark, der<br />

vom Optimizer benutzt wird, um den<br />

besten Ausführungsplan für eine SQL-<br />

Anweisung zu finden. Grob gesprochen<br />

könnte man sagen, dass der Cost-Wert ein<br />

Maßstab für die Ausführungsgeschwindigkeit<br />

ist. Genau betrachtet gilt das aber<br />

nur für jeweils eine SQL-Anweisung un-<br />

88 Ausgabe 06-2012 Admin www.admin-magazin.de

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!