DE · AT · CHRatgeber

Auswertungen bremsen das ERP: Datenlager oder Replikat?

Aktualisiert:

Gilt für: Versionunabhängig; gilt für ERP-Systeme mit eigener Betriebsdatenbank und eigenem Berichtswesen

Kurz gesagt

Nicht jeder langsame Bericht braucht ein Datenlager. Liest ein Bericht eine große Tabelle vollständig, um wenige Zeilen zu liefern, kann ein Index genügen. Belastet er die Betriebsdatenbank zur Zeit des Tagesgeschäfts, hilft ein Nur-Lese-Replikat: Es verlagert die Last auf ein zweites System, bei asynchroner Nachführung mit zeitlichem Abstand zur Betriebsdatenbank. Für Kennzahlen aus mehreren Quellen und langen Verlauf eignet sich ein eigenes Auswertungslager. Stand: Oktober 2026 (DACH).

Das Wichtigste

  • Ursache 1: Die Abfrage liest eine große Tabelle vollständig, obwohl sie wenige Zeilen liefert.
  • Ursache 2: Der Bericht konkurriert auf derselben Datenbank mit dem Tagesgeschäft.
  • Ein Index beschleunigt selektive Zugriffe und Verknüpfungen über eine indexierte Spalte und kostet Schreiblast; ungenutzte Indizes gehören entfernt.
  • Ein Replikat dient lesenden Abfragen. Bei asynchroner Nachführung liegt es zeitlich hinter der Betriebsdatenbank; bei synchroner Nachführung wartet das Festschreiben einer Transaktion.
  • Ein Auswertungslager führt eigene Fakten- und Dimensionstabellen. Kennzahlen entstehen bei der Abfrage oder liegen als materialisierte Sicht vorberechnet vor und sind dann nur so aktuell wie der letzte Ladevorgang.
  • Aufwand (redaktionelle Einschätzung): Index gering, Replikat mittel, Auswertungslager hoch.

Wer im ERP auswertet, arbeitet mit denselben Tabellen wie das Tagesgeschäft. Jede Buchung verlängert den Verlauf, den ein Bericht bei jedem Lauf erneut liest. Bevor Sie Daten trennen oder eine zweite Maschine aufstellen, messen Sie den Bericht: Dauer, gelesene Zeilen, Zahl der Läufe pro Tag und der Zeitpunkt, zu dem er läuft.

Drei Ursachen, die verschiedene Mittel verlangen

Die Abfrage liest mehr, als sie braucht. Ohne passenden Index sucht die Datenbank die Treffer Zeile für Zeile in der ganzen Tabelle. Ein Index kann diese Suche abkürzen, aber nicht bei jeder Abfrage: Der Standardindex (B-Tree) ordnet die Werte einer Spalte und beantwortet damit Gleichheits- und Bereichsvergleiche, auch auf einer Spalte der Verknüpfungsbedingung. Für andere Abfragen gibt es weitere Indexarten, deren Eignung von der Abfrage abhängt. Ob eine Abfrage den Index nutzt, steht im Ausführungsplan. Nach größeren Datenänderungen können die Statistiken veralten; sind sie ungenau, kann die Datenbank einen schlechteren Plan wählen, obwohl der Index vorhanden ist. Läuft eine automatische Aktualisierung, prüfen Sie, ob sie die geänderten Tabellen erfasst.

Der Bericht belegt die Betriebsdatenbank. Eine lange Leseabfrage braucht Arbeitsspeicher und Plattenzugriff auf derselben Maschine, die das Tagesgeschäft verarbeitet. Welchen Datenstand sie sieht, hängt von der Isolationsstufe ab, und wie diese Stufe wirkt, ist je Datenbanksystem umgesetzt. Bei einer Umsetzung mit Momentaufnahmen liest die Stufe Read Committed den Stand vom Beginn der jeweiligen Abfrage, die Stufe Repeatable Read den Stand vom Beginn des ersten Datenzugriffs der Transaktion. Bei einer Umsetzung mit Lesesperren liest die Stufe Read Committed über Lesesperren und liefert einen Stand vom Beginn der Abfrage nur mit eingeschalteter Momentaufnahme-Option; die Stufe Repeatable Read hält die gelesenen Zeilen bis zum Ende der Transaktion gesperrt und lässt andere Transaktionen neue, passende Zeilen einfügen. Prüfen Sie in der Dokumentation Ihres Systems nach, welche Umsetzung gilt. Auch ohne Sperrkonflikt teilen sich Auswertung und Erfassung Prozessorzeit, Arbeitsspeicher und Plattenzugriff. Ob die Erfassung darunter leidet, zeigt die Messung: Dauer und Zeitpunkt des Berichts, Auslastung der Maschine und Antwortzeit einer typischen Buchung im selben Zeitfenster.

