Millnet BI - en ledande Qlik Elite Partner sedan år 2010

Hur optimera prestana i QlikView-server miljö?

Mitt namn är Gustav Gager och jag jobbar med uppgraderingar, installationer och server sizing av Qlik-miljöer på Millnet BI.

Den absolut vanligaste frågan som hamnar på mitt bord är relaterade till prestanda i QlikView-miljöer. Oftast är det en kund som haft en fungerande miljö men vartefter miljön vuxit så har också prestandan blivit sämre. I andra fall så handlar det om kunder som vuxit ur sin befintliga hårdvara och vill investera i ny och då undrar vilken server man ska köpa.

QlikView är ett av de mest resurskrävande IT-stöden som finns hos många företag. Att välja plattform och sätta rätt konfiguration är inte alltid så lätt. Särskilt om du har flera QlikView-applikationer som måste ladda om ofta. I den här bloggposten så tänkte jag prata om vad man kan göra för att optimera sina serverresurser för att få ut så mycket prestanda som möjligt och vad som påverkar prestandan vid laddningar och beräkningar i QlikView.

Utifrån ovan frågeställningar gjorde jag en serie tester för att ta reda på hur olika serverkonfigurationer påverkar prestanda i QlikView. Jag tog fram några applikationer som är designade för att testa prestanda i olika typer av scenario och sedan testade jag detta på olika servrar med olika konfigurationer. Resultatet av testerna kan du läsa mer om nedan.

Virtuell miljö, eller inte?

Qlik har tidigare alltid sagt att man inte kan garantera en bra upplevelse på virtuella servrar. Detta har gjort att man officiellt inte stödjer virtuella servrar och därför alltid rekommenderar att man kör QlikView på fysisk hårdvara. Verkligheten ser dock lite annorlunda ut och nästan alla av våra kunder använder virtualiserade servrar. Fördelen med virtuella servrar är att de är väldigt enkla att skala. Att lägga till mer processorer, minne eller hårddisk görs med några enkla klick.

Numera så har Qlik valt att supportera virtuella miljöer, men dock endast de som körs på VMWare. Så vad är då nackdelarna med att köra virtuella plattformar? Bör man undvika att köra exempelvis Hyper-V då det officiellt inte stöds av Qlik? Nej det tycker jag inte man bör göra. Och faktum är att mina tester visar att man endast förlorar några enstaka % i prestanda när man går från en fysisk till en virtuell server. Jag har heller aldrig stött på några problem som har kunnat hänvisas till att en server är virtualiserad.

Min slutsats
Virtualisera gärna dina servrar. Se dock till att hosten som ska köra servern är tillräckligt kraftfull för att kunna öka QlikView-server resurserna om det behövs.

Mer RAM gör inte servern snabbare - men ha inte för lite!

Man pratar ofta om att QlikView tycker om mycket RAM-minne. Något som också är sant. QlikView laddar all data och beräkningar i RAM och cachar även tidigare beräkningar i serverns RAM.

Men går beräkningarna och omladdningarna fortare om jag installerar mer RAM? Det generella svaret är: Nej! Din QlikView server blir inte snabbare av mer RAM. Beräkningar och omladdningar görs av serverns processorer och det är framförallt dessa som behöver bli snabbare för att laddningstider och “klick” i applikationer, ska bli snabbare. Det är dock inte hela sanningen och RAM-minnet kan ha en viss påverkan på generell prestanda.

Om man har mycket RAM i servern så kommer det finns mer plats för QlikView att cacha tidigare beräkningar. Säg att en användare gör ett val i en applikation. Då kommer beräkningen för det valet att lagras i RAM så att nästa gång någon vill göra samma beräkning, så finns svaret redan klart. Detta frigör processortid och ger användaren resultatet snabbare. När cachen är full så kommer gammal data att sorteras bort. Så ju mer RAM du har, desto mer kan servern cacha. Obsevera att cachen töms helt när QVS-tjänsten startar om (dvs starta inte om den även om den äter mycket minne!).

Om man däremot har för lite RAM i servern så kan andra saker hända. Windows har något som kallas för virtuellt minne (virtual memory) som består av fysiskt RAM och en dynamisk fil (pagefile.sys) som ligger lokalt på serverns hårddisk. Om det finns för lite RAM så måste QlikView börja använda det virtuella minnet (som nu huseras på en hårddisk, som är flera tusen gångare långsammare än RAM). Resultatet är att beräkningar utförs mycket långsamma och i vissa fall så kraschar QlikView-Servern.

