Op een Exact database van een klant van ons krijg ik steeds vaker foutmelding itgeneor229, waarin aangegeven wordt dat ik over de 5000 API-aanroepen heen ga op een dag. Hierbij gaat het om de volgende Query:
Via het scherm Systeemberichten is itgeneor229 terug te vinden. Het betreft een administratie met divisiecode 1784267. De tabel waarbij itgeneor229 optreedt is niet altijd degene die het probleem veroorzaakt; de oorzaak ligt meestal eerder doordat er 5.000 API-calls reeds geweest zijn die dag.
Via het scherm Sessie I/O’s is te achterhalen welke I/O’s er geweest zijn. Kies “Show all entries” en vul rechtsboven de divisiecode in in het zoekfilter en exporteer de rijen naar een Excel-sheet.
Het gaat om ruim 14.000 API-calls op deze administratie.
Groepeer deze op tabelnaam in Excel met een draaitabel:
Circa 9.000 calls die sowieso gefaald zijn, maar het lijkt er op dat SalesEntries, PurchaseEntries en Receivables geoptimaliseerd (of vervangen) dienen te worden.
SalesEntries, PurchaseEntries en Receivables zijn relatief kleine tabellen, respectievelijk halen deze (zonder filtering) 41K rijen, 20K rijen en 42K rijen binnen. Dit zijn dus relatief kleine tabellen.
Voor mij is het echter niet duidelijk waarom deze tabellen zoveel API-calls veroorzaken en hoe we dit op kunnen lossen en dus kunnen optimaliseren/vervangen. Als ik de bijgevoegde artikelen lees, is de oorzaak kennen cruciaal om te kunnen optimaliseren.
Wat mij vooral verbaasd is ook het feit dat het niet elke dag/refresh zo is, maar sporadisch.
Het volledig ophalen van 41K rijen uit bijvoorbeeld SalesEntries veroorzaakt circa 800 API-calls (41.000 / 60 paginagrootte). Dit is terug te vinden in het scherm Sessie-I/O’s. Exact Online kent verschillende API’s, met verschillende paginagroottes. De gangbare waardes zijn:
100 per XML API-call
60 per REST API-call
1.000 per REST API-call *Bulk
1.000-1.000.000 per REST API-call *Incremental
Beste is de genoemde adviezen te volgen qua filtering en frequentie verversing, of te vervangen door efficientere aanroepen.
Zodra eenmaal de daglimiet overschreden is voor een administratie, zullen alle volgende verzoeken die niet uit cache beantwoord kunnen worden altijd een foutmelding geven. De hoeveelheid API-calls gebruikt bepaalt het moment van optreden.
Voor zo ver ik begrijp zijn de tabellen SalesEntries, PurchaseEntries en Receivables van een type wat veel API-calls veroorzaakt.
Echter, bij andere soortgelijke dashboards zie ik niet hetzelfde probleem en het blijft voor mij een vraag waarom dit ineens problematisch is.
Momenteel staat de verversing van dit dashboard op 1x per dag, ‘s nachts, en de verversing lukt dan niet, terwijl het tot voor kort mogelijk was om meerdere keren op een dag te verversen.
Als ik de adviezen lees komt het kortweg neer op de volgende oplossingen;
Filteren van de tabellen; dit zijn relatief kleine tabellen waarvan alle informatie nodig is.
Minder vaak verversen; ik ververs nu maar 1x per dag, wat niet lukt. We willen graag de mogelijkheid terug hebben om meerdere keren per dag te verversen, maar minder kan in ieder geval niet.
Andere tabellen gebruiken met *Incremental; voor zo ver ik weet zijn er geen soortgelijke tabellen met een incremental refresh.
Ik dan ook ontvang graag concrete oplossingen hoe we er voor kunnen zorgen dat de refresh weer gaat werken, met behoud van de tabellen en alle rijen. Ook blijf ik benieuwd naar de achterliggende reden waarom dit probleem zich nu ineens voordoet terwijl dit voorheen niet was én andere soortgelijke dashboards deze problematiek niet ervaren.
Voor de optimalisatie van rapporten is advies om contact te zoeken met een van onze partners. Brede vragen zoals bovenstaande zijn niet praktisch te behandelen via deze forums.