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.

Ausführungspläne<br />

Basics<br />

Weniger bekannt, aber nicht weniger<br />

nützlich ist, dass man aus Ausführungsplänen<br />

auch etwas über den Speicherbedarf<br />

einer SQL-Abfrage erfahren kann<br />

– also darüber, wie viel Hauptspeicher<br />

während der Ausführung benötigt wird.<br />

Speicherbedarf<br />

Dafür kann man die Operationen, die im<br />

Ausführungsplan angezeigt werden, in<br />

zwei Kategorien unterteilen:<br />

n jene, die generell nur einen geringen<br />

Speicherbedarf haben <strong>und</strong><br />

n jene, die ein Zwischenergebnis im Arbeitsspeicher<br />

ablegen müssen <strong>und</strong> da<strong>mit</strong><br />

einen potenziell großen Speicherbedarf<br />

haben.<br />

Bei der Ressourcenplanung braucht man<br />

sich freilich nur um die zweite Kategorie<br />

kümmern. Das sind vor allem Sortier- <strong>und</strong><br />

Gruppieroperationen aber auch sämtliche<br />

Operationen, die einen Hash-Algorithmus<br />

verwenden – etwa der Hash-Join. Obwohl<br />

die Namen dieser Operationen in<br />

den verschiedenen Datenbank-Produkten<br />

abweichen, verraten sich die Speicherintensiven<br />

meist durch „Sort“, „Group“<br />

oder „Hash“ im Namen. Dennoch gibt<br />

es auch Spezialfälle wie die Operation<br />

»SORT GROUP BY NOSORT« der Oracle<br />

Beispiel 4: MySQL-Ausführungsplan erklärt<br />

01 sqyl> EXPLAIN 1<br />

02 ‐> SELECT *<br />

03 ‐><br />

04 FROM sales s<br />

05 ‐><br />

06 JOIN employees e ON (s.employee_id = e.employee_id)<br />

07 ‐><br />

08 WHERE s.sale_date > CURRENT_DATE ‐ INTERVAL '6' MONTH<br />

09 ‐><br />

10 AND s.eur_value >= 10;<br />

Datenbank: Sie führt keine Sortierung,<br />

sondern ein Group-by auf vorsortierten<br />

Daten durch.<br />

Das Gute an Ausführungsplänen ist, dass<br />

sie auch implizite Sortierungen explizit<br />

anzeigen. Wenn man zum Beispiel zwei<br />

Tabellen versehentlich <strong>mit</strong>tels UNION<br />

verbindet, zeigt der Ausführungsplan<br />

auch die Operation zum Deduplizieren<br />

der Ergebnisse an (Ausnahme: MySQL).<br />

Wenn aber aufgr<strong>und</strong> der Daten ohnehin<br />

keine Duplikate vorkommen können, <strong>und</strong><br />

da<strong>mit</strong> ein UNION ALL genügt, verschwindet<br />

diese Operation <strong>und</strong> da<strong>mit</strong> auch der<br />

entsprechende Speicherbedarf.<br />

Ebenso wird bei einem DISTINCT eine<br />

entsprechende Gruppier- oder Hash-Operation<br />

angezeigt, die wiederum <strong>mit</strong> einem<br />

gewissen Speicherbedarf einhergeht.<br />

11 +‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+<br />

12 | id | table | type | key | key_len | rows | Extra |<br />

13 +‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+<br />

14 | 1 | s | range | sale_date | 3 | 81858 | Using index condition; |<br />

2<br />

15 <br />

Using where ‚ |<br />

16 | 1 | e | ALL | NULL | NULL | 10031 | Using where; |<br />

17 Using join buffer 3 |<br />

(Block Nested Loop) |<br />

18 +‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐+‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+<br />

1 Durch das Voranstellen von explain vor die SQL-Abfrage wird der Ausführungsplan angezeigt.<br />

2 »Using Where« in der Spalte »Extra« zeigt an, dass sich nicht alle Bedingungen über den Index<br />

auflösen lassen. Aus dem Ausführungsplan alleine kann man aber nicht erkennen, welche Bedingungen<br />

das sind.<br />

3 MySQL verwendet einen Block-Nested-Loops-Join, der einen Speicherbedarf ähnlich einem Hash-<br />

Join hat.<br />

Antwortzeit [sec]<br />

1.2<br />

1.0<br />

0.8<br />

0.6<br />

0.4<br />

0.2<br />

0.0<br />

Filterprädikate<br />

Umgekehrt gibt es auch Fälle, in denen<br />

Datenbanken eine scheinbar notwendige<br />

Sortieroperation unterlassen. So kann es<br />

vorkommen, dass trotz Order-by-Klausel<br />

in der SQL-Abfrage keine Sortieroperation<br />

im Ausführungsplan erscheint. Dies<br />

ist meist auf eine gewiefte Indizierung<br />

zurückzuführen, die dafür sorgt, dass der<br />

Index die Daten bereits in der gewünschten<br />

Reihenfolge liefert. Diese Technik<br />

wird oft <strong>mit</strong> Li<strong>mit</strong>- oder Top-Klauseln<br />

kombiniert <strong>und</strong> führt im Idealfall dazu,<br />

dass der Ressourcenbedarf fast völlig von<br />

der Tabellengröße entkoppelt ist. So kann<br />

die Geschwindigkeit einer Abfrage, die<br />

keine Where-Klausel hat, sogar unabhängig<br />

von der Tabellengröße sein, wenn ein<br />

passender Index im Spiel ist. Der SQL-<br />

Abfrage selbst ist das nicht anzusehen.<br />

Im Ausführungsplan erkennt man diese<br />

Technik aber durch die fehlende Sortieroperation.<br />

Fazit<br />

Zugriffsprädikate<br />

0.0<br />

0 20 40 60 80 100<br />

Tabellengröße [x3000 Zeilen]<br />

Abbildung 2: Bei steigender Tabellengröße offenbart sich die ineffektive Indexnutzung.<br />

1.2<br />

1.0<br />

0.8<br />

0.6<br />

0.4<br />

0.2<br />

Antwortzeit [sec]<br />

Ausführungspläne gehören alleine wegen<br />

der Fakten, die sie uns über die Datenbank<br />

verraten, in das Repertoire aller<br />

Datenbank-Adminstratoren <strong>und</strong> SQL-<br />

Entwickler. Sie können helfen, die Ursache<br />

von Performance-Problemen klar zu<br />

erkennen <strong>und</strong> zu beheben. (jbr) n<br />

Infos<br />

[1] Ausführungspläne: [http:// use‐​the‐index‐​<br />

luke. com/ de/ sql/ ausfuehrungsplaene]<br />

Der Autor<br />

Markus Winand hat sich als Autor, Trainer <strong>und</strong><br />

Coach darauf spezialisiert, Entwicklern bei Problemen<br />

<strong>mit</strong> der SQL-Performance zu helfen. Er hat<br />

das Buch „SQL Performance Explained“ veröffentlicht<br />

<strong>und</strong> twittert seine besten Performance-<br />

Tipps als @SQLPerfTips.<br />

www.admin-magazin.de<br />

Admin<br />

Ausgabe 06-2012<br />

91

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!