Loket verloonstaat tabel is onwerkbaar langzaam

Een eenvoudiger query die hetzelfde probleem vertoont is:

select *
from   PayrollAdministrationPayrollRunPeriodComponentResults
where  prt_payrollComponent_key = 260
and    epr_employerNumber = 21121
and    prn_payrollPeriod_year = 2021
and    prn_payrollPeriod_periodNumber = 1
limit  100

Deze Loket SQL query loopt enkele minuten, terwijl als de view uitgeschreven wordt naar SQL statements en de where clause ingevouwen, dan duurt het enkele seconden.

Na overleg intern is bevestigd dat de Invantive SQL Optimizer hier nog verbeteringsmogelijkheden qua executiepad onbenut laat. Mochten die verbeteringsmogelijkheden gerealiseerd worden, dan is niet zeker dat de prestaties voldoen aan de verwachtingen, maar dan is in goede samenwerking met Loket development ongetwijfeld er nog een mouw aan te passen.

De verbeteringsmogelijkheden zien we vooral in het “invouwen” van criteria in het executiepad. Het invouwen zorgt er voor dat waar het kan (transitiviteit) criteria op een hoger niveau ook lager gebruikt worden. Dergelijke optimalisaties zijn al veel voorhanden op tabel-gebaseerde queries, maar Loket gebruikt vrijwel uitsluitend tabelfuncties met parameters. Verbeteringen zullen ook doorwerken waarschijnlijk in een beperkt aantal Teamleader views en NMBRS die beiden ook veel puntqueries gebruiken en daardoor tabelfuncties.

De SQL optimizer van Invantive is er in twee SQL versies: de (huidige) versie 1 en de toekomstige versie 2. Versie 2 is significant dynamischer en verbetert vooral de prestaties van complexe queries en PSQL met SQL blokken.

Voor versie 1 onderzoeken we de mogelijkheden voor verbetering van de optimizer. Op basis daarvan kijken we of voor versie 2 deze aanpassing ook nodig is en hoe.

Einde van mei verwachten we beeld te hebben van de haalbaarheid. Als tijdelijke workaround is de aanbeveling om elke stap in de query naar een in-memory tabel te schrijven en die te gebruiken in de vervolgstap. Het zou dan significant sneller moeten zijn.