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.
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:
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:
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.