Performance

Een groeiende Laravel-applicatie weer snel krijgen

Rapportages en achtergrondprocessen versneld door eerst te meten en daarna opslag, queries en queuewerk opnieuw te verdelen.

LaravelPostgreSQLClickHouseRedisQueuesTesting

De situatie

Een multi-tenant Laravel-applicatie combineert bezoekerssessies, leads, campagnegegevens en conversiepaden in rapportages. Dezelfde PostgreSQL-databases waren tegelijk verantwoordelijk voor dagelijkse transacties, imports en steeds zwaardere analytische vragen.

Waar het vastliep

De vertraging zat niet in één spectaculaire query. Brede selecties, herhaalde attributieberekeningen en rapportagewerk binnen gewone requests stapelden zich op. Daardoor werd een kleine datagroei op meerdere plekken tegelijk voelbaar.

De technische vraag

De applicatie bleef dagelijks in gebruik en klantdata was per bedrijf gescheiden. Iedere verbetering moest dus gefaseerd uitrolbaar zijn, met een terugvalmogelijkheid en tests rond de bestaande rapportage-uitkomsten.

Mijn aanpak

Ik begon met requesttimings en queryplannen in plaats van aannames. Daarna werden samengestelde indexes toegevoegd op de filters die werkelijk voorkwamen, selecties smaller gemaakt en herberekeningen naar idempotente jobs verplaatst. Tijdreeksdata voor dashboards kreeg een eigen ClickHouse-pad, terwijl PostgreSQL de transactionele bron bleef.

Wat het opleverde

De zwaarste rapportagepaden belasten de operationele database niet meer op dezelfde manier. Nieuwe optimalisaties zijn bovendien meetbaar: per request is zichtbaar of tijd in PHP, PostgreSQL, ClickHouse of een externe integratie verdwijnt.

Onder de motorkap

Keuzes die het verschil maakten

01

Meten vóór wijzigen

Requesttimings, queryplannen en jobduur bepalen waar optimalisatiewerk werkelijk verschil maakt.

02

Indexes op gebruik

Samengestelde indexes volgen tenant-, bron- en datumfilters uit echte rapportages, niet losse kolommen op gevoel.

03

Asynchrone herberekening

Attributie en imports worden buiten de webrequest uitgevoerd en kunnen veilig opnieuw worden gestart.

04

Opslag per taak

De operationele waarheid blijft relationeel; grote aggregaties krijgen een analytisch pad.

Kennismaken

Loop je tegen iets vergelijkbaars aan?

Stuur me de context. Dan kan ik vrij snel zeggen of en hoe ik je kan helpen.

Vertel wat er speelt