Freigeben über


Speicherung von Aktivitätsdaten

In diesem Thema werden die Speicherung von Aktivitätsdaten und die Leistungsprobleme beschrieben, die durch das Anwachsen der Aktivitätstabellen im Laufe der Zeit entstehen, und es wird erläutert, wie die Geschäftsaktivitätsüberwachung (Business Activity Monitoring, BAM) diese Leistungsprobleme mit separaten Tabellen für laufende und abgeschlossene Aktivitäten löst. Außerdem wird in diesem Thema das Onlinefenster für die Datenabfrage beschrieben, und Sie erfahren, wie Sie die Leistung der Geschäftsaktivitätsüberwachung durch Partitionierungen steigern können.

Das Grundkonzept der Speicherung von Aktivitätsdaten besteht darin, dass für jeden Aktivitätstyp eine eigene Tabelle vorhanden ist, in der jeder Datensatz eine andere (z. B. laufende oder fertig gestellte) Aktivitätsinstanz darstellt.

Wenn die Aktivität in diesem Beispiel eine Bestellung (Purchase Order, PO) wäre, sähe die Tabelle folgendermaßen aus:

PO# RecvTime City Quantity (Menge) ShipTime DeliveryTime
123 8:00 Uhr Seattle 150 8:24 Uhr 12:45
124 8:30 Uhr Seattle 234 8:45 Uhr 13:20 Uhr
125 8:35 Uhr Redmond 87 9:05 Uhr 14:30 Uhr
126 8:45 Uhr Seattle 450 9:20 Uhr 15:10 Uhr
127 8:55 Uhr Redmond 200 9:30 Uhr <NULL>
128 8:57 Uhr Seattle 340 9:20 Uhr 15:05 Uhr
129 9:12 Uhr Seattle 120 9:45 Uhr <NULL>
130 9:30 Uhr Redmond 25 10:15 Uhr <NULL>
131 9:45 Seattle 250 10:35 Uhr <NULL>
132 10:00 Uhr Redmond 100 <NULL> <NULL>
133 10:15 Uhr Seattle 230 <NULL> <NULL>
134 10:25 Uhr Redmond 45 <NULL> <NULL>

Beim Empfang einer neuen Bestellung fügt BAM eine neue Zeile in diese Tabelle ein und legt Zellen in einigen der Spalten (z. B. RecvTime, City oder Quantity) auf Werte ungleich NULL fest. Wenn Sie diese Bestellung später genehmigen und versenden, legt BAM ShipTime auf einen Wert ungleich NULL fest. Wenn Sie die Lieferung später empfangen und bestätigen, legt BAM DeliveryTime auf einen Wert ungleich NULL fest.

Die Leistung dieser vereinfachten Implementierung verringert sich mit der Zeit immer weiter. Anfangs ist die Leistung durch die Anzahl der Transaktionen begrenzt, die der SQL-Server ausführen kann (also hauptsächlich CPU-abhängig). Nach einiger Zeit sinkt sie jedoch erheblich. Zugleich erhöht sich die durchschnittliche Warteschlangenlänge für Datenträger-E/A-Vorgänge über die akzeptablen Grenzwerte hinaus.

Screenshot: Durchschnittliche Warteschlangenlänge für Datenträger-E/A über die zulässigen Grenzwerte hinaus
Schreibleistung von BAM im Vergleich zur Warteschlangenlänge des Datenträgers

Der Grund dafür ist, dass die Tabellengröße zunimmt, je mehr Instanzen des Geschäftsprozesses fertig gestellt werden. Beim ersten Mal führt die UPDATE-Anweisung der gespeicherten Prozedur beispielsweise dazu, dass im geclusterten Index nach der Bestellnummer gesucht wird und einige Seiten im Speicher gelesen werden. Da die Instanzen des Bestellvorgangs unabhängig sind (einige nehmen viel Zeit in Anspruch, andere werden schon nach kurzer Zeit fertig gestellt), kann der nächste Aufruf an die gespeicherte Prozedur für eine andere Instanz der Bestellung erfolgen, weshalb andere Datenseiten im Speicher gelesen werden müssen. Solange die Gesamtanzahl der Bestelldatensätze gering ist, werden sämtliche Datenseiten von SQL Server im Speicher zwischengespeichert. Mit zunehmender Datensatzanzahl verringert sich die Cachetrefferquote. Für jeden Vorgang ist dann ein physikalischer Lesevorgang auf dem Datenträger erforderlich. In dieser Situation kann die Tabelle verständlicherweise nicht abgefragt werden.

