Dienstag, Januar 13, 2015

Parallel Query, OR Expansion und überflüssige Buffer Sorts

In den letzten Tagen hat Randolf Geist zwei Artikel zum Auftreten von überflüssigen Buffer Sort Operationen bei der Ausführung paralleler Queries veröffentlicht:
  • Unnecessary BUFFER SORT Operations - Parallel Concatenation Transformation: zeigt, dass die Kombination von Paralleler Query und einer OR Expansion Transformation (OR verknüpfte Prädikate werden in zwei über UNION ALL verbundene Teil-Queries aufgeteilt, wobei unerwünschte Duplikate durch Verwendung der LNNVL-Funktion vermieden werden) zum Auftreten überflüssiger Buffer Sort Operationen führen kann, die die Vorteile der Parallelisierung als blocking operation massiv reduzieren (und die Ressourcennutzung erhöhen). Ähnliche Effekte können auch beim manuellen Rewrite solcher UNION ALL-Konstrukte auftreten.
  • "SELECT * FROM TABLE" Runs Out Of TEMP Space: zeigt einen Fall, in dem sich ähnliche Buffer Sort Steps bei einem einfachen parallel ausgeführten "SELECT * FROM table" ergeben, wobei es sich um ein Exadata System und eine partitionierte Tabelle handelt, die über HCC komprimiert ist. Dabei führt die Zwischenspeicherung der Ergebnisse zu extremen Laufzeiten, weil die ersten Datensätze erst geliefert werden, wenn die gesamte Tabelle in den Buffer geladen wurde - und potentiell kann es zu einem Abbruch der Ausführung kommen, wenn das Datenvolumen einer entpackten Partition größer ist als der TEMP space. Auch in diesem Fall ist eine Concatenation Transformation im Spiel, die auf eine andere Transformation folgt, nämlich auf eine "table expansion", die es erlaubt einige Partitionen (auf die ein selektiver Zugriff erfolgt) via Index zu lesen und andere (bei denen der Zugriff nicht selektiv ist) via Full Scan, indem dort die Index-Partionen unusable gemacht werden. Natürlich gibt es mehrere mögliche Workarounds (Verzicht auf Parallelisierung, Verzicht auf table expansion), aber offenbar ist die OR Expansion auch in dieser Situation ein potentielles Problem - obwohl sie im ersten Moment so harmlos wirkt...
Ich habe in der Überschrift und auch im Text mehrfach von OR Expansion gesprochen, obwohl die Transformation in den Artikeln als Concatenation Transformation angesprochen wird, gehe aber bis ich eines Besseren belehrt werde davon aus, dass es sich nur um zwei Namen für die gleiche Sache handelt.

Nachtrag 14.01.2015: die Antwort auf die Frage nach der Identität von OR Expansion und Concatenation Transformation bleibt erst mal offen: Randolf Geist bestätigte meine Einschätzung, dass es sich um die gleiche Transformation handelt, aber Stefan Koehler ist anderer Meinung - und auch der Herr Koehler hat in der Regel sehr gute Gründe für solche Aussagen.

Keine Kommentare:

Kommentar veröffentlichen