Mittwoch, September 03, 2014

Jonathan Lewis über In-Memory-Effekte

In den letzten Wochen hat Jonathan Lewis einige Artikel zum Verhalten der in 12.1.0.2 erschienen In-Memory Option veröffentlicht, die ich hier kurz zusammenfasse - hauptsächlich allerdings, um die Links an geeigneter Stelle zu sammeln:
  • In-memory limitation: erläutert einen Fall, in dem die Kombination der In-Memory columnar storage mit der traditionellen Zeilen-basierten Ablage nicht das leistet, was man sich davon versprechen könnte - bzw. was sich der Herr Lewis hätte vorstellen können. Sein Beispiel enthält eine relativ breite Tabelle, deren Spalten zum Teil In-Memory abgelegt sind und zum Teil nicht. Ein Zugriff der sich auf die In-Memory Spalten beschränkt, wird auch über eine In-Memory-Operation abgebildet (im Plan: TABLE ACCESS INMEMORY FULL), aber so bald eine weitere "no inmemory" Spalte in der Select-Liste ergänzt wird, ergibt sich ein normaler FTS - obwohl es in diesem Fall unter Umständen effizienter wäre, die rowids der betroffenen Datensätze über den In-Memory-Zugriff zu bestimmen und darüber zuzugreifen. Anhand eines entsprechenden Beispiels mit allerlei Hints wird gezeigt, dass ein solcher Plan grundsätzlich möglich wäre, vom Optimizer aber nicht in Betracht gezogen wird. In einem Kommentar  von Franck Pachot und der Antwort von Jonathan Lewis gibt es noch ein paar Überlegungen zur Frage der technischen Umsetzung der rowid-Ablage im Rahmen der In-Memory Option, die allerdings an diser Stelle nicht definitiv beantwortet wird.
  • In-memory Aggregation: erklärt eine recht komplexe Variante der Optimierung von Aggregationen: "it’s a cunning mechanism combining aspects of the star-transformation (but without the bitmap indexes), Bloom filters, and “group-by” placement to minimise the cost of aggregation over high-volume joins." Angesichts der relativ hohen Komplexität des Verfahrens spare ich mir die Nacherzählung und beschränke mich auf die Erwähnung des Stichworts vector transformation (samt zugehörigem Hint; im Plan erscheinen dazu diverse Schritte zum Aufbau und zur Verwendung der Key Vector-Elemente, die - so weit ich es verstehe - In-Memory Key-Value-Elemente darstellen und deren Verwendung Ähnlichkeiten mit der von Bloom-Filtern besitzt).
  • In-memory Consistency: beschäftigt sich mit der Umsetzung von Lesekonsistenz im Rahmen der In-Memory Option und betrachtet dazu die Session-Statistiken. Die Ausführungen enthalten diverse Hinweise auf die relevanten Statistiken, aber, so weit ich sehe, keine extremen Überraschungen. 
Sollte Jonathan Lewis zeitnah weitere Artikel zum Thema liefern, so werde ich sie hier voraussichtlich ergänzen.

Keine Kommentare:

Kommentar veröffentlichen