Applicatieprestaties optimaliseren
Applicatieprestaties kunnen worden verbeterd door een verminderde applicatiegrootte, vereenvoudigde gegevensmodellen en strategisch gebruik van set-analyses. In deze sectie wordt aangeduid welke factoren invloed hebben op prestaties om u te helpen prestatieproblemen te voorkomen en u in staat te stellen de applicatieprestaties te evalueren en bewaken.
Applicatiecomplexiteit
Dit zijn losse categorieën die kunnen helpen om problemen vast te stellen. De meest complexe applicaties hebben de laagste prestaties.
Eenvoudige applicaties:
- Bevatten geen complexe set-analyse of If()-statements.
- Bevatten geen grote tabellen.
- Hebben een simpel gegevensmodel.
- Bevatten eenvoudige berekeningen.
- Kunnen een grote hoeveelheid gegevens bevatten.
Gemiddelde applicaties:
- Bevatten een gegevensmodel met veel tabellen, maar de beste praktijken zijn in acht genomen.
- Maken gebruik van set-analyses en verschillende If()-statements.
- Bevatten grote of brede tabellen op werkbladen (15 kolommen of meer).
Complexe applicaties:
-
Bevatten een zeer complex gegevensmodel.
- Zijn gekoppeld met een grote hoeveelheid gegevens.
- Bevatten complexe berekeningen, diagrammen en tabellen.
Applicatiedetails
U moet rekening houden met uw hardware-omgeving met betrekking tot applicatiegrootte, omdat dit invloed heeft op de prestaties van uw implementatie van Qlik Sense. Als u bijvoorbeeld uw applicaties niet optimaliseert, zijn er mogelijk meer hardwarebronnen vereist.
De applicatiegrootte bewaken helpt u bij het volgende:
- Huidige prestaties begrijpen.
- De prestatie-impact van het implementeren van een nieuwe applicatie begrijpen.
- De prestatie-impact van het aanpassen van een bestaande applicatie begrijpen.
- Prestatieproblemen oplossen.
- Plannen maken voor toekomstige groei.
Qlik biedt u de middelen om uw applicaties te evalueren. Ga voor meer informatie naar Prestaties en schaalbaarheid in Qlik Sense Enterprise (alleen in het Engels).
Dit zijn de basisappelementen die de prestaties kunnen beïnvloeden:
| Functie | Beschrijving |
|---|---|
| Schijfgrootte (MB) van de applicatie | U vindt de applicatiegrootte in de QMC. Ga naar Apps en open deKolomkiezer aan de rechterkant naast Acties. Klik op de radioknop naast Bestandsgrootte (MB). Als u Qlik Sense Desktop gebruikt, vindt u de app-grootte in Windows Explorer. De standaardmap is %USERPROFILE%\Documents\Qlik\Sense\Apps. In de map Apps worden alle applicatienamen en bestandsgroottes weergegeven. |
|
Applicatie-grootte in RAM (GB) |
U kunt de RAM-voetafdruk van een applicatie bepalen door:
U kunt de App Metadata Analyzer gebruiken om deze metrische gegevens te vinden als u Qlik Sense van juni 2018 of hoger gebruikt. Ga voor meer informatie naar Application Metadata Analyzer (alleen in het Engels). |
|
Totaal aantal rijen van de applicatie (M) |
U kunt systeemvelden gebruiken om het totaal aantal rijen te berekenen. Maak een KPI met de meting Sum($Rows). Zie Systeemvelden voor meer informatie. |
| Totaal aantal velden van de applicatie | U kunt systeemvelden gebruiken om het totaal aantal velden te berekenen. Maak een KPI met de meting Sum($Fields). Zie Systeemvelden voor meer informatie. |
| Totaal aantal tabellen van de applicatie | U kunt systeemvelden gebruiken om het totaal aantal tabellen te berekenen. Maak een KPI met de meting Count(DISTINCT $Table). Zie Systeemvelden voor meer informatie. |
Uw applicatie bewaken
De Qlik Beheerconsole (QMC) biedt apps voor het bewaken van systeemprestaties en -gebruik in Qlik Sense Enterprise on Windows:
-
De Operations Monitor-applicatie biedt informatie over hardwaregebruik, zoals servergeheugen en CPU-gebruik, actieve gebruikers en taken voor opnieuw laden. De app biedt ook een samenvatting en uitvoerige informatie over fouten, waarschuwingen en logactiviteiten in de Qlik Sense-serveromgeving.
-
De License Monitor-applicatie houdt het licentiegebruik bij en vergemakkelijkt het toezicht op wijzigingen in licentietoewijzing.
- De Log Monitor applicatie toont bijna alle beschikbare logboekgegevens en maakt trendanalyse en probleemoplossing mogelijk.
- De Sessions Monitor applicatie toont logboekgegevens over het gebruik van applicaties.
- De Reloads Monitor-applicatie toont gedetailleerde informatie over opnieuw geladen gegevens, zowel van de QMC als van applicaties die in de hub zijn geopend.
- De Sense System Performance Analyzer applicatie toont prestaties van Qlik Sense voor alle knooppunten.
- De Sense Connector Logs Analyzer-applicatie biedt inzichten in het gebruik en fouten van specifieke Qlik-connectoren.
- De App Metadata Analyzer-applicatie biedt een holistische weergave van al uw Qlik Sense-applicaties, inclusief de gedetailleerdheid van het gegevensmodel van een applicatie en het gebruik van bronnen.
Ga voor meer informatie naar Een Qlik Sense Enterprise on Windows-site bewaken (alleen in het Engels).
Grote hoeveelheid gegevens.
U kunt deze strategieën voor de architectuur toepassen wanneer u een grote hoeveelheid gegevens koppelt.
Segmentatie
U kunt QVDs op dimensies segmenteren, zoals tijdsbestek, regio of aggregatieniveau. U hebt bijvoorbeeld de volgende elementen:
- Een QVD die gegevens bevat van de afgelopen twee jaar.
- Een QVD die historische gegevens bevat die ouder zijn dan twee jaar.
-
Een QVD die alle gegevens bevat die op een hoger niveau zijn geaggregeerd. Bijvoorbeeld per maand in plaats van per datum, of per land in plaats van afzonderlijke klanten.
- Eén grote QVD met alle gegevens, die alleen wordt gebruikt door een kleine subset gebruikers.
U kunt de applicaties op een soortgelijke manier segmenteren. Kleinere applicaties zullen voldoen aan de analytische behoeften van de meeste gebruikers. Dit bespaart geheugen.
U kunt ook meerdere applicaties hebben die gericht zijn op verschillende regio's. Op deze manier openen gebruikers geen applicatie met gegevens waarin ze niet geïnteresseerd zijn of waartoe ze geen toegangsrechten hebben. Gegevens die niet toegankelijk zijn via sectietoegang hebben toch invloed op het geheugen.
On-Demand Applicatiegeneratie (ODAG)
Qlik Sense on-demand applicaties bieden gebruikers samengevoegde weergaven van big data-archieven. Ze kunnen relevante subsets van de gegevens identificeren en laden voor een uitgebreide analyse.
Vanuit het oogpunt van de gebruiker zijn er twee applicaties:
- Een winkelmandje met geaggregeerde gegevens.
- Een lege sjabloonapplicatie die wordt gebruikt om details weer te geven.
De gebruiker maakt selecties in de winkelwagenapplicatie. Zodra een drempel is bereikt, wordt een aangepast LOAD-script gemaakt dat de sjabloonapplicatie vult met de aangevraagde details. Voor meer informatie, zie Big data beheren met on-demand applicaties.
Applicaties koppelen
Applicatiekoppeling (bekend als documentkoppeling in QlikView 12) betekent dat er een geaggregeerde applicatie is die gebruikers regelmatig gebruiken. Als een gebruiker meer details nodig heeft, kunnen selecties van de geaggregeerde applicatie aan een detail-applicatie worden doorgegeven, zodat hij een lager niveau van gedetailleerdheid kan bekijken. Dit bespaart geheugen, omdat gebruikers niet onnodige details laden. Het koppelen van applicaties kan worden uitgevoerd door knopobjecten toe te voegen aan een werkblad. Ga voor meer informatie naar Applicaties koppelen.
Het koppelen van applicaties wordt ook ondersteund door APIs. U kunt bijvoorbeeld de App-integratie API gebruiken om applicaties aangepast te koppelen. Ga voor meer informatie naar App-integratie API (alleen in het Engels).
Prestaties van een gegevensmodel
Dit zijn indicatoren die van invloed kunnen zijn op de prestaties van een gegevensmodel. Elke is een best practice die de bruikbaarheid van de applicatie zal verbeteren.
| Actie | Beschrijving |
|---|---|
|
Synthetische sleutels zijn verwijderd |
Qlik Sense maakt synthetische sleutels als in twee of meer gegevenstabellen twee of meer velden gelijk zijn. Dit betekent dat er in het script of het gegevensmodel een fout aanwezig is. Zie Synthetische sleutels voor het diagnosticeren van synthetische sleutels. |
|
Cirkelreferenties die uit een gegevensmodel zijn verwijderd |
Cirkelreferenties ontstaan wanneer twee velden over meer dan één koppeling beschikken. Qlik Sense zal proberen deze op te lossen door de verbinding naar een van de tabellen te wijzigen. Echter, alle waarschuwingen voor cirkelreferenties moeten worden opgelost, zie Cirkelreferenties begrijpen en oplossen. |
|
Juiste gedetailleerdheid van gegevens |
U moet alleen noodzakelijke gegevens laden. Bijvoorbeeld: voor een groep gebruikers hoeven gegevens alleen te worden gesorteerd op week, maand en jaar. U kunt de geaggregeerde gegevens inladen of de gegevens binnen het load-script aggregeren om geheugen te besparen. Als een gebruiker gegevens met minder gedetailleerdheid wil visualiseren, kunt u ODAG of documentkoppeling gebruiken. |
|
Gebruik indien mogelijk QVDs |
Een QVD is een bestand dat een tabel bevat met gegevens die vanuit Qlik Sense zijn geëxporteerd. De bestandsindeling is geoptimaliseerd om snel gegevens in een script te kunnen lezen, maar is toch zeer compact. Gegevens uit een QVD-bestand worden 10-100 keer sneller gelezen dan gegevens uit een andere gegevensbron. Voor meer informatie, zie: Werken met QVD-bestanden. |
|
Optimaliseer QVD-bestanden voor laden |
QVD-bestanden kunnen in twee modi worden gelezen: standaard (snel) en geoptimaliseerd (sneller). De geselecteerde modus wordt automatisch bepaald door de script-engine. Geoptimaliseerd laden heeft enkele beperkingen. Het is mogelijk om de naam van velden te wijzigen, maar deze bewerkingen resulteren in standaard laden:
|
|
Incrementeel laden toepassen |
Als uw applicatie verbinding maakt met een grote hoeveelheid gegevens uit databases die continu worden bijgewerkt, kan het opnieuw laden van de gehele gegevensverzameling tijdrovend zijn. Gebruik in plaats daarvan incrementeel laden om nieuwe of gewijzigde records op te halen uit de database. Zie voor meer informatie Nieuwe en bijgewerkte records laden via incrementeel laden. |
|
Snowflake -model wordt geconsolideerd |
Als u een Snowflake-gegevensmodel hebt, kunt het aantal gegevenstabellen verminderen door enkele ervan samen te voegen met het prefix Join of andere toewijzingsvormen. Dit komt met name van pas bij grote feitentabellen. Een goede vuistregel is om gebruik te maken van één grote tabel. Ga voor meer informatie naar Wel of niet samenvoegen. |
|
Tabellen met een klein aantal velden worden gedenormaliseerd |
Als u twee tabellen met enkele velden hebt, kunt u deze samenvoegen om de prestaties te verbeteren. Ga voor meer informatie naar Volgende stappen in scriptgebruik. |
|
Gedenormaliseerde opzoektabellen met toegewezen ladingen |
Gebruik het Join -prefix niet als u slechts één veld van een tabel aan een andere tabel wilt toevoegen. Gebruik de ApplyMap-opzoekfunctie, zie Niet samenvoegen - gebruik ApplyMap. |
|
Tijdstempels die zijn verwijderd of ontkoppeld van een datumveld |
Gegevensvelden kunnen ruimte innemen als er gebruik wordt gemaakt van een tijdstempel. De tekenreeks en het aantal afzonderlijke waarden zijn dan groter. Als nauwkeurigheid niet geboden is voor uw analyse, kunt u het tijdstempel bijvoorbeeld naar boven afronden op het hele uur met behulp van Timestamp(Floor(YourTimestamp,1/24)) of het tijdelement volledig verwijderen met behulp van Date(Floor(YourTimestamp)). Als u gebruik wilt maken van de tijdstempel, kunt u deze van de datum loskoppelen. U kunt dezelfde Floor()-functie gebruiken en vervolgens een nieuw veld maken met de geëxtraheerde tijd door bijvoorbeeld het volgende toe te passen: Time(Frac(YourTimestamp)). |
|
Niet-noodzakelijke velden uit gegevensmodel verwijderen |
Laad alleen noodzakelijke velden in uw gegevensmodel. Vermijd het gebruik van Load * en SELECT. Behoud de volgende elementen:
|
|
Vermijd koppelingstabellen in het geval van grote hoeveelheden gegevens |
Gebruik indien mogelijk koppelingstabellen. Als u echter te maken hebt met grote hoeveelheden gegevens, kunnen samengevoegde tabellen beter presteren dan koppelingstabellen. |
|
Samengevoegde dimensies opdelen in nieuwe velden |
U moet samengevoegde dimensies opdelen in afzonderlijke velden. Dit vermindert het aantal unieke waarden in uw velden. Dit is vergelijkbaar met de manier waarop tijdstempels kunnen worden geoptimaliseerd. |
|
Gebruik indien mogelijk AutoNummering |
U kunt een geoptimaliseerde lading maken door uw gegevens eerst te laden vanuit een QVD-bestand. Vervolgens kunt u de instructie AutoNummering gebruiken om de waarden naar symboolsleutels te converteren. Voor meer informatie, zie AutoNumber. |
|
Vermijd gegevenseilanden |
Gegevenseilanden kunnen nuttig zijn, maar ze hebben meestal een negatieve invloed op de prestaties. Als u eilanden maakt voor selectiewaarden, gebruik dan variabelen. |
|
QVD's worden opgeslagen op basis van incrementele tijdsperioden |
U moet QVD in segmenten opslaan, zoals maandelijks. Deze kleinere maandelijkse QVD kan vervolgens veel verschillende applicaties ondersteunen die mogelijk niet alle gegevens nodig hebben. |
Prestaties van werkbladen
Dit zijn de beste praktijken waarmee de prestaties van werkbladen en visualisaties worden verbeterd.
| Actie | Beschrijving |
|---|---|
|
Vermijd indien mogelijk de If()-functie |
Als de If()-functie wordt gebruikt binnen een aggregatiefunctie, wordt deze op recordniveau uitgevoerd en meerdere keren geëvalueerd. Als u bijvoorbeeld een aggregatie met 1000 records hebt, wordt een If()-voorwaarde 1000 keer geëvalueerd. Dit kan snel uit de hand lopen bij het nesten van instructies. Gebruik in plaats daarvan een set-analyse. Voorafgaand aan de aggregatie wordt een filter voor de set-analyse toegepast, dit zorgt voor snellere reacties. Deze reacties kunnen ook via een set-analyse worden gecachet, dit is niet mogelijk met de If()-functie. U kunt ook overwegen andere functies te gebruiken of het gegevensmodel aan te passen. |
| Vermijd indien mogelijk velden van andere tabellen in een aggregatietabel. |
Als een aggregatie wordt geëvalueerd, wordt de berekening in twee stappen uitgevoerd:
Het gedeelte met enkele threads kan een aanzienlijke invloed hebben op de prestaties. Zo kunt u meerdere velden in een aggregatie hebben, zoals Sum(Quantity*ListPrice). Als Quantity zich in de feitentabel bevindt en ListPrice zich in de hoofdproductentabel bevindt, moet de engine de twee tabellen eerst samenvoegen om de combinaties te vinden voordat de som het product kan worden berekend. Het samenvoegen vindt enkel-threaded plaats en de som berekenen vindt multi-threaded plaats. Als beide velden zich in dezelfde tabel bevinden is het samenvoegen niet nodig en wordt de aggregatie aanzienlijk sneller geëvalueerd. |
|
Aggr() en geneste Aggr()-functies worden zo min mogelijk gebruikt |
De Aggr()-functie heeft aanzienlijk veel invloed op prestaties. Incorrect gebruik kan leiden tot onnauwkeurige resultaten. Bijvoorbeeld in een tabel waarbij de dimensies afwijken van de dimensies binnen de Aggr()-functie. Ga voor meer informatie naar Wanneer moet ik AGGR niet gebruiken? |
|
Gebruik indien mogelijk set-analyse |
U kunt set-analyse gebruiken om een set van gegevenswaarden te definiëren die verschilt van de normale set die wordt gedefinieerd door de huidige selecties. Zie Set-analyse voor meer informatie. |
|
Vermijd indien mogelijk tekenreeksvergelijkingen |
Tekenreeksvergelijkingen zijn minder efficiënt dan set-analyses. Vermijd bijvoorbeeld Match(), MixMatch(), WildMatch() en Pick(). Gebruik in plaats daarvan markeringen in het script of gebruik de set-analyse. Ga voor meer informatie naar Voorwaardenfuncties en Prestaties van conditionele aggregaties. |
|
Berekeningsvoorwaarden worden gebruikt voor objecten die uitgebreide berekeningen bevatten |
Visualisaties kunnen veel records bevatten als er geen selecties gemaakt zijn. U kunt dan het beste berekeningsvoorwaarden toevoegen aan objecten zodat ze alleen worden gegenereerd nadat bepaalde selecties zijn gemaakt. Hierdoor worden geen zeer grote hyperkubussen gemaakt. Bijvoorbeeld: GetSelectedCount([Country])=1 OR GetPossibleCount([Country])=1. In dit scenario zal de visualisatie niet worden gegenereerd tenzij de gebruiker één land selecteert, of andere selecties maakt waarbij één land mogelijk is. |
|
Metingen worden indien mogelijk vooraf berekend in het script |
Elke meting met de laagste gedetailleerdheid binnen het gegevensmodel moet worden berekend in het script. Als u bijvoorbeeld in hetzelfde record in een tabel Sales en Cost hebt, kunt u de marge afleiden door Sales - Cost AS Margin te berekenen. U kunt ook vooraf andere waarden aggregeren als u weet dat ze op basis van een selectie niet zullen variëren of als ze aan een ander niveau van gedetailleerdheid zijn gekoppeld. |
|
Tabellen bevatten minder dan 15 kolommen en bevatten berekeningsvoorwaarden |
Een tabel met 15 kolommen kan als breed beschouwd worden. Als uw tabellen veel records bevatten, moet u berekende voorwaarden op het tabelobject gebruiken zodat deze alleen wordt gegenereerd nadat er aan bepaalde selecties of voorwaarden is voldaan. Overweeg het volgende als uw tabel zeer breed is:
|
|
Werkbladen bevatten geen overmatige hoeveelheid objecten |
Objecten worden berekend als de gebruiker naar het werkblad navigeert. Elke keer dat een gebruiker een selectie in het werkblad maakt, wordt elk object opnieuw berekend als de huidige status niet bestaat in de cache. Als u een werkblad hebt dat veel diagrammen bevat, moet de gebruiker bij elk object wachten totdat vrijwel elke selectie is berekend. Hierdoor wordt de engine aanzienlijk belast. Als best practice kunt u het Dashboard/Analysis/Reporting (DAR) -concept volgen om een opgeschoonde en minimale applicatie te ontwikkelen. Ga voor meer informatie naar DAR-methodologie. |
|
Numerieke markeringen worden toegepast in het script voor gebruik in set-analyses |
Set-analyses met markeringen kunnen efficiënter zijn dan wanneer u tekenreeksvergelijkingen of vermenigvuldigingen gebruikt. |
|
Masteritems of variabelen die worden gebruikt voor uitdrukkingen |
Met masteritems kunt u beheerde metrische gegevens slepen en neerzetten en wordt gegarandeerd dat uitdrukkingen in de cache worden geplaatst. Sum(Sales) is bijvoorbeeld anders dan SUM(Sales). Uitdrukkingen worden in de cache geplaatst op basis van spelling en ze zijn hoofdlettergevoelig. Ze moeten woord voor woord overeenkomen om opnieuw gebruikt te kunnen worden. |