SAS USER FORUM Design Visual Analytics-rapporter for bedst mulig performance Torben Skov, SAS Institute
Inspiration til dette indlæg http://support.sas.com/resources/papers/proceedings17/sas0734-2017.pdf
Kerris definitioner Der findes forskellige former for performance Performance kan opdeles i Server-side performance Det der foregår i LASR-serveren Client-side performance Antal og type af objekter Design performance Layout af rapporten og beslutning om, hvad der beregnes i rapporten kontra, hvad der er pre-beregnet Network performance Det der ligger mellem browseren og serveren
Kerris konklusioner Reducer og simplificer Konklusioner Brug en de-normaliseret, materialiseret tabel Behold kun relevante kolonner Reducer længden af karakterkolonner i tabellen Reducer antal decimaler på numeriske felter Undgå unødvendige og duplikerede objekter i rapporterne Begræns information i rapporten til nøgleinformation for rapportbrugerne Brug fuldt optrukne referencelinjer (i forhold til stiplede) Brug ikke spark lines Begræns antal filtre med sammenligninger Hvis noget kan pre-beregnes i data, så gør det
Optimering Den gyldne regel ved rapport optimering Gør det rigtige! Stop tuning Start measuring
Måling af performance Performance debugging vinduet Ctlr+alt+p frembringer performance debugging vinduet Load time Query time Render time Total time
Den konkrete situation Overblik over timeregistrering En rapport, der giver svar på (næsten) alt i forbindelse med projekter og timeregistrering Rapporten 8 sektioner, 3 info-vinduer I gennemsnit 9 objekter per sektion Data 1.4 millioner rækker, heraf 59.000 vedr. Danmark 80 kolonner 72 karakter, 8 numerisk 37 GB
Nuværende rapport Highlights fra performance toolet Der er plads til forbedring! Report loaded '/Nordic/Content/PS/project reporting'. Time: 65579 ms. ~1 minut! Query time for 'Year'. Time: 186561 ms. Renderer complete for 'Year'. Time: 346 ms. ~3 minutter!! Time taken since report was requested to be opened Time: 475377 ms. ~7 minutter!!!
Er miljøet OK? Miljøets specifikationer Miljøet er i hvert fald ikke for småt til disse data! 64 servere 32 kerner pr. server Men den er placeret i USA
Håndtag at skrue på Netværk Bedre netværk Flyt serveren tættere på Server-side performance %Squeeze Drop kolonner Reducer rk Fjern RLS Brug lookup datasæt Client-side performance Reducer objekter Mindre rapport Design performance Pre-beregn kolonner Ændre filterlogik
Netværket Det tager ca. 6 gange så lang tid at få svar fra server i Cary Der er langt til Cary.. Ping af Cary server Reply from 10.xx.yyy.zz: bytes=32 time=129ms TTL=58 Reply from 10.xx.yyy.zz: bytes=32 time=126ms TTL=58 Reply from 10.xx.yyy.zz: bytes=32 time=126ms TTL=58 Reply from 10.xx.yyy.zz: bytes=32 time=126ms TTL=58 Ping af server i DK Reply from 172.xx.yyy.zz: bytes=32 time=21ms TTL=61 Reply from 172.xx.yyy.zz: bytes=32 time=21ms TTL=61 Reply from 172.xx.yyy.zz: bytes=32 time=21ms TTL=61 Reply from 172.xx.yyy.zz: bytes=32 time=20ms TTL=61
Test af simpel rapport Hvor lang tid tager det at beregne distinct count Store forskelle ved en simpel rapport, der kun returnerer et tal (distinct count af en kolonne) Rapport færdigåbnet Query time distinct count Server i Cary 22.514 ms 557 ms Server Danmark 934 ms 145 ms
Hvad kan gøres ved data 37 GB 80 kolonner 1.459.000 rækker En dansk bruger har adgang til ~60.000 rækker (< 5%) Rapporten anvender 16 kolonner (20 %) Fjern rækker og RLS + 20 MB 2-9 kolonner 4 25.000 rækker 1,6 GB 80 kolonner 59.895 rækker %Squeeze Nogle af kolonnerne er alt for brede 58 MB 16 kolonner 59.895 rækker 130 MB 80 kolonner 59.895 rækker
Layout af rapporten
Beregninger der kan pre-beregnes
Effekt af 1 ændring Bruges som ny baseline! Netværk Bedre netværk Flyt serveren tættere på 25,4 s Server-side performance 24,6 s %Squeeze Drop kolonner 24,6 s Reducer rk Fjern RLS 24,2 s 23,8 s Brug lookup datasæt 25,3 s Client-side performance 10,5 s Reducer objekter Mindre rapport 22,2 s Design performance 25,9 s Pre-beregn kolonner Ændre filterlogik?
Effekten visualiseret
Den samlede effekt af ændringerne 6,8 s
Den oprindelige rapports filterlogik
Filterlogik uden stabelobjekt Valgbokse til at udvælge ønsket data Lookup datasæt på 25.000 rækker 9 kolonner Information brugeren er interesseret i 6,3 s
Flere lookup datasæt 15.000 rækker 7 kolonner 1073 rækker 5 kolonner 3799 rækker 5 kolonner 185 rækker 4 kolonner 85 rækker 2 kolonner 6,1 s
Filtrering ikke interaktion Fjern alle interaktioner og lav det med filtre i stedet for.
Brug af parametre
Opsæt filtre for krydstabellen
Husk de indirekte interaktioner Vi har i dette tilfælde brug for 10 filtre 1 2 3 4 5 6 7 8 9 10
Unødvendige opdateringer Krydstabellen opdateres hver gang der klikkes i valgobjekterne i rapporten!!!
Et forbedret layout Krydstabellen er flyttet til sin egen sektion 3,9 s
Næste sektion har informationen... 0,5 s 4 s
DEMO
Mine konklusioner Antal objekter og placering af dem betyder mere end datastørrelser i mit tilfælde (der var ikke belastning på serveren og datastørrelse holder sig inden for sizing) Mange bække små 25,4 s 10,5 s 6,8 s 3,9 s Største Enkeltændring 59% Alle enkeltændringer 35% Nyt layout 43% 85% reduktion af svartiden ved åbning af rapport
SAS USER FORUM From 7 minutes to 4 seconds in 75 hours Torben Skov, SAS Institute
SAS USER FORUM Tak for opmærksomheden Og god fornøjelse med optimering af jeres egne rapporter