Performance: N+1 Query im Stats-Endpoint durch Aggregation ersetzen #82

Open
opened 2026-03-30 20:21:07 +00:00 by David · 0 comments
Collaborator

Beschreibung

Der Pipeline-Stats-Endpoint in backend/api/pipeline.py:62-123 führt 10+ separate COUNT-Queries aus (total, autopilot, klärfall, abgelehnt, running, etc.). Bei jeder Dashboard-Ladung werden alle Queries einzeln ausgeführt.

Hintergrund

Jeder Dashboard-Besuch triggert einen Stats-Abruf. Mit 10 separaten Queries pro Abruf und mehreren gleichzeitigen Nutzern wird die DB unnötig belastet.

Akzeptanzkriterien

  • Stats werden in einer einzigen SQL-Query mit conditional aggregation berechnet
  • Antwortzeit des Stats-Endpoints halbiert sich (messbar)
  • Ergebnis ist identisch zum bisherigen Output
  • Test: Stats-Response enthält alle erwarteten Felder

Technische Hinweise

  • Betroffene Datei: backend/api/pipeline.py:62-123
  • Ansatz: func.sum(case((Ticket.status == 'x', 1), else_=0)) in einer Query
  • Migration nötig: nein

Aufwand: S

## Beschreibung Der Pipeline-Stats-Endpoint in `backend/api/pipeline.py:62-123` führt 10+ separate COUNT-Queries aus (total, autopilot, klärfall, abgelehnt, running, etc.). Bei jeder Dashboard-Ladung werden alle Queries einzeln ausgeführt. ## Hintergrund Jeder Dashboard-Besuch triggert einen Stats-Abruf. Mit 10 separaten Queries pro Abruf und mehreren gleichzeitigen Nutzern wird die DB unnötig belastet. ## Akzeptanzkriterien - [ ] Stats werden in einer einzigen SQL-Query mit conditional aggregation berechnet - [ ] Antwortzeit des Stats-Endpoints halbiert sich (messbar) - [ ] Ergebnis ist identisch zum bisherigen Output - [ ] Test: Stats-Response enthält alle erwarteten Felder ## Technische Hinweise - Betroffene Datei: `backend/api/pipeline.py:62-123` - Ansatz: `func.sum(case((Ticket.status == 'x', 1), else_=0))` in einer Query - Migration nötig: nein ## Aufwand: S
Sign in to join this conversation.
No description provided.