BAM-Tabellen

Zur Vermeidung dieses Problems verwendet BAM zwei separate Tabellen - eine für die gerade laufenden Aktivitäten und eine für die abgeschlossenen Aktivitäten. Dies wird in der folgenden Abbildung veranschaulicht:

Abbildung, die zeigt, wie BAM zwei separate Tabellen verwendet.
BAM-Tabellen

Der Grundgedanke besteht hier darin, dass zwei Tabellen verwendet werden: eine relativ kleine Tabelle mit Aktualisierungen und eine andere Tabelle, deren Umfang zunimmt, auf die jedoch inkrementell zugegriffen wird (nur INSERT-Vorgänge). In diesem Beispiel befinden sich nur die gerade verarbeiteten Bestellungen in der aktiven Tabelle. Alle bereits gelieferten Bestellungen werden in der vervollständigten Tabelle abgelegt.

Aufgrund des Triggers ist diese Tabellenstruktur zwar anfangs langsamer als ein INSERT- oder UPDATE-Vorgang in einer einzelnen Tabelle, die Schreibleistung bleibt jedoch im Laufe der Zeit stabil.

Onlinefenster für Aktivitätsdaten

Durch die Speicherung von Aktivitäten werden in erster Linie Abfragen für aktuelle oder erst kürzlich abgeschlossene Aktivitäten verarbeitet. BAM archiviert und löscht dann sehr alte, abgeschlossene Aktivitäten aus der primären BAM-Importdatenbank. Die Aktivitätsdaten durchlaufen also BAM und sind während eines konfigurierbaren Onlinefensters für Abfragen verfügbar.

BAM-Partitionierung

Um höhere Leistung zu ermöglichen und Ausfallzeiten zu vermeiden, findet bei der Speicherung von Aktivitäten eine Partitionierung statt. Sie erfolgt anhand eines Zeitstempels, der beim Abschluss der Aktivität erstellt wurde. Die Geschäftsaktivitätsüberwachung erreicht dies durch regelmäßigen Austausch der vervollständigten Tabelle durch eine andere, leere Tabelle mit völlig identischem Format. Anschließend werden die nächsten abgeschlossenen Aktivitäten in der neuen Tabelle abgelegt, während die Geschäftsaktivitätsüberwachung die alte Tabelle nur für Abfragen beibehält. Dies wird in der folgenden Abbildung veranschaulicht:

Abbildung, die zeigt, wie die weiteren abgeschlossenen Aktivitäten in die neue Tabelle eingefügt werden, während BAM die alte nur für Abfragen behält.
Austauschen von BAM-Partitionen

Sobald sich eine Partition vollständig außerhalb des Onlinefensters befindet, wird sie von BAM archiviert und anschließend gelöscht. Damit sich dieser Vorgang dem Benutzer weniger komplex darstellt, behält BAM auch eine partitionierte Ansicht bei. Sie hat etwa folgende Form:

SELECT * FROM Active   
UNION ALL   
SELECT * FROM Completed   
UNION ALL  
  

Diese Ansicht erstellt BAM automatisch bei jedem Erstellen oder Löschen einer Partition neu.

Beachten Sie folgende Hinweise zur BAM-Partitionierung:

  • Der Name der partitionierten Ansicht lautet bam_<ActivityName>_AllInstances. Diese Ansicht ist nicht für direkte Abfragen gedacht, kann aber bei der Fehlerbehebung für die BAM-Instrumentation hilfreich sein. Sie sollten die Daten aus den jeweiligen Ansichten für die einzelnen Kategorien von Geschäftsbenutzern abfragen, die auf dieser Ansicht basieren. Weitere Informationen finden Sie unter Abfragen von Instanzdaten.

  • Sie legen das Onlinefenster fest, indem Sie die Werte für OnlineWindowTimeUnit und OnlineWindowLength im Datensatz für die aktuelle Aktivität in der Tabelle bam_Metadata_Activities in der primären Importdatenbank ändern.

  • Das DTS-Paket BAM_DM_<ActivityName> führt die Partitionierung und Archivierung/Bereinigung durch. Bei jeder Ausführung dieses Pakets wird eine andere Partition gekürzt, und es werden alle Partitionen archiviert/gelöscht, die außerhalb des Onlinefensters liegen.

  • Wenn Sie keine Archivdatenbank konfiguriert haben, löscht BAM die veralteten Aktivitätsdaten, ohne sie zu archivieren.

Weitere Informationen

Dynamische BAM-Infrastruktur