Die Datenmenge wächst, die Abfrage nicht. Bleiben Abfrage und Datenhaltung unverändert, wächst die Laufzeit mit dem Bestand. Beispiel: Ein Bericht über die letzten 36 Monate liest nach drei Jahren dreimal so langen Verlauf wie nach dem ersten Jahr (36 Monate gegen 12). Bei gleichbleibendem Buchungsvolumen sind das dreimal so viele Zeilen (Annahme).

Die drei Mittel im Vergleich

Die Tabelle ordnet jedem Symptom das Mittel zu, das es beseitigt, und nennt die Grenze des Mittels. Der Aufwand ist eine redaktionelle Einschätzung, keine Messung.

Symptom Mittel Was sich ändert Aufwand Wann es nicht genügt
Ein einzelner Bericht liest eine große Tabelle vollständig und liefert wenige Zeilen Index und Abfrage prüfen Die Datenbank findet die Zeilen über einen Index statt über die ganze Tabelle gering Greift bei selektiven Zugriffen und bei Verknüpfungen über eine indexierte Spalte; behebt keine Konkurrenz um dieselbe Maschine und kostet Schreiblast
Mehrere Auswertungen belasten die Betriebsdatenbank während des Tagesgeschäfts und brauchen dieselben Tabellen Nur-Lese-Replikat Leseabfragen laufen auf einem zweiten System; die Betriebsdatenbank trägt sie nicht mit mittel Das Replikat hat dieselben Tabellen, dient lesenden Zugriffen und liegt bei asynchroner Nachführung zeitlich hinter der Betriebsdatenbank; Verknüpfungen und Verdichtungen fallen je Abfrage neu an
Kennzahlen aus mehreren Quellen, langer Verlauf und feste Auswertungen mit bestimmtem Aktualisierungsrhythmus Auswertungslager Eigenes Modell aus Fakten- und Dimensionstabellen; die Auswertung liest nicht mehr die Betriebstabellen hoch Vorberechnete Kennzahlen und materialisierte Sichten sind nur so aktuell wie der letzte Ladevorgang; Datenmodell und Ladevorgänge brauchen laufende Pflege

Hinter den drei Mitteln steht jeweils eine andere Änderung. Ein Index ändert die Zugriffsart: Bei einem selektiven Zugriff muss die Datenbank die Tabelle nicht mehr vollständig lesen. Der Index wird bei jeder Änderung mitgeführt, kostet also Schreiblast und Speicherplatz; ein Index, den keine Abfrage nutzt, gehört entfernt.

Ein Replikat ändert den Ort. Das Datenbanksystem führt eine zweite Kopie der Datenbank nach, indem es das Änderungsprotokoll der Betriebsdatenbank überträgt. Die Kopie dient lesenden Abfragen, Schreibvorgänge bleiben auf der Betriebsdatenbank; der Zweck ist, die Abfragelast auf mehrere Systeme zu verteilen. Wie aktuell die Kopie ist, bestimmt die Art der Nachführung: Bei asynchroner Nachführung läuft die Übertragung im Hintergrund, die Kopie bleibt zeitlich hinter der Betriebsdatenbank zurück, und die Verzögerung lässt sich in Sekunden messen. Bei synchroner Nachführung wartet das Festschreiben einer Transaktion, bis die Kopie bestätigt hat; die Kopie ist dann aktueller, das Schreiben aber langsamer. Ist die Kopie strikt lesend eingerichtet, laufen darauf keine Auswertungen, die Zwischentabellen anlegen; das prüfen Sie vorher. Kann die Kopie mit langen Abfragen nicht Schritt halten, entscheidet die Konfiguration, ob die Nachführung wartet oder der Bericht abgebrochen wird.

Ein Auswertungslager, auch Datenlager genannt, ändert die Form der Daten. Die Daten liegen dort in einem eigenen Modell aus Fakten- und Dimensionstabellen (Sternschema); die Betriebstabellen werden nicht mehr für jede Auswertung verknüpft. Kennzahlen entstehen bei jeder Abfrage aus diesem Modell, oder sie liegen als materialisierte Sicht vorberechnet vor, die ein Ladevorgang neu erzeugt. Spaltenweise Speicherung ist auf große Auswertungstabellen zugeschnitten. Vorberechnete Kennzahlen und materialisierte Sichten sind nur so aktuell wie der letzte Ladevorgang, und ein vollständiger Neuaufbau kann Leser blockieren, solange er läuft. Wann zusätzlich zum ERP ein Auswertungswerkzeug sinnvoll ist, steht im Artikel BI-Werkzeug oder ERP-Berichte.

