Oplossingen

Enterprise

Cal.ai

Ontwikkelaar

Hulpbronnen

Prijzen

Bij

Alex van Andel

Incidentanalyse: databasebelasting, kettingreacties van storingen en wat we hebben geleerd - 27 januari 2026

Op dinsdag 27 januari hebben we een productie-incident ervaren dat zorgde voor verminderde prestaties op het hele platform en volledige downtime voor sommige enterprise-klanten met gebeurtenistypen met hoog volume.

Het incident begon met een verhoogde databasebelasting, leek opgelost, en bracht daarna secundaire fouten in downstreamsystemen aan het licht. Deze post legt uit wat er is gebeurd, hoe we dat hebben bevestigd, en wat we als gevolg daarvan hebben gewijzigd.

Impact

  • Gebruikers met laag volume ondervonden hoge latentie en trage paginaladingen

  • Enterprise-klanten met zware eventtypes ondervonden time-outs en uitval

  • Later in het incident zagen gebruikers met Google Calendar-integraties af en toe storingen

Wat we als eerste zagen

Om 15:30 UTC gingen automatische waarschuwingen af wegens verhoogde databasebelasting. Eerste onderzoek liet een stijgend aantal Average Active Sessions (AAS) en snel oplopende statementlatentie zien, terwijl het totale verkeer binnen de verwachte grenzen bleef.

Screenshot 2026-01-29 at 13.26.06.png

Wat deze grafiek laat zien:

  • Een aanhoudende toename van actieve databasesessies

  • Sessies stapelden zich op in plaats van snel te voltooien

  • Een sterk signaal dat queries trager werden, niet dat het verkeer was toegenomen

Dit suggereerde een wijziging in onze applicatie in plaats van een verkeerspiek, wat door verkeersanalyse werd bevestigd.

CPU-verzadiging bevestigt de bottleneck

Naarmate de belasting toenam, volgde het CPU-gebruik van de database.

image.pngScreenshot 2026-01-29 at 13.22.27.png

Wat deze grafieken laten zien:

  • CPU-gebruik dat ruim boven de basislijn uitsteeg

  • Aanhoudende verzadiging in plaats van korte pieken

  • Duidelijke correlatie met oplopende querylatentie

Op dat moment was Postgres CPU-gebonden. Queries duurden langer, blokkeerden andere queries en de latentie verspreidde zich door het hele systeem.

Tijdlijn (UTC)

  • 15:30 – Automatische waarschuwingen voor hoge DB-belasting. Eerste diagnostiek toonde verhoogde DELETE-activiteit op APIv2.

  • 15:49 – We hebben de DELETE-rate limits aangescherpt om de directe druk te verminderen.

  • 16:03 – Verdere analyse toonde dat het verkeer normaal was. De databasebelasting bleef toenemen.

  • 16:06 – Eerste meldingen van Enterprise-klanten die eventtypes niet konden laden.

  • 16:18 – Incident uitgeroepen. CPU-verzadiging zorgde ervoor dat statementlatentie in het hele systeem toenam.

  • 17:07 – We begonnen met het herschrijven van een query met hoge belasting om de druk op de database te verminderen.

  • 17:40 – Queryherschrijving uitgerold. Dit hielp, maar loste het probleem niet volledig op.

Het cruciale keerpunt

Om 17:45 identificeerden we een onbedoelde interactie:
Een recente functie die op maandag de 26e was uitgebracht, introduceerde een zoekfunctie voor boekingen binnen KBar (CMD+K). Hierdoor werd bij elke paginalading in de webapp een zware API-aanroep uitgevoerd.
Om 17:55 werd de KBar-wijziging in productie teruggedraaid.

Screenshot 2026-01-29 at 13.31.08.png

Wat deze grafiek bevestigt:

  • Een duidelijke en onmiddellijke daling in AAS na het terugdraaien

  • De querydruk op de database nam af

  • De latentie stabiliseerde kort daarna

