Retention-Services

Retention-Services löschen oder archivieren historische Daten nach einer Aufbewahrungsfrist. Einzelne Services lassen sich mit Retention:*:Enabled=false deaktivieren. Idempotency-Keys besitzen immer eine feste Lebensdauer von 24 Stunden.

Übersicht

ServiceZweckDefaultGating
ExecutionRetentionServiceTrimt WorkflowExecutions30 dRetention:Executions:Enabled
AuditLogRetentionServiceTrimt AuditLogs + gzip/SHA-256-Archive365 dRetention:AuditLog:Enabled
WorkflowVersionsRetentionServiceBehält N Versionen pro Workflow50Retention:WorkflowVersions:Enabled
SupportEventRetentionServiceTrimt SupportEvents90 dRetention:SupportEvents:Enabled, leader-only
NotificationRetentionServiceTrimt terminale NotificationDeliveryAttempt + verwaiste NotificationSuppressionState90 dRetention:Notifications:Enabled, leader-only
TriggerReceiptRetentionServiceTrimt TriggerDeliveryReceipts — eine Zeile je beobachtetem Trigger-Signal und damit die am schnellsten wachsende Tabelle hier. TriggerDeliveryCheckpoints wird nie abgeräumt: eine Zeile je Trigger-Node, in-place aktualisiert7 dRetention:TriggerReceipts:Enabled, leader-only
IdempotencyKeyCleanupServiceTrimt Idempotency-Keys nach 24 h TTL24 himmer an (nicht disablebar)

Andere Background-Services

ServiceZweckGating
TriggerOrchestrator + QuartzTrigger-Scan (5 s) + Quartz-Cron für scheduleTriggerleader-only (im Cluster)
ExecutionDispatchWorkerGeleaster Dispatch persistierter Pending Executions aus der DB-Outboxleader-only (im Cluster)
MaintenanceWindowSnapshotServiceHält Maintenance-Window-Snapshot pro Node aktuellimmer an
WorkflowStatsRefresherBerechnet WorkflowStats-Aggregateimmer an
ExecutionStatsRollupServiceSchreibt die Stunden-Buckets der Dashboard-Historie fort (ExecutionHourlyStat inkl. Laufzeit-Histogramm, FailureCauseHourlyStat); Sweep alle 60 s, Erstbefüllung in Tages-ChunksStats:Rollup:Enabled (default an), leader-only
DashboardAggregateWarmupBerechnet die Dashboard-Aggregate für 24 h / 7 d / 30 d nach dem Start und nach Ordner-Änderungen vor, damit auch der erste Aufruf den Cache trifftDashboard:Warmup:Enabled (default an), pro Node
RevokedTokensCleanupServiceDaily Sweep von RevokedTokensimmer an
HubRevocationSweeperSchließt SignalR-Connections bei Logout/Deactivationimmer an
SupportEventFlushServiceGepufferter Flush von Support-Events in DBimmer an (wenn DB-Projektion an)
ClusterLeaderService / ClusterFencingHost / ClusterFailoverRecoveryHostLeader-Lease, Fencing, Failover-Recoverynur Cluster:Enabled

Stats-Aggregate

Dashboard und Workflow-Listen lesen ein precomputed WorkflowStats-Aggregate statt WorkflowExecutions pro Request zu scannen. Refresh durch WorkflowStatsRefresher.

KeyDefaultEffect
Stats:RefreshIntervalMinutes5Aggregate-Refresh-Interval (1–1440; ein nicht lesbarer Wert lässt nur den Durchlauf scheitern, der nächste folgt nach 5 Minuten)
Stats:WindowDays7Zeitfenster der aggregierten KPIs
Stats:Rollup:EnabledtrueVorberechnete Stunden-Buckets für die Dashboard-Historie. Aus geschaltet rechnet das Dashboard jedes Fenster wieder aus den Rohzeilen — korrekt, aber auf großen Beständen deutlich langsamer

Die Stunden-Buckets tragen die historischen Dashboard-Zahlen (Status-Zähler, Retry-Anteil, Dauer, Fehlerursachen). Median und P95 der Laufzeit kommen aus Histogrammen und sind auf wenige Prozent genau. Ist die Erstbefüllung abgeschlossen, deckt sie jedes Fenster, auch wenn die Historie kürzer als das Fenster ist. Laufende Werte — aktive Läufe, Queue-Tiefe, Heartbeats — werden nie vorberechnet. Fenster unter einem Tag (das 1-h-Fenster des Dashboards) rechnet das Dashboard immer aus den Rohläufen, weil Stunden-Buckets bis zu eine Stunde an Läufen vor dem Fenster mitzählen würden. Solange die Erstbefüllung ein Fenster noch nicht deckt, liefert das Dashboard dort weiterhin die live gerechneten Zahlen. Dasselbe gilt, wenn die Buckets nicht mehr fortgeschrieben werden — Rollup abgeschaltet oder länger als zehn Minuten fehlerhaft —, damit das Dashboard nie Buckets zeigt, denen die letzten Stunden fehlen. Buckets, die älter als 32 Tage sind (längstes Dashboard-Fenster von 30 Tagen plus Puffer), löscht der Rollup-Dienst selbst; eine eigene Aufbewahrungs-Einstellung dafür gibt es nicht.

GET /api/stats/dashboard liefert den letzten Refresh-Stand, keine Live-Zahlen. Settings-Mutationen schreiben SETTINGS_STATS_UPDATED ins Audit-Log.

Alle Kapitel