Optimieren der App-Leistung
Mit einer geringeren App-Größe, vereinfachten Datenmodellen und der strategischen Nutzung der Aggregierung mit Auswahlformeln lässt sich die App-Leistung steigern. In diesem Abschnitt erfahren Sie, wie Sie Leistungsprobleme vermeiden können, indem Sie auf Bereiche achten, die zu einer Beeinträchtigung der Leistung führen können. Zudem wird gezeigt, wie Sie die App-Leistung bewerten und überwachen können.
App-Komplexität
Diese nicht fest definierten Kategorien können Sie bei der Diagnose von Problemen unterstützen. Je komplexer die Apps, desto geringer ist ihre Leistung.
Einfache Apps:
- Enthalten keine Aggregierung mit Auswahlformeln oder If()-Anweisungen.
- Enthalten keine großen Tabellen.
- Nutzen ein einfaches Datenmodell.
- Enthalten einfache Berechnungen.
- Können große Datenmengen umfassen.
Mäßig komplexe Apps:
- Enthalten ein Datenmodell mit vielen Tabellen, befolgen aber Best Practices.
- Verwenden Aggregierung mit Auswahlformeln und mehrere If()-Anweisungen.
- Enthalten große oder breite Tabellen in Arbeitsblättern (mindestens 15 Spalten).
Komplexe Apps:
-
Weisen ein sehr komplexes Datenmodell auf.
- Stellen Verbindungen zu großen Datenmengen her.
- Enthalten komplexe Berechnungen, Diagramme und Tabellen.
App-Details
Für Ihre Hardware-Umgebung müssen Sie die App-Größe berücksichtigen, da diese sich auf die Leistung Ihrer Qlik Sense Bereitstellung auswirkt. Wenn Sie beispielsweise Ihre Apps nicht optimieren, benötigen diese mehr Hardwareressourcen.
Die Überwachung der App-Größe unterstützt Sie bei Folgendem:
- Verstehen der aktuellen Leistung
- Verstehen, welche Auswirkung die Bereitstellung einer neuen App auf die Leistung hat
- Verstehen, welche Auswirkung die Änderung einer vorhandenen App auf die Leistung hat
- Beheben von Leistungsproblemen
- Planen von zukünftigem Wachstum
Qlik stellt Tools bereit, mit denen Sie Ihre Apps beurteilen können. Weitere Informationen finden Sie unter: Leistung und Skalierbarkeit in Qlik Sense Enterprise (nur auf Englisch).
Die folgenden grundlegenden App-Elemente können die Leistung beeinflussen:
Funktion | Beschreibung |
---|---|
App-Festplattengröße (MB) | Die App-Größe finden Sie in der QMC. Gehen Sie zu Apps und öffnen Sie die Spaltenauswahl rechts neben Aktionen. Klicken Sie auf das Optionsfeld neben Dateigröße (MB). Wenn Sie Qlik Sense Desktop verwenden, finden Sie die App-Größe in Windows Explorer. Der Standardordner ist %USERPROFILE%\Documents\Qlik\Sense\Apps. Im Ordner Apps sind alle App-Namen und Dateigrößen aufgeführt. |
App-Größe in RAM (GB) |
Den RAM-Basis-Footprint einer App ermitteln Sie wie folgt:
Nutzen Sie den App Metadata Analyzer zum Ermitteln dieser Metrik, wenn Sie mit Qlik Sense June 2018 oder höher arbeiten. Weitere Informationen finden Sie unter App Metadata Analyzer (nur auf Englisch). |
Gesamtzeilenzahl der App (M) |
Anhand von Systemfeldern können Sie die Gesamtzeilenzahl berechnen. Erstellen Sie einen KPI mit der Kennzahl Sum($Rows). Weitere Informationen finden Sie unter Systemfelder. |
Gesamtfelderzahl der App | Anhand von Systemfeldern können Sie die Gesamtfelderzahl berechnen. Erstellen Sie einen KPI mit der Kennzahl Sum($Fields). Weitere Informationen finden Sie unter Systemfelder. |
Gesamttabellenzahl der App | Anhand von Systemfeldern können Sie die Gesamttabellenzahl berechnen. Erstellen Sie einen KPI mit der Kennzahl Count(DISTINCT $Table). Weitere Informationen finden Sie unter Systemfelder. |
Überwachen der App
Die Qlik Management Console (QMC) enthält Apps zur Überwachung der Systemleistung und -auslastung in Qlik Sense Enterprise on Windows:
-
Die Operations Monitor-App stellt Informationen über Hardwarenutzung wie Serverspeicher und CPU-Auslastung, aktive Benutzer und Ladeaufgabenaktivitäten bereit. Zudem werden eine Zusammenfassung und detaillierte Informationen zu Fehlern, Warnungen und Protokollaktivitäten in der Qlik Sense-Serverumgebung bereitgestellt.
-
Die License Monitor-App verfolgt die Lizenznutzung nach und überwacht Änderungen an der Lizenzzuweisung.
- Die Log Monitor-App zeigt praktisch alle verfügbaren Protokolldaten und ermöglicht Trendanalysen und Fehlerbehebung.
- Die Sessions Monitor-App zeigt Protokolldaten zur Nutzung von Apps.
- Die Reloads Monitor-App zeigt detaillierte Informationen zu Ladedaten, sowohl über die QMC als auch über im Hub geöffnete Apps.
- Die Sense System Performance Analyzer-App zeigt die Leistung von Qlik Sense über alle Knoten hinweg.
- Die Sense Connector Logs Analyzer-App bietet Einblicke in die Auslastung und Fehler spezifischer Qlik-Konnektoren.
- Die App Metadata Analyzer-App bietet eine ganzheitliche Ansicht aller Ihrer Qlik Sense Apps, einschließlich umfassender Details eines App-Datenmodells und seiner Ressourcennutzung.
Weitere Informationen finden Sie unter Überwachen einer Qlik Sense Enterprise on Windows-Site (nur auf Englisch).
Große Datenmengen
Diese Architekturstrategien können Sie verwenden, wenn Sie eine Verbindung zu großen Datenmengen herstellen.
Segmentierung
Sie können QVDs nach Dimensionen wie Zeitrahmen, Region oder Aggregierungsebene segmentieren. Beispiel: Sie verfügen über die folgenden Dateien:
- Eine QVD, die Daten der letzten zwei Jahre enthält.
- Eine QVD, die Verlaufsdaten für einen längeren Zeitraum als zwei Jahre enthält.
-
Eine QVD, die alle auf einer höheren Ebene aggregierten Daten enthält. Beispielsweise wurde nach Monat statt nach Datum oder nach Land statt nach einzelnen Kunden aggregiert.
- Eine große QVD mit allen Daten, die nur von einem kleinen Teil der Benutzer verwendet wird.
Auf ähnliche Weise können Sie die App segmentieren. Kleinere Apps reichen für den Analysebedarf der meisten Benutzer aus. Dadurch lassen sich Kosten einsparen.
Sie können auch mehrere Apps mit Schwerpunkten auf verschiedene Regionen haben. So brauchen die Benutzer keine App mit Daten zu öffnen, an denen sie kein Interesse oder für die sie keine Zugriffsberechtigung haben. Auch Daten, auf die nicht über Abschnittszugriff zugegriffen werden kann, benötigen Arbeitsspeicher.
Generierung von On-Demand-Apps (ODAG)
In Qlik Sense On-Demand-Apps erhalten die Benutzer zusammenfassende Ansichten von großen Datenspeichern. Sie können die relevanten Teilmengen der Daten identifizieren und für eine detaillierte Analyse laden.
Aus Benutzerperspektive gibt es zwei Apps:
- Einen Einkaufswagen mit aggregierten Daten.
- Eine leere Vorlagen-App, in der Details angezeigt werden können.
Der Benutzer trifft Auswahlen in der Einkaufswagen-App. Nachdem ein Schwellenwert erreicht ist, wird ein benutzerdefiniertes LOAD-Skript erstellt, das die Vorlagen-App mit den angeforderten Details füllt. Weitere Informationen finden Sie unter Big Data mit On-Demand-Apps verwalten.
Anwendungsverkettung
Anwendungsverkettung (in QlikView als Dokumentverkettung bezeichnet) bedeutet, dass eine aggregierte App vorhanden ist, die von den Benutzern regelmäßig genutzt wird.Wenn ein Benutzer weitere Details benötigt, können Auswahlen von der aggregierten App an eine Detail-App übergeben werden, wo die Daten auf einer detaillierteren Granularitätsebene angezeigt werden können. Dadig genuurch wird Arbeitsspeicher gespart, weil die Benutzer keine unnötig detaillierten Daten laden. Zur Anwendungsverkettung fügen Sie Schaltflächenobjekte zu einem Arbeitsblatt hinzu. Weitere Informationen finden Sie unter Schaltfläche.
Anwendungsverkettung wird auch über APIs unterstützt. Beispielsweise können Sie die App Integration API verwenden, um benutzerdefinierte Anwendungsverkettung zu erstellen. Weitere Informationen finden Sie unter App Integration API (nur auf Englisch).
Leistung des Datenmodells
Diese Indikatoren können sich auf die Leistung des Datenmodells auswirken. Jeder ist eine Best Practice, die die Nutzbarkeit der App verbessert.
Aktion | Beschreibung |
---|---|
Synthetische Schlüssel entfernt |
Qlik Sense erstellt synthetische Schlüssel, wenn zwei oder mehr Datentabellen zwei oder mehr gemeinsame Felder haben. Das kann bedeuten, dass ein Fehler im Skript oder im Datenmodell vorliegt. Informationen zur Diagnose von synthetischen Schlüsseln finden Sie unter Synthetische Schlüssel. |
Zirkelbezüge aus Datenmodell entfernt |
Zirkelbezüge treten auf, wenn zwei Felder mehr als eine Zuordnung aufweisen. Qlik Sense versucht, diese aufzulösen, indem die Verbindung zu einer der Tabellen geändert wird. Es sollten jedoch alle Zirkelbezugwarnungen gelöst werden, siehe Zirkelbezüge und Auflösen von Zirkelbezügen. |
Geeignete Datengranularität |
Sie sollten nur die benötigten Daten laden. Beispiel: Eine Gruppe von Benutzern benötigt nur Daten aufgeteilt nach Woche, Monat und Jahr. Sie können entweder die aggregierten Daten laden oder die Daten innerhalb des Ladeskripts aggregieren, um Arbeitsspeicher zu sparen. Wenn ein Benutzer Daten auf einer detaillierteren Granularitätsebene visualisieren muss, können Sie ODAG oder Dokumentverkettung verwenden. |
QVDs nach Möglichkeit verwendet |
Eine QVD-Datei enthält Datentabellen, die aus Qlik Sense exportiert wurden. Dieses Dateiformat ist für schnelles Einlesen von Daten aus einem Skript optimiert, aber dennoch sehr kompakt. Das Einlesen von Daten aus QVD-Dateien ist etwa 10-100 Mal schneller als das Einlesen aus anderen Datenquellen. Weitere Informationen finden Sie unter Arbeiten mit QVD-Dateien. |
Beim Laden optimierte QVD-Dateien |
QVD-Dateien können in zwei Modi gelesen werden: Standard (schnell) und optimiert (schneller). Der ausgewählte Modus ergibt sich automatisch aus dem Skriptmodul. Das optimierte Laden unterliegt bestimmten Einschränkungen. Es ist möglich, Felder umzubenennen, aber mit allen folgenden Vorgängen wird das Standardladen ausgeführt:
|
Nutzen des inkrementellen Ladens |
Wenn Ihre App eine Verbindung mit großen Datenmengen aus Datenbanken herstellt, die kontinuierlich aktualisiert werden, dann kann das erneute Laden des gesamten Datenbestands zeitaufwändig sein. Verwenden Sie stattdessen inkrementelles Laden, um neue oder geänderte Datensätze aus der Datenbank abzurufen. Weitere Informationen finden Sie unter Laden von neuen und aktualisierten Datensätzen mit inkrementellem Laden. |
Konsolidiertes Snowflake -Modell |
Wenn Sie mit einem Snowflake-Datenmodell arbeiten, können Sie möglicherweise die Anzahl der Datentabellen verringern, indem Sie einige von ihnen mit dem Präfix Join oder mit einer anderen Zuordnung verknüpfen. Dies ist besonders bei großen Faktentabellen von Bedeutung. Als generelle Regel sollte nur eine große Tabelle verwendet werden. Weitere Informationen finden Sie unter To Join or Not to Join (Verknüpfen oder nicht verknüpfen). |
Tabellen mit einer kleinen Anzahl Felder sind denormalisiert |
Wenn Sie zwei Tabellen mit wenigen Feldern haben, kann die Leistung besser werden, wenn Sie sie verknüpfen. Weitere Informationen finden Sie unter Nächste Schritte bei der Skripterstellung. |
Denormalisierte Lookup-(Leaf-)Tabellen mit Zuordnungs-Ladevorgängen |
Sie sollten den Zusatz Join nicht verwenden, wenn Sie nur ein Feld aus einer Tabelle in einer anderen Tabelle hinzufügen möchten. Dafür sollten Sie die Lookup-Funktion ApplyMap verwenden, siehe Don't join - use ApplyMap (Nicht verknüpfen - ApplyMap verwenden). |
Entfernte oder vom Datumsfeld entkoppelte Zeitstempel |
Datumsfelder können viel Platz belegen, wenn der Zeitstempel vorhanden ist, da die Zeichenfolgendarstellung und die Anzahl der distinkten Werte größer sind. Wenn die Präzision für Ihre Analyse nicht erforderlich ist, können Sie den Zeitstempel beispielsweise auf die nächste Stunde runden, indem Sie Timestamp(Floor(YourTimestamp,1/24)) verwenden, oder die Zeitkomponenten mit Date(Floor(YourTimestamp)) vollständig entfernen. Wenn Sie den Zeitstempel verwenden möchten, können Sie ihn vom Datum entkoppeln. Verwenden Sie die gleiche Floor()-Funktion und erstellen Sie dann ein neues Feld mit der extrahierten Zeit, in etwa wie folgt: Time(Frac(YourTimestamp)). |
Unnötige Felder aus dem Datenmodell entfernt |
Laden Sie nur erforderliche Felder in Ihr Datenmodell. Vermeiden Sie die Verwendung von Load * und SELECT. Folgende Felder müssen Sie beibehalten:
|
Link-Tabellen bei Handhabung großer Datenmengen vermieden |
Sie sollten sooft wie möglich Link-Tabellen verwenden. Bei großen Datenmengen können zusammengefasste Tabellen jedoch eine bessere Leistung als Link-Tabellen aufweisen. |
Zusammengefasste Dimensionen in neue Felder aufgeteilt |
Teilen Sie zusammengefasste Dimensionen in getrennte Felder auf. Dadurch wird die Anzahl der eindeutigen Vorkommen von Werten in Ihren Feldern reduziert. Das Verfahren ist ähnlich wie beim Optimieren von Zeitstempeln. |
AutoNumber nach Möglichkeit verwendet |
Sie können einen optimierten Ladevorgang erstellen, indem Sie die Daten zuerst aus einer QVD-Datei laden und dann den AutoNumber-Befehl verwenden, um die Werte in Symbolschlüssel zu konvertieren.Weitere Informationen finden Sie unter AutoNumber. |
Dateninseln vermieden |
Dateninseln können nützlich sein, beeinträchtigen aber meist die Leistung. Verwenden Sie Variablen, um Inseln für Auswahlwerte zu erstellen. |
QVDs werden in inkrementellen Zeitrahmen gespeichert |
Sie sollten QVDs in Segmenten speichern, z. B. monatlich. Diese kleineren monatlichen QVDs können dann viele verschiedene Apps unterstützen, die möglicherweise nicht alle Daten benötigen. |
Arbeitsblattleistung
Die folgenden Best Practices verbessern die Leistung von Arbeitsblättern und Visualisierungen.
Aktion | Beschreibung |
---|---|
Die If()-Funktion wird nach Möglichkeit vermieden |
Wenn die Funktion If() innerhalb einer Aggregierungsfunktion verwendet wird, funktioniert sie auf Datensatzebene und wird viele Male ausgewertet. Wenn Sie beispielsweise 1000 Datensätze in einer Aggregierung haben, wird eine If()-Bedingung 1000 Mal ausgewertet. Das kann schnell ausufern, wenn Sie Befehle verschachteln. Stattdessen sollten Sie Aggregierung mit Auswahlformeln verwenden. Ein Filter für die Aggregierung mit Auswahlformeln wird vor der Aggregierung angewendet, was die Antwortzeit verkürzt. Diese Antworten können mit Aggregierung für Auswahlformeln auch im Zwischenspeicher gespeichert werden, was mit If() nicht möglich ist. Sie können auch andere Funktionen und Änderungen am Datenmodell in Betracht ziehen. |
Felder aus unterschiedlichen Tabellen innerhalb einer Aggregierungstabelle werden nach Möglichkeit vermieden. |
Wenn eine Aggregierung bewertet wird, durchläuft die Berechnung zwei Schritte:
Der Single-Threaded-Teil kann erhebliche Auswirkungen auf die Leistung haben. Ein Beispiel sind zahlreiche Felder innerhalb einer Aggregierung, zum Beispiel Sum(Quantity*ListPrice). Wenn sich Quantity in der Fakttabelle und ListPrice in der Master-Produkttabelle befindet, muss die Engine zuerst die beiden Tabellen verknüpfen, um die Kombinationen zu suchen, bevor sie mit dem Summieren des Produkts beginnen kann. Die Verknüpfung ist der Single-Threaded-Teil, das Summieren der Multi-Threaded-Teil. Wenn beide Felder sich in der gleichen Tabelle befinden, ist keine Verknüpfung erforderlich, und die Aggregierung wird erheblich schneller ausgewertet. |
Aggr()- und verschachtelte Aggr()-Funktionen werden so selten wie möglich verwendet |
Die Aggr()-Funktion beeinträchtigt die Leistung stark. Eine falsche Nutzung kann zu ungenauen Ergebnissen führen. Das kann zum Beispiel in einer Tabelle mit Dimensionen vorkommen, die von den Dimensionen innerhalb der Aggr()-Funktion abweichen. Weitere Informationen finden Sie unter When should AGGR not be used? (Wann sollte AGGR nicht verwendet werden?) |
Aggregierung mit Auswahlformeln wird nach Möglichkeit verwendet |
Aggregierung mit Auswahlformeln bietet eine Möglichkeit, einen Satz von Datenwerten zu definieren, der sich vom normalen, durch die aktuellen Auswahlen definierten Satz unterscheidet. Weitere Informationen finden Sie unter Aggregierung mit Auswahlformeln. |
String-Vergleiche nach Möglichkeit vermieden |
String-Vergleiche sind nicht so effizient wie Aggregierung mit Auswahlformeln. Beispielsweise sollten Sie Match(), MixMatch(), WildMatch() und Pick() vermeiden. Erstellen Sie stattdessen Flags im Skript oder verwenden Sie Aggregierung mit Auswahlformeln. Weitere Informationen finden Sie unter Konditionalfunktionen und Performance of conditional aggregations (Leistung von bedingten Aggregierungen). |
Berechnungsbedingungen werden für Objekte mit umfangreichen Berechnungen verwendet |
Sie können Visualisierungen mit zahlreichen Datensätzen haben, wenn keine Auswahlen vorhanden sind. Als Best Practice können Sie Berechnungsbedingungen so zu Objekten hinzufügen, dass diese erst dann gerendert werden, nachdem bestimmte Auswahlen getroffen wurden. Damit wird die Erstellung von sehr großen Hypercubes vermieden. Hier ein Beispiel: GetSelectedCount([Country])=1 OR GetPossibleCount([Country])=1. In diesem Szenario wird die Visualisierung erst dann gerendert, wenn der Benutzer ein einziges Land auswählt bzw. andere Auswahlen trifft, für die nur ein Land möglich ist. |
Kennzahlen werden im Skript nach Möglichkeit vorab berechnet |
Alle Kennzahlen, die sich auf der niedrigsten Granularitätsebene im Datenmodell befinden, sollten im Skript berechnet werden. Wenn beispielsweise im gleichen Datensatz in einer Tabelle Sales und Cost vorhanden sind, können Sie die Marge ableiten, indem Sie Sales - Cost AS Margin berechnen. Sie können auch andere Werte vorab aggregieren, wenn Sie wissen, dass sie nicht basierend auf der Auswahl variieren oder an eine andere Granularitätsebene gebunden sind. |
Tabellen haben weniger als 15 Spalten und weisen Berechnungsbedingungen auf |
Eine Tabelle mit 15 Spalten kann als breit bezeichnet werden. Wenn Ihre Tabellen viele Datensätze enthalten, sollten Sie berechnete Bedingungen für das Tabellenobjekt verwenden, damit es erst gerendert wird, nachdem bestimmte Auswahlen oder Kriterien erfüllt sind. Wenn Ihre Tabelle sehr breit ist, haben Sie folgende Möglichkeiten:
|
Arbeitsblätter enthalten nicht zu viele Objekte |
Objekte werden berechnet, wenn der Benutzer zum Arbeitsblatt navigiert. Jedes Mal, wenn ein Benutzer eine Auswahl in diesem Arbeitsblatt trifft, wird jedes Objekt neu berechnet, dessen aktueller Status nicht im Zwischenspeicher vorhanden ist. Wenn Sie ein Arbeitsblatt mit zahlreichen Diagrammen haben, muss der Benutzer bei fast jeder Auswahl warten, bis jedes einzelne Objekt berechnet ist. Dadurch wird die Engine stark belastet. Als Best Practice sollten Sie das Konzept Dashboard/Analysis/Reporting (DAR) befolgen, um eine übersichtliche und minimale App zu erstellen. Weitere Informationen finden Sie unter DAR methodology (DAR-Methode). |
Numerische Flags werden im Skript genutzt, um sie in Aggregierung mit Auswahlformeln einzusetzen |
Aggregierung mit Auswahlformeln mit Flags kann effizienter als String-Vergleiche und Multiplikationen sein. |
Master-Elemente ermöglichen das Ziehen und Ablegen von gesteuerten Metriken und garantieren, dass Formeln im Zwischenspeicher gespeichert werden. Beispielsweise unterscheidet sich Sum(Sales) von SUM(Sales). Formeln werden mit ihrer Schreibweise (auch Groß- und Kleinschreibung) gespeichert und müssen genau übereinstimmen, damit sie wiederverwendet werden können. |