Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn Sie Tausende oder Millionen von Datensätzen in Dataverse erstellen oder aktualisieren müssen, können die Entscheidungen, die Sie treffen, Stunden Zeit sparen, damit das Projekt für Massenoperationen abgeschlossen werden kann. In diesem Artikel werden die Faktoren beschrieben, die sich auf die Leistung auswirken, und die Optionen zum Erstellen von Clientanwendungen, die die Leistung für Massenvorgänge optimieren. Außerdem sollten andere Faktoren berücksichtigt werden, z. B. die Anzahl der Datensätze, die Datensatzgröße, die Netzwerklatenz und die Datenkomplexität.
Tabellentyp
Der Typ der Tabelle, die Sie zum Speichern Ihrer Daten auswählen, hat die größten Auswirkungen auf den Durchsatz, den Sie mit Massenvorgängen erwarten können. Dataverse bietet zwei Arten von Tabellen: Standard und elastisch.
- In einer Standardtabelle werden Daten mit Azure SQL gespeichert. Standardtabellen bieten Transaktionsunterstützung und größere Funktionen für die Modellierung von Beziehungen.
- Eine elastische Tabelle speichert Daten mit Azure Cosmos DB. Flexible Tabellen werden automatisch horizontal skaliert, um große Datenmengen und hohe Durchsatzmengen mit geringer Latenz zu verarbeiten. Elastische Tabellen eignen sich für Anwendungen, die unvorhersehbare, spitzenartige oder schnell wachsende Belastungen aufweisen.
Wenn die Datenladezeiten Ihr Hauptanliegen sind, bieten elastische Tabellen die beste Leistung. Erfahren Sie, wann Sie elastische Tabellen verwenden.
Geschäftslogik
Dataverse bietet die Möglichkeit, zusätzliche Geschäftslogik hinzuzufügen, wenn Datensätze mithilfe von Plug-Ins erstellt oder aktualisiert werden. Plug-Ins können für die synchrone Ausführung vor oder innerhalb der Transaktion eines Standardtabellenvorgangs registriert werden. Flexible Tabellen unterstützen Plug-Ins, die ausgeführt werden können, bevor ein Vorgang gestartet wird, da keine Transaktion vorhanden ist. Jeder Fehler, der während eines synchronen Schritts für eine Standardtabelle oder vor dem Vorgang in einer elastischen Tabelle im Plug-In-Code auftritt, bricht den Vorgang ab. Ein Plug-In-Entwickler kann absichtlich eine Ausnahme auslösen, um den Vorgang abzubrechen, um sicherzustellen, dass die Datenüberprüfungslogik angewendet wird.
Jedes Plug-In, das für die synchrone Ausführung registriert ist, erhöht die Zeit für den Abschluss des Vorgangs. So behalten Sie die Leistung bei:
- Beschränken Sie die Anzahl synchroner Plug-Ins, die für die Vorgänge registriert sind. Fügen Sie Logik hinzu, die mithilfe eines asynchronen Plug-Ins oder Power Automate-Flows asynchron ausgeführt werden soll, es sei denn, die Logik muss zwingend synchron angewendet werden.
- Stellen Sie sicher, dass die Plug-Ins, die Sie haben, in der Logik eingeschränkt sind, die sie ausführen möchten. Während Plug-Ins innerhalb eines großzügigen Zeitlimits von 2 Minuten abgeschlossen werden müssen, beeinträchtigen synchrone Plug-Ins, deren Ausführung länger als zwei Sekunden dauert, die Leistung erheblich.
- Stellen Sie sicher, dass Plug-Ins nur bei Bedarf ausgeführt werden. Plug-Ins für Aktualisierungsvorgänge können so gefiltert werden, dass sie nur ausgeführt werden, wenn bestimmte Spalten aktualisiert werden.
- Stellen Sie sicher, dass Plug-Ins so optimiert sind, dass logik so effizient wie möglich ausgeführt wird. Bei Standardtabellen müssen Sie die Auswirkungen berücksichtigen, die Transaktionen und Datensatzsperren möglicherweise auf die Leistung haben. Informationen zu skalierbarem Anpassungsdesign und anderen bewährten Methoden zum Schreiben von Plug-Ins
- Wählen Sie aus, auf welcher API Ihr Plug-In registriert werden soll. Sie können synchrone Logik anwenden, um effizienter mit den Massenvorgangs-APIs
CreateMultipleundUpdateMultiplezu arbeiten. Erfahren Sie, wie Sie Plug-Ins für CreateMultiple und UpdateMultiple schreiben.
Umgehen der Geschäftslogik
Um das Massenvorgangsprojekt zu beschleunigen, können Sie Plug-Ins deaktivieren, die für die Erstellungs- oder Aktualisierungsvorgänge registriert sind, um die Leistung zu verbessern. Wenn die Geschäftslogik nicht unbedingt erforderlich ist oder Wenn Sie andere Schritte planen, um die Konsistenz der Daten sicherzustellen, können Sie die Plug-In-Schritte manuell deaktivieren und nach Abschluss des Massenvorgangsprojekts erneut aktivieren. Durch deaktivieren von Plug-Ins wird jedoch die Anwendung der Logik von jedem Client deaktiviert. Jeder Benutzer oder ein anderer Prozess, der Dataverse während dieses Zeitraums Daten hinzufügt, hat keine geschäftslogik angewendet.
Als Entwickler einer Clientanwendung, die den Massenvorgang ausführt, können Sie einen optionalen Parameter auf die Anforderungen anwenden, die Sie an die By-Pass-Logik senden. Nur ein Systemadministrator oder Benutzer, denen eine bestimmte Berechtigung gewährt wurde, können diesen Header verwenden. Erfahren Sie mehr darüber, wie Sie benutzerdefinierte Dataverse-Logik umgehen.
Massenvorgangs-APIs
Dataverse stellt Massenvorgangs-APIs bereit, die den größtmöglichen Durchsatz für Erstellungs- und Aktualisierungsvorgänge ermöglichen. Diese APIs umfassen CreateMultiple, UpdateMultipleund UpsertMultiple. Nur für elastische Tabellen können Sie verwenden DeleteMultiple.
Während diese APIs den höchsten Durchsatz bieten, weisen sie die folgenden Einschränkungen für Standardtabellen auf:
- Derzeit nicht für alle Tabellen verfügbar. Jede benutzerdefinierte Tabelle sollte sie unterstützen, aber nicht alle wichtigsten Dataverse-Tabellen unterstützen sie, z. B. "Konto" oder "Kontakt". Sie können eine in der Dokumentation bereitgestellte Abfrage ausführen, um zu ermitteln, ob eine Tabelle diese APIs verwenden kann.
- Keine Verzeihung von Datenfehlern. Sie müssen sicherstellen, dass die daten, die Sie ändern, sorgfältig entfernt und überprüft werden. Jeder Fehler, der innerhalb eines Vorgangs in diesen APIs auftritt, führt dazu, dass der gesamte Vorgang fehlschlägt.
- Die Verwendung in Plug-Ins wird nicht unterstützt. Derzeit sollten diese APIs nur von externen Clientanwendungen verwendet werden.
Massenoperationen sind für alle elastischen Tabellen verfügbar, und elastische Tabellen können Informationen über einzelne Vorgänge zurückgeben, die fehlschlagen. Erfahren Sie mehr über Massenvorgänge mit elastischen Tabellen.
Batch-APIs
Wenn Sie keine Massenvorgangs-APIs verwenden können, können Sie mit dem SDK für .NET ExecuteMultiple und mit der Web-API OData-$batch verwenden.
Verwenden Sie diese API-Schnittstellen, um eine Gruppe von Vorgängen in einer einzigen Anforderung zu bündeln und eine größere Effizienz zu erreichen, da weniger, aber größere Anfragen die gesamte Nutzlast reduzieren, die für jeden Vorgang gesendet und empfangen wird. Eine Clientanwendung muss nicht warten, bis ein Vorgang abgeschlossen ist, bevor die nächste Anforderung gesendet wird.
Jeder Vorgang innerhalb der Anforderung wird sequenziell auf dem Server angewendet, sodass pro Vorgang keine verbesserte Effizienz vorhanden ist. Da die Vorgänge jedoch einzeln ausgeführt werden, können Sie Informationen zu den fehlgeschlagenen Vorgängen abrufen oder den Batch beenden, wenn ein Fehler auftritt. Sie können bis zu 1.000 Vorgänge pro Anforderung senden, aber für optimale Ergebnisse empfehlen wir, mit einer kleineren Zahl zu beginnen und zu experimentieren, um zu bestimmen, welche Größe der Batch für Ihren Fall am besten geeignet ist.
Hinweis
Sowohl Massenvorgänge als auch Batch-APIs sehen erhebliche Leistungssteigerungen, wenn sie parallel verwendet werden. Siehe parallele Anforderungen.
Client-Architektur
Dataverse ist als Datenquelle konzipiert, um mehrere Anwendungen mit einer großen Anzahl gleichzeitiger Benutzer zu unterstützen. Um den Durchsatz zu optimieren, entwerfen Sie Ihren Client so, dass die Stärken von Dataverse verwendet werden.
Engpässe im clientseitigen Code sind die primäre Ursache für Leistungsprobleme. Entwickler können die Funktionen des Codes häufig nicht vollständig verwenden, was sich auf die Leistung auswirken kann. Es ist entscheidend zu optimieren, wie die Clientanwendung die Kerne oder die Rechenleistung der Infrastruktur nutzt, da eine nicht erfolgte Optimierung die Leistung erheblich beeinträchtigen kann. Wenn Sie beispielsweise Azure-Funktionen verwenden, gibt es mehrere Schritte, mit denen die Leistung optimiert werden kann, z. B. das Implementieren der automatischen Skalierung, die Verwendung von Warm-up-Instanzen, das Anpassen der CPU-Auslastung, das Verwenden mehrerer Kerne und die Gleichzeitigkeit.
Grenzwerte für den Serviceschutz
Um eine konsistente Verfügbarkeit und Leistung für jeden zu gewährleisten, wendet Dataverse einige Grenzwerte für die Verwendung von APIs an. Diese Grenzwerte sind darauf ausgelegt, zu erkennen, wann Clientanwendungen außergewöhnliche Anforderungen an Serverressourcen stellen. Massenvorgangsprojekte stellen immer außergewöhnliche Anforderungen dar, daher müssen Sie auf die Fehler vorbereitet sein, die durch Dienstschutzbeschränkungen auftreten. Wenn Sie nicht einige Dienstschutzlimit-Fehler erhalten, haben Sie die Kapazität Ihrer Anwendung nicht maximiert.
Fehler bei Dienstschutzgrenzen sind lediglich eine weitere Art von vorübergehenden Fehlern, auf die Ihr Client vorbereitet sein sollte, beispielsweise ein vorübergehender Verlust der Netzwerkkonnektivität. Eine robuste Clientanwendung muss auf den Fehler reagieren, indem sie warten und wiederholen. Der einzige Unterschied besteht darin, dass Dienstschutzgrenzwerte Ihnen mitteilen, wie lange Sie warten müssen, bevor Sie den Vorgang wiederholen.
Lesen Sie diese Artikel, um mehr zu erfahren:
- Wiederholen von Dataverse-Anforderungen
- Grenzwerte für den Datenschutz von Dataverse-Diensten
- Bewährte Methoden für Azure: Vorübergehende Fehlerbehandlung
Parallele Anforderungen
Sie können eine erhebliche Verbesserung des Durchsatzes sehen, indem Sie Anforderungen parallel senden, aber Sie müssen verstehen, wie sie ordnungsgemäß gesendet werden.
Nicht alle Umgebungen sind gleich
Nicht jede Dataverse-Umgebung weist die gleiche Anzahl von Webserverressourcen auf, die ihm zugeordnet sind. Dataverse skaliert auf die Notwendigkeit der Umgebung, indem weitere Webserverressourcen hinzugefügt werden, um sie zu unterstützen. Eine Produktionsumgebung, die Tausende aktiver Benutzer unterstützt, erfordert mehr Webserver als eine Testumgebung. Wenn Ihre Umgebung über viele Webserver verfügt, kann das Senden von Anforderungen parallel zu einem dramatischen Unterschied beim gesamten Durchsatz führen, den Ihre Clientanwendung erzielen kann.
Empfohlener Grad der Parallelisierung (DOP)
Dataverse gibt Daten in einem Antwortheader zurück, der Ihnen einen empfohlenen Grad an Parallelisierung (DOP) für Ihre Umgebung angibt. Die Leistung verschlechtert sich, wenn Sie mehr parallele Anforderungen senden, als der Antwortheader empfiehlt. Die Clienthardware, die Sie zum Ausführen Der Anwendung verwenden, benötigt möglicherweise mehr CPU-Kerne, um diese vielen Anforderungen parallel zu senden. Möglicherweise müssen Sie weitere Clients verwenden, um den maximalen Durchsatz zu erzielen. Sie können z. B. einen skalierten App-Dienst oder eine Azure-Funktion verwenden.
Je nach clientseitiger Architektur müssen Sie möglicherweise den empfohlenen Grad der Parallelität aufteilen. Wenn Sie beispielsweise über zwei Clients verfügen und Ihr empfohlener DOP 50 ist; konfigurieren Sie jeden Client für die Verwendung von 25.
Deaktivieren der Azure-Affinität
Bei Bedarf können Sie optimale Ergebnisse sehen, wenn Sie Ihren Client so konfigurieren, dass alle verfügbaren Webserver verwendet werden, indem Sie das Azure-Affinitätscookie entfernen , das versucht, Ihre Anwendung einem einzelnen Webserver zuzuordnen. Das Deaktivieren der Azure-Affinität eignet sich nicht für interaktive Anwendungen, die zwischengespeicherte Daten vom Server verwenden, um die Benutzererfahrung zu optimieren.
Optimieren Sie Ihre Verbindung
Wenn Sie .NET verwenden, sollten Sie Konfigurationsänderungen wie die folgende anwenden , um Ihre Verbindung zu optimieren, sodass Ihre Anforderungen nicht durch Standardeinstellungen eingeschränkt sind.
// Bump up the min threads reserved for this app to ramp connections faster - minWorkerThreads defaults to 4, minIOCP defaults to 4
ThreadPool.SetMinThreads(100, 100);
// Change max connections from .NET to a remote service default: 2
System.Net.ServicePointManager.DefaultConnectionLimit = 65000;
// Turn off the Expect 100 to continue message - 'true' will cause the caller to wait until it round-trip confirms a connection to the server
System.Net.ServicePointManager.Expect100Continue = false;
// Can decrease overall transmission overhead but can cause delay in data packet arrival
System.Net.ServicePointManager.UseNagleAlgorithm = false;
Empfehlungszusammenfassung
Befolgen Sie basierend auf den zuvor beschriebenen Faktoren die folgenden Empfehlungen, um den Durchsatz für Massenbetriebsprojekte zu optimieren:
- Wählen Sie einen Tabellentyp aus, der Ihren Anforderungen entspricht. Elastische Tabellen verfügen über viel größere Kapazität für Massenvorgänge.
- Minimieren, Deaktivieren oder Umgehen benutzerdefinierter Geschäftslogik in den von Ihnen verwendeten Tabellen. Konfigurieren Sie Ihre Clientanwendung so, dass benutzerdefinierte Logik bei Bedarf umgangen wird.
- Verwenden Sie Dataverse-Massenvorgangs-APIs, wenn Möglich, andernfalls Batch-APIs verwenden.
- Entwerfen Sie Ihre Client-Anwendung so, dass sie vorübergehende Fehler verwaltet, einschließlich der Fehler, die durch Dienstschutzgrenzen zurückgegeben werden.
- Senden Sie Anforderungen parallel. Verwenden Sie den Antwortheader, um Sie zum empfohlenen Grad an Parallelität (DOP) zu führen. Deaktivieren Sie das Affinitätscookie bei Bedarf.
- Überprüfen Sie die Daten, um sicherzustellen, dass sie das Tabellenspaltenschema erfüllt. Dies kann dazu beitragen, Fehler zu vermeiden und die Anzahl der fehlgeschlagenen Vorgänge zu verringern.
Siehe auch
Elastische Tabellen
Plug-Ins zur Erweiterung von Geschäftsprozessen verwenden
Umgehen benutzerdefinierter Dataverse-Logik
Massenvorgang für Nachrichten
Plug-Ins für „CreateMultiple“ und „UpdateMultiple“ schreiben
Parallele Anforderungen senden