Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hello,
the distribution and publishung of qvw files is very slow.
We have 2 servers, a reload server and a server working as accesspoint.
The storage where the files are copied are nfs (SSD).
Publishing qvw files direct to the publisher to local disc is also slow (SSD).
Publishing to a normal folder is fast.
CPU and RAM are not the problems, there are always enough free ressources.
in the Task logs we found this:
(28.11.2023 17:50:01) Information: <Global method="FileWrite"><h>0</h><Pos>83886080</Pos><Buffer /></Global>
(28.11.2023 17:50:01) Information: ExecuteWithAttachments returned no data in buffer.
(28.11.2023 17:50:01) Information: <Global></Global>
The support already checked all logfiles of the operating system and the qlikview server but there were no irregular and suspicious entries.
the following tips of the support are not working or brought no improvement:
https://community.qlik.com/t5/Official-Support-Articles/Scaling-the-QlikView-Publisher/ta-p/1717686
We use the publisher in Version12.80.20000.0 on the reload server.
What could be the reason for slow distribution and are there some hints to solve this problem?
Thank you.
Guten Morgen,
über die Netzwerkverbindungen der beiden Server lief kein weiterer nennenswerter Traffic, also diese waren nicht ausgelastet. Der Reload Server schiebt von sich aus schon die Daten so langsam, das ist merkwürdig.
Ich habe jetzt einmal die logs vom Distribution Service und vom Directory Service Connector auf Debug gesetzt.
Die Windowslogs haben im Bereich Applikationen und System keine Auffälligkeiten gezeigt.
Der Netzwerkspeicher ist über NFS angebunden.
Ich habe die mir Logs entsprechend angesehen dort deutet nichts auf irgendwelche Probleme hin.
Zwischen den Servern gibt es keine Firewall Proxy etc. eine Traceroute Abfrage ergibt 1 Hop und das ist der Zielserver.
Netzwerkseitig wurde auch nichts festgestellt.
Das legt den Schluss nahe, dass nicht das Netzwerk zwischen den Servern der limitierende Faktor ist.
Wir hatten nie einen Publisher im produktiven Einsatz und nur ein recht rudimentäres Testing zu QV 8/9 Zeiten, was echt schon lange her ist. Insofern ist mir die Arbeitsweise der Distribution nicht wirklich ganz klar. Ganz vereinfacht, könnte ich mir folgendes Vorgehen vorstellen: Laden der Anwendung ohne UI in den RAM --> Duplizieren der Anwendung im RAM --> Daten-Reduktion anhand der Reduce-Felder --> Speichern des reduzierten Duplikats im Ziel --> Freigeben des Speichers --> nächste Duplette in der Reihe ...
Ich bin mir aber nicht sicher, ob das wirklich so abläuft oder das über andere Mechanismen erfolgt und inwieweit es hier irgendwelche Konfigurationsmöglichkeiten gibt und/oder ob es hier auch irgendwo Buffer-Logiken gibt. Falls es ähnlich zu meiner obigen Idee funktionieren sollte, wäre das CPU Processing doch eher gering und nur ausreichend RAM erforderlich, um die Anwendung max. zweimal im Speicher vorzuhalten. Der größte Flaschenhals wäre hierbei ganz klar das Netzwerk + Storage. Falls die Anwendung jedoch nicht im RAM dupliziert wird, sondern jedes Mal neu geladen wird, würde das den Traffic sowie das Processing erhöhen - falls auch noch irgendwo gebuffert wird, könnte sich das jedoch auch potenzieren. Hast Du hier nähere Informationen?
Die Ableitung hiervon wäre, mal zu schauen, was sich beim Processing and RAM Verbrauch tut, wenn ein Distributions-Task gestartet wird. Läuft der Task sofort an oder gibt es Wartezeiten? Wie viele Einzel-Prozesse werden gestartet? Wie viele Cores werden verwendet? Ziel ist es, irgendwelche Auffälligkeiten zu finden, wie eventuell nur eine einzelne qvb.exe läuft und nur ein einzelner Core wird verwendet oder aber multiple Prozesse werden gestartet und weisen jeweils kurze Peaks und längere Idle-Zeiten auf oder was auch immer. Für den Anfang reicht hier der Task- und/oder der Ressourcen-Manager sicher aus und falls man was findet könnte man auch noch mal mit dem Process-Monitor draufschauen.
Als am wahrscheinlichsten würde ich ein schlecht funktionierendes Buffering halten oder aber n Waiting-Times zwischen den Loops und/oder ein Queuing zwischen den Loops/Cores passieren ...
So wie ich das aus den Logs gelesen habe wird die anwendung temporär nach dem Reload gespeichert dann folgt der reduce (nutzen wir nicht) -> da würde wohl für jeden reduce eine neue Datei temporär gespeichert werden. Im Anschluss wird die temporäre Datei auf den anderen Server kopiert und dann gelöscht. Das ganze geht auch der Größe entsprechend fix, jedoch dauert dann die Übertragung auf dem anderen Server ewig.
Ich habe mir auch noch mal die CPU und Ram (16 Kerne 120Gb RAM) Auslastung angesehen. Beides ist im grünen Bereich, es werden alle Kerne genutzt und der Ram steigt gemächlich bis ca 20% Auslastung an. es gibt keine Auffälligkeiten, keine kurzen Peaks oder Idle etc. alle Kerne werden gleichmäßig genutzt. Sobald eine Distribution gestartet wird geht das los und es wird nur eine qvb.exe gestartet.
Könnte es eventuell etwas mit der Chunk Size zu tun haben?
https://community.qlik.com/t5/QlikView-Administration/QVDS-performance-and-QMSChunkSize/m-p/420124
Ich könnte dir bei Bedarf ein Tasklog File zur Verfügung stellen, da stehen so ziemlich alle Schritte drin, die vom Start bis zu der fertigen Publizierung der Anwendung durchlaufen werden. Dies möchte ich jedoch nur ungern hier hochladen.
Ich glaube eher nicht, dass die Chunk Size hier einen größeren Einfluss haben wird, denn es ja prinzipiell eine Einstellung der QMS und nicht der Distribution-Engine. Aber bei deren Settings ist vielleicht etwas, was verbogen wurde oder zur aktuellen Nutzung nicht passt.
Mach mal von der QVDistributionService.exe.config ein Backup und dann probiere mal das Eine oder Andere aus. Die jeweiligen Settings haben auch kurze Beschreibungen, wofür sie gedacht sind. Ich habe mal in meine geschaut, aber nichts gesehen, was sich direkt anbieten würde - habe wie gesagt aber auch keine Publisher im Einsatz, weswegen hier möglicherweise auch nicht alle Settings drin sind.
Wenn deine Log-Interpretation richtig ist, wird nicht direkt aus dem RAM geschrieben, sondern über eine temporäre Datei gebuffert - und bis hierhin auch alles normal läuft. Schau mal noch genau, wo dieses Verzeichnis liegt bzw. auch ob es änderbar ist - vielleicht sogar zum Ziel-Server. Hintergrund hierbei ist, dass nicht alles, was auf den ersten Blick wie ein normaler Verzeichnisbaum aussieht, auch ein zusammenhängendes Storage ist, sondern vielleicht aus multiplen Bausteinen besteht. Und in diesem Zusammenhang auch, ob vielleicht irgendeine Synchronisation im Hintergrund mitläuft (irgendwelche externen Backup-Logiken oder shadow copies oder auch ein Sync zu Onedrive oder ähnliches, falls sich das Buffer-Verzeichnis im User-Verzeichnis befindet).
Guten Morgen,
ich habe das gestern noch mit der Chunk Size getestet gebracht hat es nichts.
Die Settings in der QVDistributionService.exe.config sind weitest gehend auf Standard gestellt (bis auf das extreme Debugging).
Ich habe eventuell 2 Dinge gefunden allerdings weiß ich nur bedingt was die bedeuten DMS_FileOperationsBufferSize und NTFS_FileOperationsBufferSize beide haben den Wert 5242880 in Bytes. Google konnte mir dazu leider auch nichts sagen
Ich habe geprüft wo das Verzeichnis für die temporären QVWs liegt, das ist lokal auf Laufwerk C:\QlikTempFolder dieser Pfad lässt sich in der QVDistributionService.exe.config ändern. Aber da es lokal ist sollte dies eigentlich keine Probleme machen.
Schattenkopie ist deaktiviert irgendwelche Syncs, Backups etc laufen nicht.
Gibt es vielleicht irgendwelche Einstellungen für virtuelle Maschinen, da beide Server virtualisiert sind?
VM settings und auch multiple BIOS / OS settings der virtualisierten Systeme können einen Einfluss haben. Jedoch würde ich dann eher erwarten, dass es an mehreren Stellen in der Umgebung zu Performance-Auffälligkeiten kommt und nicht nur im letzten Schritt der Distribution. In früheren Jahren gab es ziemlich viele Probleme in der Kommunikation zwischen den multiplen Cores sowie der OS + Anwendungsebene im Allgemeinen und dann auch noch zum Host der VM, mittlerweile ist das aber alles Standard und massive Performance-Einbrüche in den Default-Settings nicht zu erwarten. Nichtsdestotrotz schau mal, ob die VM's ihren eigenen dedizierten Bereich an Cores + RAM haben, denn das Teilen der Ressourcen mit Dritt-Anwendungen kann durchaus zu Problemen führen. Auch Hyper-Threading und NUMA bergen Risiken hinsichtlich der Performance.
Mit den FileOperationsBufferSize Settings könnte man auch mal testen, glaube aber nicht, dass sie größere Wirkungen haben. Spannender fände ich schon, das Temp-File-Verzeichnis mal zu verschieben, falls vorhanden auf ein anderes lokales Laufwerk und auch zu einem Netz-Laufwerk.
Ein komplett anderer Versuch wäre, mal das komplette Logging zu deaktivieren und/oder auf Low zu setzen und/oder den Log-Split von monatlich auf täglich zu ändern bzw. genau umgekehrt und/oder auch die bestehenden Logs zu entfernen (nach einem BACKUP). Denn das Logging ist definitiv ein parallel laufender Prozess und wenn der klemmt, weil die Files zu groß sind und/oder multiple Male geöffnet + gespeichert werden oder das/der Storage/Traffic hier langsam ist und ähnliches - könnte das auch den Hauptprozess massiv ausbremsen.
Guten Morgen Marcus,
Die VM Einstellungen sind leider nicht optimal NUMA ist aktiviert auch CPU und RAM sind nicht dediziert, dies lässt sich wohl auch nur für das gesamte Hostsystem ändern. Ich kann mir das schwer als Grund bei der geringen Datenübertragung vorstellen.
Mit den FileOperationsBufferSize Settings habe ich getestet, das hat überhaupt nichts bewirkt. auch die Änderung des Temp Verzeichnisses hat keine Auswirkungen gehabt.
Ich habe den Ordner der Log Files vom Distribution Service einmal umbenannt. Leider hat das auch nichts gebracht.
Ich denke, diese Host-Settings sollten mal bei Gelegenheit angepasst werden, denn sie sind auf jeden Fall nicht der Performance zuträglich und immer auch ein potentielles Risiko - wenn die ursprünglich reservierten Ressourcen nicht mehr vorhanden sind und/oder verschoben wurden. Als wesentlichen Grund für die langsame Distribution erscheint es aber unwahrscheinlich, denn insbesondere bei Anwendungen > 5 GB müssten auch sonst größere Auffälligkeiten in der Performance/Caching beim Reload und im Access Point auftreten.
Neben dem Logging vom Distribution Services, schau auch mal zu den Task-und Document-Logs sowie auch zu den Event/Application/Performance/Session-Logs, denn es wird auf jeden Fall in mehrere Log-Bereiche geschrieben und diese inter-agieren auch miteinander. Daher oben auch der Hinweis, das komplette Logging zu betrachten. So wirklich trivial ist es nicht - falls ihr mit dem Process Monitor gut vertraut seid, ist vielleicht auch einfacher, erst hier nach parallelen Tasks zur Distribution zu schauen. Ansonsten könnte man auch noch direkt in die multiplen Setting-Files der Services gehen und schauen, welche Settings zum Logging gehören könnten - insbesondere zu Timeouts und/oder Frequenz der Eintragungen und/oder ob sofort/hinterher geschrieben wird und/oder irgendwelche Buffer-Einstellungen.
Die Hostsettings können nicht angepasst werden da noch andere virtuelle Maschinen auf dem Hosts laufen. Performance oder andere Probleme in Bezug auf RAM oder CPU haben wir nicht.
Ich habe noch viel mit den Logs herum probiert, doch leider hat dies alles nicht geholfen.