Ein Rechenbeispiel

Beispielrechnung mit erfundenen Zahlen. Angenommen werden 1.200.000 Auftragspositionen aus 36 Monaten und ein Bericht “Umsatz je Kunde, letzte zwölf Monate”, der 40-mal pro Arbeitstag läuft.

Angabe Ohne Index Mit Index
gelesene Zeilen je Lauf (Annahme) 1.200.000 4.000
Dauer je Lauf (Annahme) 38 Sekunden 0,5 Sekunden
Läufe pro Arbeitstag 40 40
Last pro Arbeitstag 1.520 Sekunden = 25 Minuten 20 Sekunden 20 Sekunden

Die Rechnung dazu: 40 × 38 = 1.520 Sekunden, das sind 25 Minuten 20 Sekunden; 40 × 0,5 = 20 Sekunden. Mit Index belegt der Bericht die Betriebsdatenbank nach dieser Annahme also noch 20 Sekunden statt 25 Minuten pro Arbeitstag.

Wer den Bericht stattdessen auf ein Replikat verlagert, ändert die Abfrage nicht: Die 25 Minuten Last wandern von der Betriebsdatenbank auf ein zweites System, und dort liest die Abfrage dieselben Tabellen; die Laufzeit des einzelnen Berichts sinkt dadurch nicht zwangsläufig. Ein Auswertungslager kann zusätzlich die Laufzeit senken, wenn der Bericht dort vorberechnete Kennzahlen oder spaltenweise gespeicherte Tabellen liest und die Betriebstabellen nicht mehr verknüpfen muss.

Typische Fehler

  • Einen Index ohne Nutzungsnachweis anlegen: Der Index wird bei jeder Änderung mitgeführt und bremst damit Buchungen; ein Index, den keine Abfrage nutzt, gehört entfernt.
  • Ein Replikat als Ersatz für ein Datenmodell einrichten: Auf dem Replikat liegen dieselben Betriebstabellen; ein eigenes Modell aus Fakten- und Dimensionstabellen, das mehrere Quellen und langen Verlauf zusammenführt, entsteht dadurch nicht. Verknüpfungen und Verdichtungen rechnet jede Abfrage neu.
  • Lange Abfragen auf dem Replikat fahren, ohne die Verzögerung zu prüfen: Ein Abfragekonflikt kann einen laufenden Bericht abbrechen oder die Nachführung aufhalten.
  • Eine materialisierte Sicht ohne Pflegeplan anlegen: Ohne regelmäßigen Ladevorgang sinkt die Aktualität, und ein vollständiger Neuaufbau kann Leser blockieren.
  • Je Kennzahl nicht festhalten, welches System führt: Zwei Systeme liefern dann unterschiedliche Werte für dieselbe Zahl. Siehe Single Source of Truth.

So gehen Sie vor

  1. Messen Sie den Bericht: Dauer, gelesene Zeilen und Zahl der Läufe pro Tag.
  2. Prüfen Sie die Abfrage: Eine vollständige Tabellenlesung für wenige Treffer spricht für Index und Abfrage; prüfen Sie dabei auch die Statistiken.
  3. Prüfen Sie den Zeitpunkt: Belastet der Bericht die Betriebsdatenbank während des Tagesgeschäfts, ist ein Replikat der nächste Schritt. Klären Sie dabei, wie aktuell die Kopie sein muss und ob die Nachführung asynchron oder synchron eingerichtet ist.
  4. Prüfen Sie den Bedarf an einem Modell: mehrere Quellen, langer Verlauf und feste Kennzahlen sprechen für ein Auswertungslager.
  5. Nehmen Sie das kleinste Mittel, das das Symptom beseitigt, und messen Sie nach der Änderung erneut.
  6. Halten Sie je Bericht fest, aus welchem System die Zahl kommt und wie aktuell sie ist. Wie Sie Berichte ordnen, beschreibt der Artikel Berichtswesen aufbauen.

Häufige Fragen

Reicht ein Index nicht immer?

Nein. Ein Index hilft, wenn ein Bericht wenige Zeilen sucht und die Datenbank sonst die ganze Tabelle Zeile für Zeile liest; ein Index auf einer Spalte der Verknüpfungsbedingung kann auch Abfragen mit Verknüpfungen beschleunigen. Für einen Bericht, der ohnehin alle Zeilen einer großen Tabelle liest oder über viele Zeilen verdichtet, ändert ein Index an dieser Arbeit wenig. Ein Replikat verlagert dann die Last auf ein zweites System, ohne die Abfrage zu ändern; ein Auswertungslager kann zusätzlich die Laufzeit senken, wenn der Bericht dort vorberechnete Kennzahlen oder spaltenweise gespeicherte Tabellen liest.

