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
Qlik Scalability Tools
Performance and scalability in Qlik Sense Enterprise ‒ Qlik Sense for administrators
Cache Initializer
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 |
-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 |
-p, --proxy |
Virtueller Proxy der verwendet werden soll. |
-o, --objects |
Mit dem Parameter werden alle Objekt und Felder einmal aufgerufen, 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. |
-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 |
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 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.