Optimalisatie API calls zoals met Exact Online

Grenzen aan de groei, groei, groei

De enorme groei van het gebruik van Invantive SQL tot gebruik voor tienduizenden bedrijven betekent ook dat er veel meer verzoeken om gegevens uitgewisseld worden met de dataplatformen zoals AFAS Profit, Twinfield, Simplicate of Exact Online. Dagelijks wordt meer dan een terabyte aan bedrijfsgegevens uitgewisseld via Invantive SQL om zo ondernemers te laten sturen vanuit een integraal beeld op hun bedrijf.

Recent heeft bijvoorbeeld Exact Online kenbaar gemaakt dat het gebruik van de API’s efficiënter dient te gebeuren omdat het gebruik de beschikbare infrastructuur overstijgt. De mix van supersnelle puntqueries zoals artikelprijzen en grote downloads zoals de bulk API’s - die elk als 1 API calls tellen - maakt het moeilijk om alleen het aantal API calls als criterium te hanteren voor fair use. Ook datavolume en complexiteit worden gewogen, net zoals bijvoorbeeld op Freshdesk sommige API calls tot wel zeven keer zwaarder wegen dan andere.

Dit topic geeft je handvaten om het gebruik te analyseren, te meten en te optimaliseren op elk platform waarvoor Invantive SQL een driver heeft, inclusief Invantive Cloud met Power BI.

Optimalisatiestappen

Een optimalisatie bestaat meestal uit een aantal stappen:

  • Stel de norm vast: wat is acceptabel in termen zoals API-calls, bandbreedte, looptijd en investering.
  • Analyseer: bestudeer waar de norm overschreden wordt en bepaal de aanpak.
  • Optimaliseer: voer de aanpassingen uit.

Uitvoering van een optimalisatie kost een specialist vaak minder dan een dag.

Voor de vaststelling van de norm is het handig om eerst het realistisch geachte aantal Exact Online API-calls af te schatten. Het aantal benodigde API-calls is vaak een functie van de omvang van de administratie of de omzet. Tips om de omvang van de administratie in termen van aantal rijen staan in Schatten omvang Exact Online administratie. De leeftijd kan bepaald worden door een query op SystemDivisions, maar ook indirect via de tips in Leeftijd schatten van een Exact Online administratie.

Echter, echt laaghangend fruit zijn het beperken van het gebruik en het optimaliseren van queries zoals hieronder beschreven.

Beperk gebruik

Veel API-koppelingen draaien 24x7, terwijl de noodzaak daar niet voor is. Door bijvoorbeeld koppelingen alleen te laten draaien gedurende de verlengde kantooruren 7-19 uur ten opzichte van 24x7 kan het gebruik vaak al met 65% teruggebracht.

Optimaliseer queries

Veel koppelingen halen alle gegevens op en leggen dan lokaal relaties in bijvoorbeeld Power BI of SQL Server T-SQL.

Het omschrijven van de logica naar Invantive SQL en/of Invantive PSQL stelt de Invantive optimizer in staat om platformspecifieke executiepaden te kiezen die vele malen sneller zijn. Dit zal bijvoorbeeld bij joins (zogenaamde join_set hint) leiden tot soms honderden malen snellere verwerkingen met bijpassende reductie in het aantal API-calls (case study).

Maar ook de unieke mogelijkheden van Invantive SQL voor het gebruik van server-side filtering zorgt ervoor dat een goedgekozen where-clause of filter in Power BI leidt tot tientallen malen betere prestaties (voorbeeld optimalisatie Power BI met filters).

Daarnaast kan gebruik gemaakt worden van incrementeel laden zoals bijvoorbeeld:

Deze technieken werken allen op Exact Online en zijn geschikt voor gebruik met grote aantallen administraties. De optimalisatiestappen en de union constructie werken ook op andere dataplatformen zoals AFAS Profit.

Soms leidt overschrijding van de limieten tot grote aantallen foutmeldingen; de werking onder extreme condities van de de drivers kan ingesteld worden met driverattributen zoals bijvoorbeeld op Exact Online.

Analyse gebruik

Analyse via schermen

Alle Invantive SQL-gebaseerde producten verzamelen meetgegevens over het daadwerkelijk gebruik van de dataplatformen. De dagstanden zijn beschikbaar in Invantive Cloud via het scherm “Sessie I/O’s” zoals beschreven in Invantive Cloud provides insight on all API activity. De dagstanden zijn geaggreerd beschikbaar in het Invantive Cloud scherm “Maandelijkse Geaggregeerde Sessie I/O’s”. De dagstanden en aggregaties zijn zowel beschikbaar voor het gebruik van de dataplatformen vanuit Invantive Cloud als vanuit on-premise applicaties zoals Invantive Control for Excel of Invantive Data Replicator:

Analyse verwerkingstijden

Alle Invantive-producten registreren start en einde van het proces via de executionlog.xml zoals beschreven op Log for automated analysis of historical executions of Invantive SQL-products. Deze is altijd beschikbaar, ook als bijvoorbeeld Invantive Data Hub logs niet verzameld werden. Hiermee kan snel bepaald worden welke processen lang duren.

Analyse via trace

De tracefaciliteiten van Invantive registreren ook de API calls, maar de URL’s zijn uit beveiligingsoogpunt vaak maar beperkt beschikbaar. De tracefaciliteiten staan beschreven in bijvoorbeeld

Er zijn momenteel (2021) geen standaardmogelijkheden om trace te registreren op Microsoft Azure.

Analyse via data dictionary

Gedurende de uitvoering van Invantive SQL houdt de SQL engine bij welke gegevensverzoeken uitgevoerd zijn en hoe lang ze geduurd hebben. Deze informatie is toegankelijk via bijvoorbeeld de view SessionIOs in het data dictionary zoals beschreven in Welke API calls heeft Invantive SQL daadwerkelijk uitgevoerd?.

Analyse via native call logging

Alle verzoeken aan dataplatformen kunnen gedetailleerd geregistreerd worden via “native call logging”. Per verzoek wordt een bestand gemaakt zoals beschreven in Collect Native Platform Call Data. Deze bestanden worden meestal gebruikt om support cases in te dienen bij dataplatformleveranciers, maar bieden ook gedetailleerde informatie over duur van de API calls.

Analyse van logging

De API calls die uiteindelijk in Invantive Cloud zichtbaar worden kunnen ook lokaal verzameld worden en geanalyseerd via Elasticsearch, Power BI, Invantive SQL of andere tools zoals beschreven in API-calls loggen in NDJSON formaat voor bijvoorbeeld Elasticsearch. Per API call wordt een regel toegevoegd aan een lokaal NDJSON-bestand.