Lösungen

Enterprise

Cal.ai

Preisgestaltung

Durch

Alex van Andel

Vorfallbericht: Datenbanklast, kaskadierende Ausfälle und was wir daraus gelernt haben – 27. Januar 2026

Am Dienstag, dem 27. Januar, erlebten wir einen Produktionsvorfall, der zu beeinträchtigter Leistung auf der gesamten Plattform und zu einem vollständigen Ausfall für einige enterprise-Kunden mit Ereignistypen mit hohem Volumen führte.

Der Vorfall begann mit erhöhter Datenbanklast, schien behoben zu sein und offenbarte dann sekundäre Ausfälle in nachgelagerten Systemen. Dieser Beitrag erklärt, was passiert ist, wie wir es bestätigt haben und was wir infolgedessen geändert haben.

Auswirkungen

  • Benutzer mit geringem Volumen erlebten hohe Latenz und langsame Seitenladezeiten

  • Enterprise-Kunden mit stark frequentierten Eventtypen erlebten Timeouts und Ausfallzeiten

  • Später im Vorfall sahen Benutzer mit Google-Kalender-Integrationen intermittierende Fehler

Was wir zuerst sahen

Um 15:30 UTC lösten automatische Warnmeldungen wegen erhöhter Datenbanklast aus. Erste Untersuchungen zeigten steigende Average Active Sessions (AAS) und rasch zunehmende Statement-Latenz, während der gesamte Traffic innerhalb der erwarteten Grenzen blieb.

Screenshot 2026-01-29 at 13.26.06.png

Was diese Grafik zeigt:

  • Ein anhaltender Anstieg aktiver Datenbanksitzungen

  • Sitzungen stauten sich auf, statt schnell abgeschlossen zu werden

  • Ein starkes Signal dafür, dass Abfragen langsamer wurden und nicht der Traffic zunahm

Dies deutete auf eine Änderung an unserer Anwendung hin und nicht auf einen Traffic-Spike, was die Traffic-Analyse bestätigte.

CPU-Auslastung bestätigt den Engpass

Mit steigender Last folgte die CPU-Auslastung der Datenbank.

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

Was diese Grafiken zeigen:

  • CPU-Auslastung steigt deutlich über das Basisniveau

  • Anhaltende Sättigung statt kurzer Spitzen

  • Klare Korrelation mit steigender Abfrage-Latenz

Zu diesem Zeitpunkt war Postgres CPU-gebunden. Abfragen liefen länger, blockierten andere, und die Latenz breitete sich im System aus.

Zeitachse (UTC)

  • 15:30 – Automatische Warnmeldungen wegen hoher DB-Last. Erste Diagnosen zeigten erhöhte DELETE-Aktivität auf APIv2.

  • 15:49 – Wir verschärften die DELETE-Rate-Limits, um den unmittelbaren Druck zu verringern.

  • 16:03 – Weitere Untersuchungen zeigten, dass der Traffic normal war. Die Datenbanklast stieg weiter an.

  • 16:06 – Erste Berichte von enterprise-Kunden, die Eventtypen nicht laden konnten.

  • 16:18 – Vorfall erklärt. CPU-Sättigung führte dazu, dass die Statement-Latenz im gesamten System anstieg.

  • 17:07 – Wir begannen, eine stark belastete Abfrage umzuschreiben, um den Druck auf die Datenbank zu verringern.

  • 17:40 – Das Umschreiben der Abfrage wurde bereitgestellt. Das half, löste das Problem aber nicht vollständig.

Der entscheidende Wendepunkt

Um 17:45 identifizierten wir eine unbeabsichtigte Wechselwirkung:
Eine kürzlich am Montag, dem 26., veröffentlichte Funktion führte die Buchungssuche in KBar (CMD+K) ein. Dadurch wurde bei jedem Seitenaufruf in der Web-App ein schwerer API-Aufruf ausgeführt.
Um 17:55 wurde die KBar-Änderung in der Produktion zurückgesetzt.

Screenshot 2026-01-29 at 13.31.08.png

Was diese Grafik bestätigt:

  • Ein deutlicher und sofortiger Rückgang der AAS nach dem Zurücksetzen

  • Der Druck durch Datenbankabfragen nahm ab

  • Die Latenz stabilisierte sich kurz darauf

