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