Heute möchte ich mal wieder aus dem Nähkästchen plaudern und eine aktuelle Herausforderung aus dem Bereich Analysis Services auf dem SQL-Server (SSAS) erläutern. Es wird also wieder technisch.
Das Thema multidimensionale Datenbanken haben wir ja bereits im Detail behandelt. Dabei gibt es stets die Aufteilung in einen Cube, der die eigentlichen Daten beinhaltet und die beschreibenden Dimensionen darum herum.
Wenn eine Dimension überdimensional groß ist, dauert ein Update oder eine Veränderung entsprechend lange. Dabei gibt es verschiedene Verarbeitungsmethoden. Beim Full Process wird immer alles verarbeitet, egal was mit den Daten passiert ist und was aktualisiert wurde. Bei einem Process Update wird hingegen geprüft, was geändert oder zugefügt wurde und nur das wird aktualisiert.
In einem aktuellen Kundenprojekt haben wir den Fall, dass wir einen sehr großen Cube mit zum Teil auch überdurchschnittlich großen Dimensionen haben. Bisher haben wir zur Aktualisierung der Dimensionen die Methode Process Update genutzt, in der Erwartung, dass es die schnellere Methode ist.
Für den Cube ist das Processing so gestaltet, dass immer nur die Partitionen verarbeitet werden, welche vorab über eine Anwendung definiert wurden (auf Monatsebene). Somit werden nur die Daten aktualisiert, welche geändert oder neu hinzugekommen sind. Alle bestehenden Daten außerhalb dieser Partition bleiben unberührt.
Aktuell kam jedoch die Diskussion auf, ob die Performance für das Verarbeiten der Dimensionen so tatsächlich besser ist, oder ein Full Process wider Erwarten schneller sein kann. Daher haben wir die Methode umgestellt und Full Process eingeführt. Die Umstellung in der Dimension brachte jedoch den unschönen Nebeneffekt mit sich, dass im Cube nur noch die aktuell zu verarbeitende Partition verfügbar war. Alle anderen (historischen Partitionen) waren nicht mehr verfügbar bzw. unprocessed. Wenn man das ganze einmal genauer betrachtet, ist dieser Fall auch durchaus logisch. Dadurch dass sich die Dimension insgesamt verändert hat, muss theoretisch auch jede (historische) Partition neu verarbeitet werden, um die Veränderungen der Dimension mitzubekommen.
Unsere „Lesson learned“ ist also, dass man sich vorab sehr genau überlegen sollte, welche Änderungen man an einem Cube vornimmt. Vor der Umsetzung der vermeintlichen Verbesserung sollte immer geprüft werden, in wie fern hier Auswirkungen auf den Cube bzw. dessen Verfügbarkeit entstehen.
Nachdem die Process-Methode der Dimension wieder zurück auf Process Update geändert wurde, funktionierte wieder alles problemlos.