RAID-Technologie verspricht höhere Performance und mehr Sicherheit beim permanenten Speichern von Daten. Die ADMIN-Redaktion gibt einen Überblick über ... (mehr)

Speicherbedarf

Dafür kann man die Operationen, die im Ausführungsplan angezeigt werden, in zwei Kategorien unterteilen:

  • jene, die generell nur einen geringen Speicherbedarf haben und
  • jene, die ein Zwischenergebnis im Arbeitsspeicher ablegen müssen und damit einen potenziell großen Speicherbedarf haben.

Bei der Ressourcenplanung braucht man sich freilich nur um die zweite Kategorie kümmern. Das sind vor allem Sortier- und Gruppieroperationen aber auch sämtliche Operationen, die einen Hash-Algorithmus verwenden – etwa der Hash-Join. Obwohl die Namen dieser Operationen in den verschiedenen Datenbank-Produkten abweichen, verraten sich die Speicherintensiven meist durch "Sort", "Group" oder "Hash" im Namen. Dennoch gibt es auch Spezialfälle wie die Operation »SORT GROUP BY NOSORT« der Oracle Datenbank: Sie führt keine Sortierung, sondern ein Group-by auf vorsortierten Daten durch.

Das Gute an Ausführungsplänen ist, dass sie auch implizite Sortierungen explizit anzeigen. Wenn man zum Beispiel zwei Tabellen versehentlich mittels UNION verbindet, zeigt der Ausführungsplan auch die Operation zum Deduplizieren der Ergebnisse an (Ausnahme: MySQL). Wenn aber aufgrund der Daten ohnehin keine Duplikate vorkommen können, und damit ein UNION ALL genügt, verschwindet diese Operation und damit auch der entsprechende Speicherbedarf.

Beispiel 4: MySQL-Ausführungsplan erklärt

 

Durch das Voranstellen von explain vor die SQL-Abfrage wird der Ausführungsplan angezeigt.

»Using Where« in der Spalte »Extra« zeigt an, dass sich nicht alle Bedingungen über den Index auflösen lassen. Aus dem Ausführungsplan alleine kann man aber nicht erkennen, welche Bedingungen das sind.

MySQL verwendet einen Block-Nested-Loops-Join, der einen Speicherbedarf ähnlich einem Hash-Join hat.

Ebenso wird bei einem DISTINCT eine entsprechende Gruppier- oder Hash-Operation angezeigt, die wiederum mit einem gewissen Speicherbedarf einhergeht. Umgekehrt gibt es auch Fälle, in denen Datenbanken eine scheinbar notwendige Sortieroperation unterlassen. So kann es vorkommen, dass trotz Order-by-Klausel in der SQL-Abfrage keine Sortieroperation im Ausführungsplan erscheint. Dies ist meist auf eine gewiefte Indizierung zurückzuführen, die dafür sorgt, dass der Index die Daten bereits in der gewünschten Reihenfolge liefert. Diese Technik wird oft mit Limit- oder Top-Klauseln kombiniert und führt im Idealfall dazu, dass der Ressourcenbedarf fast völlig von der Tabellengröße entkoppelt ist. So kann die Geschwindigkeit einer Abfrage, die keine Where-Klausel hat, sogar unabhängig von der Tabellengröße sein, wenn ein passender Index im Spiel ist. Der SQL-Abfrage selbst ist das nicht anzusehen. Im Ausführungsplan erkennt man diese Technik aber durch die fehlende Sortieroperation.

Fazit

Ausführungspläne gehören alleine wegen der Fakten, die sie uns über die Datenbank verraten, in das Repertoire aller Datenbank-Adminstratoren und SQL-Entwickler. Sie können helfen, die Ursache von Performance-Problemen klar zu erkennen und zu beheben.

Der Autor

Markus Winand hat sich als Autor, Trainer und Coach darauf spezialisiert, Entwicklern bei Problemen mit der SQL-Performance zu helfen. Er hat das Buch "SQL Performance Explained" veröffentlicht und twittert seine besten Performance- Tipps als @SQLPerfTips.

Ähnliche Artikel

comments powered by Disqus
Mehr zum Thema

Neuerungen in PostgreSQL 12

Die mit Version 10 eingeführte Methodik, nur noch die erste Stelle als Hauptversion zu führen, setzt sich mit PostgreSQL 12 fort. Die freie objektrelationale Datenbank unterstützt beim Verarbeiten großer Datenmengen und hält vor allem in den Bereichen Partitionierung, Indizierung und Optimizer einige Neuerungen bereit. Wir haben uns die wesentlichen Features genauer angeschaut.
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023