Wie aktuell sind Zahlen aus einem Replikat?

Das hängt von der Nachführung ab. Läuft sie asynchron, wird das Änderungsprotokoll im Hintergrund übertragen und die Kopie bleibt zeitlich hinter der Betriebsdatenbank zurück; die Verzögerung lässt sich in Sekunden messen. Läuft sie synchron, wartet das Festschreiben einer Transaktion, bis die Kopie bestätigt hat: Die Kopie ist dann aktueller, das Schreiben aber langsamer. Für abgeschlossene Monate genügt der Stand auch bei asynchroner Nachführung; soll eine Übersicht während der Erfassung mitlaufen, ist der Abstand ein Risiko.

Ersetzt ein Replikat ein Auswertungslager?

Nicht automatisch. Auf dem Replikat liegen dieselben Tabellen wie in der Betriebsdatenbank; Verknüpfungen und Verdichtungen fallen bei jeder Abfrage neu an. Ein Auswertungslager hält ein eigenes Modell aus Fakten- und Dimensionstabellen, führt mehrere Quellen und langen Verlauf zusammen und trennt Verlaufsdaten von den Betriebsdaten. Ob es schneller antwortet, hängt davon ab, ob Kennzahlen vorberechnet oder die Tabellen spaltenweise gespeichert sind.

Was ist der sinnvollste erste Schritt?

Messen. Notieren Sie Dauer, gelesene Zeilen und Läufe pro Tag für den Bericht, der stört. Zeigt der Ausführungsplan eine vollständige Tabellenlesung für wenige Treffer, prüfen Sie zuerst Index und Abfrage. Diese Änderung ist die kleinste; messen Sie danach erneut, ob sie die Laufzeit senkt.

Quellen

  1. PostgreSQL 18 Documentation, Chapter 26.2: Log-Shipping Standby Servers (Streaming-Replikation, asynchrone und synchrone Nachführung, Verzögerung)PostgreSQL Global Development Group · abgerufen am
  2. PostgreSQL 18 Documentation, Chapter 26.4: Hot Standby (Nur-Lese-Zugriff, Abfragekonflikte)PostgreSQL Global Development Group · abgerufen am
  3. PostgreSQL 18 Documentation, Chapter 11.1: Introduction (Indexes)PostgreSQL Global Development Group · abgerufen am
  4. PostgreSQL 18 Documentation, Chapter 11.2: Index Types (B-Tree, Hash, GiST, GIN, BRIN)PostgreSQL Global Development Group · abgerufen am
  5. PostgreSQL 18 Documentation, Chapter 13.2: Transaction Isolation. Umsetzung mit Momentaufnahmen: Read Committed liest den Stand beim Start der jeweiligen Abfrage; Repeatable Read den Stand beim Beginn des ersten nicht transaktionssteuernden Statements der TransaktionPostgreSQL Global Development Group · abgerufen am
  6. SET TRANSACTION ISOLATION LEVEL (Transact-SQL), Abschnitt Arguments. Umsetzung mit Lesesperren: Read Committed liest über Lesesperren und liefert den Stand je Statement nur bei eingeschalteter READ_COMMITTED_SNAPSHOT-Option; Repeatable Read hält Lesesperren bis zum Ende der Transaktion und lässt neue passende Zeilen zuMicrosoft Learn · abgerufen am
  7. PostgreSQL 18 Documentation, Chapter 24.1.3: Updating Planner Statistics (veraltete Statistiken können schlechtere Abfragepläne ergeben; Autovacuum führt ANALYZE automatisch aus)PostgreSQL Global Development Group · abgerufen am
  8. PostgreSQL 18 Documentation, Chapter 39.3: Materialized ViewsPostgreSQL Global Development Group · abgerufen am
  9. PostgreSQL 18 Documentation, SQL Command: REFRESH MATERIALIZED VIEWPostgreSQL Global Development Group · abgerufen am
  10. MySQL 8.4 Reference Manual, Chapter 19.4.5: Using Replication for Scale-OutOracle Corporation · abgerufen am
  11. MySQL 8.4 Reference Manual, Chapter 19.1.7.1: Checking Replication StatusOracle Corporation · abgerufen am
  12. Columnstore indexes: OverviewMicrosoft Learn · abgerufen am
  13. Star schema overviewMicrosoft Learn · abgerufen am