Min slutsats
Så se till att ha rikligt med RAM i din QlikView-server. Notera dock att mer RAM inte hjälper dig om du vill minska dina laddningstider.

Sätt powerplan till High Performance

I windows finns ett energischema som hanterar energisparsfunktioner och prestanda. I de allra flesta fall så står energischemat på “balanced” vilket är standardinställningen för senare versioner av Windows Server (2008 R2 och senare). Detta är något som påverkar prestandan i QlikView negativt. Om man istället sätter energi-schemat till “high performance” så kan man minska laddningstiderna med mellan 15-20% beroende på hur laddningen är uppbyggd.

Använder du idag Hyper-V? Då kan det vara värt att tänka på att om du sätter på powerplan på “high performance” i VMen så tjänar du ingenting alls på det. Inställningen måste istället göras direkt på Hyper-V hosten. Jag har inte haft möjlighet att testa i VMWare ännu så jag vet ej om det gäller även där.

Min slutats
Sätt alltid på “high performance” på både host och VM när du kör QlikView på dem.

Fler processorkärnor eller snabbare processorkärnor?

Detta är en fråga som ofta kommer upp och många tycks vara väldigt snabba med att rekommendera så många processorer som möjligt när man ska köra QlikView. Det är delvis sant, men det finns en baksida.

QlikView installationen har generellt två stycken processer som drar mycket resurser -  QVS.exe (QlikView Server) och QVB.exe (QlikView Distribution Service).

Om man endast har en server och därmed kör QVS och QVB på samma maskin så kan det vara svårt att välja mellan dessa två. Jag skulle dock vilja propagera på att snabbare processorer nästan alltid är att föredra och jag ska försöka förklara varför.

För omladdningar (QVB.exe) så är de allra flesta script begränsade till endast en ynka liten CPU kärna. Detta beror på att scriptet endast kan exekvera flera trådar samtidigt ifall data kan laddas in parallellt. Att exempelvis läsa in en CSV-fil rakt upp och ner använder flera processorkärnor utan problem. Men om man exempelvis använder QlikView-funktionerna Previous, Rownr eller Peak, ja då begränsas laddningen till endast en CPU tråd och då spelar det ingen roll hur många processorkärnor man har. Samma sak gäller många connectorer eller ODBC-kopplingar som ofta är enkeltrådade.

De laddningar som är flertrådade tjänar givetvis på fler processorkärnor, men inte så mycket som man kan tro. Mina tester visar att prestandan i ett perfekt multitrådat script ökar med 92% om man ökar från en processorkärna, till två. Om man däremot ökar från två till fyra, så får man bara en ökning på ungefär 25%. Så har man enstaka laddningar som tar lång tid så kommer en snabbare processor att ge dig betydligt bättre prestanda än en processor med fler kärnor.

När det gäller QlikView-servern (QVS.exe) så är den också flertrådad. Men även här ser vi liknande prestandaökningar som med flertrådade script. Att gå från en till två processorkärnor ökade prestandan med 53%. Att gå från två till fyra gav sedan ytterligare en ökning med 19%. Fördelen här är att majoriteten av de beräkningar som görs av QVS.exe är flertrådade.

Min slutats
Om du kör QVS.exe och QVB.exe på varsin maskin (en frontend/backend lösning) så kan det vara en idé att köra färre, men snabbare processorer på backend (QVB/backend/Publisher) och fler, men ganska lite långsammare på frontend (QVS,frontend,QlikView server).


Sammanfattande rekommendationer

Generellt sätt så gäller det att vara lite smart när man ska bygga sin Qlikview miljö. Man behöver inte köpa servrar för flera hundratusen kronor, men man ska samtidigt inte snåla. Det viktigaste är att se över hur många användare man har, hur många applikationer man kommer att ha och hur stora dessa applikationer beräknas bli. Kör gärna virtuellt så du har möjlighet att skala servern med fler eller färre processorer och mer RAM om det behövs. När din server väl är på plats så bör du också sätta serverns energischema till ”high performance” för att få bästa möjliga prestanda.

Du är mer än välkommen att höra av dig till mig om du frågor som rör QlikView-server performance eller om du har kommentarer som rör innehållet i artikeln!

Gustav Gager
0736 330 398

Taggar: QlikView, Qlik, Performance

Kontakta oss

Millnet BI logotyp

Millnet BI AB
Surbrunnsgatan 44A, 3tr
113 48 Stockholm

08 - 651 18 00

Följ oss på LinkedIn