Wieso braucht es einen Cache Warmer?

Wenn Qlik Sense Apps eine bestimmte Grösse erreichen (Grösser als 1GB, Datei Grösse) kann das erste öffnen der App mehrere Minuten dauern. Das ist nur beim ersten öffnen so, jeder weitere User, der die App öffnet greift auf die bereits geladene App zu. Damit das beim ersten Zugriff nicht so lange ging, muss die App im Hintergrund geöffnet werden. Darum kann ein Cachewarmer dann hilfreich sein. Der Cachwarmer funktioniert nur wenn der Server genug RAM hat für den Cache von Apps, sonst cachet Qlik Sense die Daten und schmeisst sie gleich wieder weg und füllt das RAM mit anderen aktuell verwendeten Daten. Wie lange Qlik Sense den Cache behält kann eingestellt werden, aktuell ist der Default wert 8h. Danach wird der Cache so oder so gelöscht.

Mögliche Probleme

Sobald Qlik Sense kein RAM mehr hat, werden die ältesten Cache Daten verworfen, das heisst es kann sein wenn viele differente Apps geladen werden das eine App trotz "Cache warming" nicht mehr im Cache ist und neu geladen werden muss. In einem solchen Fall hilft es nur wenig wenn der Cache mehrmals geladen wird, es hilft dann nur das RAM zu erhöhen auf dem Sever oder einen weiteren Node aufzubauen, auf dem die App geladen wird.

Grundsätzlich empfehlen ich das Cach warming nicht!
Es kann aber das Probleme langsames laden einer App lösen.

Wichtig zu wissen, da in das Cache verhalten von Qlik Sense eingegriffen wird, kann das zu anderen Performance Problemen führen und unerwünschte neben Effekte haben. Daher empfehle ich, wenn ein Cache warming gemacht werden soll, dass die App auf einem dezidierten Server geladen wird. Auf dem Node nur diese App und vielleicht nur ein paar kleine Apps ausgeführt werden. So kann sicher gestellt werden das der Cache am längsten erhalten bleibt.

 

Welche Tools gibt es dafür?

Butler-cw

GitHub - ptarmiganlabs/butler-cw: Cache warming for Qlik Sense. Proactively load Sense apps into memory in order to minimise load time and maximise user experience

Qlik Scalability Tools

Performance and scalability in Qlik Sense Enterprise ‒ Qlik Sense for administrators

Cache Initializer

GitHub - eapowertools/CacheInitializer: Active - A tool for Qlik Sense to cache warm applications to RAM

Bis jetzt habe ich nur mit dem Cache Initializer gearbeitet. Aus dem Grund, das Cache Initializer ist Open-source und kostenlos und sehr einfach zu bedienen. Weiterer Vorteil ist das Tool macht nur das, nichts sonst!

Wird noch ein Testing oder andere Funktionen benötigt, dann wäre der Butler oder das Qlik Scalability Tool eine bessere Lösung.

Aufruf des Cache Initializers

Der Cacheinizialiser wird auf dem Qlik Sense Central Node installiert (hin kopiert), am besten in ein Ordner der geteilt ist. Wichtig ist das der Qlik Sense Service User eine Applikation starten kann in dem Ordner. Unten ist ein Beispiel Aufruf für den Cache Initializer abgebildet.

CacheInitializer.exe" -s https://deinQlikServer.local/ -i d456c609-5ae6-4be2-86eb-9bf6db2580ac --proxy warmernode2 -o

Parameter des Cacheinizialisers

Parameter

Beschreibung

--help

Hilfe zum Cache Initializer

-s, --server

Name des Servers, Adresse zum Server
z.B.https://meinQlikSenseServer.local

-a, --appname

Name der App aus der QMC, wenn sie Leerzeichen hat, muss der Name mit Doppelten Anführungszeichen (") begrenzt werden

-i, --appid

Hier kann die App-ID aus Qlik Sense verwendet werden, bitte nicht App-ID und App Name verwenden
Tipp: Immer App ID verwenden

-p, --proxy

Virtueller Proxy der verwendet werden soll.
Der Proxy muss zwingend SSO erlauben, sonst geht es nicht!

-o, --objects

Mit dem Parameter werden alle Objekt und Felder einmal aufgerufen,
per Default ist der Parameter nicht gesetzt.

Tipp: Dieser Parameter ist mehr oder weniger zwingend, sonst bringt es nicht so viel.

-f, --field

Felder die selektiert werden sollen, es kann ein Feld definiert werden.
z.B. Feld Land

-v, --values

Wenn das Feld selektiert wurde, müssen nun noch die Werte definiert werden, hier können ein oder mehrere Werte eingegeben werden.

z.B. "France","Germany","Spain"

 

Cacheinizialiser mit Qlik Sense ausführen

Nun kommt das wichtigste an dem Cach Initializer, dieser kann direkt nach dem laden der Daten ausgeführt werden.
Dazu wird in Qlik Sense ein Externer Task gestartet (das geht seit der Version Februar 2020). Dieser Task startet den Cache Initializer. Dieser Task kann wie jeder andere Task in Qlik Sense in der Task-Kette eingefügt werden.

 Parameter des Tasks

Parameter

Beschreibung

Name

Frei wählbar, ich habe immer angefangen mit Cache Warming und dann den App-Namen

Path

Ist cmd.exe

Parameters

Diese sind die Parameter für die cmd.exe
Wurde weiter oben schon beschrieben.

Enabled

immer angehakt lassen, sonst läuft nichts

Task session timeout (minutes)

Wann läuft der Task ab, nur wichtig wenn mehrere Vorgänger Tasks vorhanden sind, muss nichts angepasst werden

Max retries

Maximale Anzahl Versuche bei Abbruch, 0 ist Default, dann versucht er es 5 mal

Triggers

Die sind wie bei den anderen Tasks, wann soll der Task ausgeführt werden. Es können auch mehrere Trigger sein.
Das wäre spannend wenn die App nur einmal in der Woche geladen wird, aber täglich im Cache sein soll.

Das wichtigste am Aufruf des Cache Initializers ist das er nicht direkt aufgerufen werden kann aus Qlik Sense. Aus Qlik Sense wir ein Commandline (cmd.exe) gestartet und aus dem der Cache Initializer aufgerufen.

Damit das klappt, müssen die Parameter der CMD.exe App etwas spezieller aufbereitet sein. Dazu ein Beispiel unten.

/C "\\deinServer.local\Pfad\zum\cachinitializer\CacheInitializer.exe" -s https://deinQlikServer.local/ -i d456c609-5ae6-4be2-86eb-9bf6db2580ac --proxy warmernode2 -o

Welcher Parameter für was steht ist weiter oben beschrieben, wichtig ist das /C am Anfang. Sonst klappt das nicht mit dem Aufruf. Wenn das alles gemacht ist, kann der Task gespeichert und geschedult werden. Je nach dem wann der Task ausgeführt werden soll gibt es ein oder mehrere Triggers für den Task.