Dies stimmt genau mit dem Zeitpunkt des Rücksetzens überein und bestätigte die KBar-Interaktion als primären Auslöser des Datenbankvorfalls.

  • 18:15 – Die Datenbankleistung stabilisierte sich.
    Der primäre DB-Vorfall war an diesem Punkt behoben.

Aufgedeckte sekundäre Probleme

Nachdem sich die Datenbank erholt hatte, blieb ein kleinerer Teil der Nutzer betroffen.
Nutzer mit Google-Kalender-Integrationen erlebten Fehler aufgrund der Ausschöpfung des Google-API-Kontingents. Dies wurde durch das Wiederholungsverhalten mehrerer Consumer verursacht, während Upstream-Fehler auftraten.

image.png

Was diese Grafik zeigt:

  • Schneller Verbrauch des Kontingents während des Vorfallsfensters

  • Korrelation mit Wiederholungsverhalten statt mit neuem Traffic

  • 18:40 – Grundursache identifiziert: Die Retry-Logik von Atoms aktualisierte Kalender aggressiv.

  • 18:46 – Die Funktionalität von Atoms war vorübergehend unterbrochen. Kalenderereignisse wurden nachgetragen und die Kontingentnutzung sank.

  • 18:54 – Die Leistung von APIv2 blieb leicht beeinträchtigt; ein Teil des Traffics wurde vorübergehend auf Vercel-Endpunkte umgeleitet.

  • 19:30 – APIv2 und Google-Integrationen stabilisierten sich vollständig.

Später identifizierten wir ein weiteres beitragendes Problem:

  • Ein nicht erwarteter, promisifizierter Aufruf führte dazu, dass Node-Prozesse abstürzten, wenn Google-API-Fehler in den globalen Scope gelangten.

Grundursache

Die Hauptursache war eine unerwartete Wechselwirkung zwischen Funktionen:

  • KBar löste bei jedem Seitenaufruf einen schweren API-Aufruf aus

  • Dieser API-Pfad stützte sich auf teure Datenbankabfragen, insbesondere für Nutzer im großen Maßstab mit vielen Buchungen.

  • CPU-Sättigung erhöhte die Abfrage-Latenz im gesamten System

  • Enterprise-Kunden mit stark frequentierten Eventtypen waren am stärksten betroffen

Sekundäre Ausfälle (Ausschöpfung des Google-Kontingents und Instabilität von APIv2) waren nicht die ursprüngliche Ursache, traten aber zutage, als das System unter Stress stand.

Was wir geändert haben

Seit Dienstag haben wir:

  • Die KBar-Kopplung entfernt, die schwere API-Aufrufe auslöste (#27314)

  • Mehrere Abfrageoptimierungen ausgeliefert, um die DB-Last zu reduzieren (#27364, #27319, #27309, #27315)

  • Die Paginierung für /booking/{upcoming,…} von vorgerendert auf On-Demand umgestellt, wodurch die Datenbanknutzung reduziert wurde, während wir den Endpunkt weiter optimieren (#27351)

  • Den nicht erwarteten asynchronen Aufruf behoben, der in APIv2 Node-Prozessabstürze verursachte(#27313)

  • Auf DB-Ebene verschiedene Schutzmaßnahmen eingeführt, um unsere Datenbank in Zeiten extremer Nutzung zu schützen.

  • Aufrufe an DELETE-Endpunkte auf 1 Anfrage pro Sekunde begrenzt (#27359)

Abschluss

Dieser Vorfall wurde nicht durch Traffic-Spitzen oder einen Infrastrukturausfall verursacht. Er wurde durch eine unerwartete Wechselwirkung von Funktionen verursacht, mit kaskadierenden Problemen aufgrund des Retry-Verhaltens downstream und einem subtilen Anwendungsfehler.


Wir entschuldigen uns für die Störung, insbesondere für Kunden im großen Maßstab. Der Vorfall vom Dienstag floss direkt in Verbesserungen dafür ein, wie wir Funktionen ausliefern, unsere Datenbank schützen und kaskadierende Ausfälle handhaben.


Danke für Ihre Geduld und dafür, dass Sie uns an hohen Maßstäben messen.

Beginnen Sie noch heute kostenlos mit Cal.com!

Erleben Sie nahtlose Planung und Produktivität ohne versteckte Gebühren. Melden Sie sich in Sekunden an und beginnen Sie noch heute, Ihre Planung zu vereinfachen, ganz ohne Kreditkarte!