Dit komt precies overeen met het tijdstip van terugdraaien en bevestigde de KBar-interactie als de primaire trigger van het database-incident.

  • 18:15 – De databaseprestaties stabiliseerden.
    Het primaire DB-incident was op dat moment opgelost.

Ontdekte secundaire problemen

Na het herstel van de database bleef een kleinere groep gebruikers getroffen.
Gebruikers met Google Calendar-integraties ondervonden fouten door uitputting van het Google API-quotum. Dit werd veroorzaakt door retry-gedrag over meerdere consumers terwijl upstream-fouten optraden.

image.png

Wat deze grafiek laat zien:

  • Snelle quota-opname tijdens het incidentvenster

  • Correlatie met retry-gedrag in plaats van nieuw verkeer

  • 18:40 – Oorzaak vastgesteld: Atoms retry-logica ververst kalendergegevens agressief.

  • 18:46 – De Atoms-functionaliteit werd tijdelijk onderbroken. Kalendergebeurtenissen werden aangevuld en het quotagebruik daalde.

  • 18:54 – De prestaties van APIv2 bleven licht gedegradeerd; een deel van het verkeer werd tijdelijk omgeleid naar Vercel-endpoints.

  • 19:30 – APIv2 en Google-integraties waren volledig gestabiliseerd.

Later identificeerden we nog een extra bijdragend probleem:

  • Een niet-afgewachte, naar een promise omgezette aanroep zorgde ervoor dat Node-processen crashten wanneer Google API-fouten in de globale scope terechtkwamen.

Hoofdoorzaak

De primaire oorzaak was een onverwachte interactie tussen functies:

  • KBar activeerde bij elke paginalading een zware API-aanroep

  • Dat API-pad was afhankelijk van dure databasequery's; met name voor grootschalige gebruikers met veel boekingen.

  • CPU-verzadiging verhoogde de querylatentie in het hele systeem

  • Enterprise-klanten met eventtypes met hoog volume werden het hardst getroffen

Secundaire storingen (uitputting van Google-quota en instabiliteit van APIv2) waren niet de oorspronkelijke oorzaak, maar kwamen aan het licht zodra het systeem onder druk stond.

Wat we hebben veranderd

Sinds dinsdag hebben we:

  • De koppeling met KBar verwijderd die zware API-aanroepen triggerde (#27314)

  • Meerdere query-optimalisaties uitgerold om de DB-belasting te verminderen (#27364, #27319, #27309, #27315)

  • De paginering voor /booking/{upcoming,…} gewijzigd van vooraf gerenderd naar op aanvraag, waardoor het databasegebruik afneemt terwijl we het endpoint blijven optimaliseren (#27351)

  • De niet-afgewachte async-aanroep gefixt die Node-process-crashes veroorzaakte in APIv2(#27313)

  • Verschillende waarborgen op DB-niveau geïmplementeerd om onze database te beschermen tijdens perioden van extreem gebruik.

  • Aanroepen naar DELETE-endpoints beperkt tot 1 verzoek per seconde (#27359)

Afsluiting

Dit incident werd niet veroorzaakt door verkeerspieken of infrastructuuruitval. Het werd veroorzaakt door een onverwachte interactie tussen functies, met domino-effectproblemen door retry-gedrag stroomafwaarts en een subtiele applicatiefout.


Onze excuses voor de verstoring, vooral voor klanten die op schaal opereren. Het incident van dinsdag heeft direct geleid tot verbeteringen in hoe we functies uitrollen, onze database beschermen en cascaderende storingen afhandelen.


Dank voor uw geduld, en dat u ons aan een hoge standaard houdt.

Begin vandaag nog gratis met Cal.com!

Ervaar naadloze planning en productiviteit zonder verborgen kosten. Meld je in enkele seconden aan en begin vandaag nog met het vereenvoudigen van je planning, geen creditcard vereist!