WAF++ WAF++
Back to WAF++ Homepage

WAF-PERF-040 – Database Performance Baseline & Index Strategy

Beschreibung

Alle Produktionsdatenbanken MÜSSEN Performance Insights oder äquivalentes Monitoring aktiv haben. Slow-Query-Logging MUSS aktiviert sein mit einer definierten Schwelle (Standard: 1000ms). Eine Index-Strategie MUSS für alle Tabellen mit signifikanter Lese-/Schreiblast existieren. Performance-Baselines (P50/P95/P99 Ausführungszeiten) MÜSSEN für die Top-20-Queries dokumentiert sein.

Rationale

Fehlende Indizes auf hochfrequentierten Tabellen sind die häufigste einzelne Ursache für Datenbankperformance-Probleme. Ein Full Table Scan auf einer Tabelle mit 10 Millionen Zeilen kann die gesamte Datenbankkapazität sättigen und Cascading-Timeouts über den gesamten Anwendungsstack auslösen. Ohne Slow-Query-Log gibt es keine Möglichkeit, solche Probleme proaktiv zu identifizieren.

Bedrohungskontext

Risiko Beschreibung

Full Table Scans

Fehlende Indizes → Vollständige Tabellenscans → I/O-Sättigung und CPU-Spike.

Connection-Pool-Erschöpfung

Langsame Queries blockieren Verbindungen → Pool erschöpft → Neue Requests können nicht verbinden.

Query-Regression nach Schema-Änderung

Neuer Index für ein Feature entfernt den Query-Plan eines anderen Features – unbemerkt.

Kein Diagnostic-Zugang bei Incident

Performance Insights nicht aktiv → Incident kann nicht diagnostiziert werden.

Anforderung

  • Performance Insights MUSS auf allen Produktions-RDS/Aurora/Cloud SQL-Instanzen aktiv sein

  • Slow-Query-Log MUSS aktiv sein mit Schwelle ⇐ 1000ms

  • Index-Strategie MUSS für Tabellen mit > 1M Rows und hoher Query-Frequenz dokumentiert sein

  • Performance-Baseline (P50/P95/P99) MUSS für Top-20-Queries vorliegen

Implementierungsanleitung

  1. Performance Insights aktivieren: Bei RDS: performance_insights_enabled = true

  2. Slow-Query-Log konfigurieren: log_min_duration_statement = 1000 (PostgreSQL)

  3. Slow Queries analysieren: Wöchentlich pg_stat_statements / MySQL Slow Query Log reviewen

  4. Top-20-Queries identifizieren: Nach Gesamtausführungszeit sortiert; EXPLAIN ANALYZE ausführen

  5. Index-Strategie dokumentieren: docs/database/index-strategy.yml für jede Haupttabelle

  6. Fehlende Indizes anlegen: CREATE INDEX CONCURRENTLY für Online-Migration

  7. Connection Pooling: PgBouncer oder RDS Proxy für Connection-Pool-Management

Reifegrad-Abstufung

Level Bezeichnung Kriterien

1

Keine Analyse

Slow-Query-Log nicht aktiv; Datenbankperformance unbekannt; Indizes nur ad-hoc.

2

Slow Queries bekannt

Slow-Query-Log aktiv; Reviews nach Incidents; Primärschlüssel und einige FK-Indizes.

3

Baseline dokumentiert

Performance Insights aktiv; Index-Strategie dokumentiert; monatlicher Review.

4

Automatisierte Analyse

Automatische Slow-Query-Tickets; Regression-Tests im CI; Unused-Index-Cleanup.

5

Continuous Optimization

Query-SLOs; automatisches Tuning; DB-Version-Upgrades gegen Baseline getestet.

Terraform Checks

waf-perf-040.tf.aws.rds-performance-insights

Prüft: RDS-Instanzen müssen Performance Insights und Enhanced Monitoring aktiviert haben.

Compliant Non-Compliant
resource "aws_db_instance" "main" {
  identifier = "db-payment"
  engine     = "postgres"
  performance_insights_enabled = true
  monitoring_interval          = 60
  monitoring_role_arn          = aws_iam_role.rds_monitoring.arn
  enabled_cloudwatch_logs_exports = ["postgresql"]
  deletion_protection = true
}
resource "aws_db_instance" "main" {
  identifier = "db-payment"
  engine     = "postgres"
  # Kein Performance Insights
  # Kein Enhanced Monitoring
  # Keine CW-Log-Exports
  # WAF-PERF-040 Violation
}

Remediation: performance_insights_enabled = true, monitoring_interval = 60, enabled_cloudwatch_logs_exports = ["postgresql"] setzen.

Evidenz

Typ Pflicht Beschreibung

Config

✅ Pflicht

Performance-Insights-Konfiguration auf Produktionsdatenbanken (Screenshot oder Terraform).

Governance

✅ Pflicht

Index-Strategie-Dokument für hochfrequente Tabellen.

Process

Optional

Monatlicher Slow-Query-Review-Bericht mit Action Items.

Config

Optional

Query-Performance-Baseline (P50/P95/P99 für Top-20-Queries).