Leistung für Massenvorgänge optimieren

Wenn Sie in Dataverse Tausende oder Millionen von Datensätzen erstellen oder aktualisieren müssen, können Sie durch die Auswahl, die Sie treffen, Stunden an Zeit sparen, bis das Massenvorgangsprojekt abgeschlossen ist. In diesem Artikel werden die Faktoren beschrieben, die sich auf die Leistung auswirken, und die Optionen, die Ihnen zum Erstellen von Client-Anwendungen zur Optimierung der Leistung für Massenvorgänge zur Verfügung stehen. Auch andere Faktoren wie die Anzahl der Datensätze, die Datensatzgröße, die Netzwerklatenz und die Datenkomplexität sollten berücksichtigt werden.

Tabellentyp

Die Art der Tabelle, die Sie zum Speichern Ihrer Daten auswählen, hat den größten Einfluss darauf, wie viel Durchsatz Sie bei Massenvorgängen erwarten können. Dataverse bietet zwei Arten von Tabellen an: Standard und elastisch.

  • Eine Standardtabelle speichert Daten mithilfe von Azure SQL. Standardtabellen bieten Transaktionsunterstützung und größere Möglichkeiten zur Modellierung von Beziehungen.
  • Eine elastische Tabelle speichert Daten mithilfe von Azure Cosmos DB. Elastische Tabellen skalieren automatisch horizontal, um große Datenmengen und einen hohen Durchsatz bei geringer Latenz zu verarbeiten. Elastische Tabellen eignen sich für Anwendungen, die unvorhersehbare, spitzenmäßige oder schnell wachsende Workloads haben.

Wenn Datenladezeiten Ihr Hauptanliegen sind, bieten elastische Tabellen die beste Leistung. Erfahren Sie, wann Sie elastische Tabellen verwenden sollten

Geschäftslogik

Dataverse bietet die Funktion zum Hinzufügen einer zusätzlichen Geschäftslogik, wenn Datensätze mithilfe von Plug-Ins erstellt oder aktualisiert werden. Plug-Ins können registriert werden, um vor oder innerhalb der Transaktion eines Standardtabellenvorgangs synchron ausgeführt zu werden. Elastische Tabellen unterstützen Plug-Ins, die vor dem Start eines Vorgangs ausgeführt werden können, da keine Transaktion stattfindet. Jeder Fehler, der im Plug-In-Code während eines synchronen Schritts für eine Standardtabelle oder vor dem Vorgang in einer elastischen Tabelle auftritt, bricht den Vorgang ab. Ein Plug-In-Entwickler kann absichtlich eine Ausnahme auslösen, um den Vorgang abzubrechen und sicherzustellen, dass die Datenvalidierungslogik 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 erhalten Sie die Leistung:

  • Begrenzen Sie die Anzahl der synchronen Plug-Ins, die für die Vorgänge registriert sind. Fügen Sie Logik zur asynchronen Ausführung mithilfe eines asynchronen Plug-Ins oder Power Automate-Flows hinzu, es sei denn, es ist unbedingt erforderlich, dass die Logik synchron angewendet wird.
  • Stellen Sie sicher, dass die von Ihnen verwendeten Plug-Ins hinsichtlich der Logik, die sie ausführen möchten, begrenzt sind. 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 sie die Logik so effizient wie möglich ausführen. Bei Standardtabellen müssen Sie die Auswirkungen berücksichtigen, die Transaktionen und Datensatzsperren auf die Leistung haben können. Erfahren Sie mehr über skalierbares Anpassungsdesign und andere Best Practices zum Schreiben von Plug-Ins
  • Wählen Sie aus, mit welcher API Sie Ihr Plug-In registrieren möchten. Sie können synchrone Logik anwenden, um sie in den CreateMultiple- und UpdateMultiple-Massenvorgangs-APIs effizienter auszuführen. Lernen Sie, wie man Plug-Ins für CreateMultiple und UpdateMultiple schreibt.

Geschäftslogik umgehen

Um das Massenvorgangsprojekt zu beschleunigen, können Sie synchrone 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 Sie andere Schritte planen, um eine letztendliche Datenkonsistenz sicherzustellen, können Sie die Plug-In-Schritte manuell deaktivieren und sie nach Abschluss des Massenvorgangsprojekts wieder aktivieren. Durch das Deaktivieren von Plug-Ins wird jedoch die Anwendung der Logik eines beliebigen Clients deaktiviert. Bei jedem Benutzenden oder anderen Prozess, dem in Dataverse während dieses Zeitraums Daten hinzugefügt werden, wird keine Geschäftslogik angewendet.

Als Entwickelnde einer Client-Anwendung, die den Massenvorgang ausführen, können Sie einen optionalen Parameter auf die Anforderungen anwenden, die Sie senden, um die synchrone Logik zu umgehen. Nur Systemadministrierende oder Benutzende, denen eine bestimmte Berechtigung gewährt wurde, können diese Kopfzeile verwenden. Erfahren Sie mehr darüber, wie Sie synchrone Logik umgehen können.

Massenvorgangs-APIs

Dataverse bietet Massenvorgangs-APIs, die den höchstmöglichen Durchsatz für Erstellungs- und Aktualisierungsvorgänge ermöglichen. Diese APIs umfassen CreateMultiple, UpdateMultiple und UpsertMultiple. Nur für elastische Tabellen können Sie DeleteMultiple verwenden.

Obwohl diese APIs den höchsten Durchsatz bieten, gelten für Standardtabellen die folgenden Einschränkungen:

  • Derzeit nicht für alle Tabellen verfügbar. Jede benutzerdefinierte Tabelle sollte sie unterstützen, aber nicht alle Dataverse-Tabellen unterstützen sie, etwa „Konto“ oder „Kontakt“. Sie können eine in der Dokumentation bereitgestellte Abfrage ausführen, um festzustellen, ob eine Tabelle diese APIs verwenden kann.
  • Datenfehler nicht verzeihen. Sie müssen sicherstellen, dass die Daten, die Sie ändern, sorgfältig bereinigt und validiert 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 Client-Anwendungen verwendet werden.

Massenvorgänge sind für alle elastischen Tabellen verfügbar und elastische Tabellen können Informationen über einzelne fehlgeschlagene Vorgänge zurückgeben. Erfahren Sie mehr über Bulk-Vorgänge mit elastischen Tabellen.

Batch-APIs

Wenn Sie keine Massenvorgangs-APIs verwenden können, können Sie mit dem SDK für .NET ExecuteMultiple verwenden, und mit der Web-API können Sie OData $batch verwenden.

Verwenden Sie diese APIs, um eine Reihe von Vorgängen in einer einzigen Anfrage zu gruppieren und eine höhere Effizienz zu erzielen, vor allem durch weniger, größere Anfragen, die die Gesamtnutzlast reduzieren, die für jeden Vorgang über die Leitung gesendet und empfangen wird. Eine Client-Anwendung muss nicht auf den Abschluss eines Vorgangs warten, bevor sie die nächste Anfrage sendet.

Jeder Vorgang innerhalb der Anfrage wird nacheinander auf dem Server angewendet, sodass sich die Effizienz pro Vorgang nicht verbessert. Da die Vorgänge jedoch einzeln ausgeführt werden, können Sie Informationen darüber erhalten, welche Vorgänge fehlgeschlagen sind, oder den Batch stoppen, wenn ein Fehler auftritt. Sie können bis zu 1.000 Vorgänge pro Anfrage senden. Um optimale Ergebnisse zu erzielen, empfehlen wir Ihnen jedoch, mit einer kleineren Anzahl zu beginnen und zu experimentieren, um herauszufinden, welche Batch-Größe für Ihren Fall am besten geeignet ist.

Hinweis

Sowohl Massenvorgänge als auch Batch-APIs erzielen bei paralleler Verwendung erhebliche Leistungssteigerungen. Siehe Parallele Anfragen.

Client-Architektur

Dataverse ist als Datenquelle konzipiert, um mehrere Anwendungen mit einer großen Anzahl gleichzeitiger Benutzender zu unterstützen. Um den Durchsatz zu optimieren, gestalten Sie Ihren Client so, dass er die Stärken von Dataverse nutzt.

Engpässe im clientseitigen Code sind die Hauptursache für Leistungsprobleme. Entwickelnde nutzen die Funktionen des Codes häufig nicht vollständig aus, was sich auf die Leistung auswirken kann. Es ist von entscheidender Bedeutung, die Art und Weise zu optimieren, wie die Client-Anwendung die Kerne oder Rechenleistung der Infrastruktur nutzt, da eine fehlende Optimierung die Leistung erheblich beeinträchtigen kann. Bei der Verwendung von Azure Functions können beispielsweise mehrere Schritte zur Optimierung der Leistung unternommen werden, z. B. die Implementierung der automatischen Skalierung, die Verwendung von Vorbereitungsinstanzen, die Anpassung der CPU-Auslastung, die Verwendung mehrerer Kerne und das Zulassen von Parallelität.

Grenzwerte für den Serviceschutz

Um eine konsistente Verfügbarkeit und Leistung für alle zu gewährleisten, wendet Dataverse einige Einschränkungen für die Verwendung von APIs an. Diese Einschränkungen wurden entwickelt, um zu erkennen, wenn Client-Anwendungen außergewöhnliche Anforderungen an die Server-Ressourcen 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 keine Fehler bezüglich der Dienstschutzbegrenzung erhalten, haben Sie die Leistungsfähigkeit 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 Client-Anwendung muss auf den Fehler reagieren, indem sie wartet und es erneut versucht. Der einzige Unterschied besteht darin, dass die Dienstschutzgrenzen angeben, wie lange Sie warten müssen, bevor Sie es erneut versuchen.

In diesen Artikeln erhalten Sie weitere Informationen:

Parallele Anforderungen

Sie können eine erhebliche Verbesserung des Durchsatzes feststellen, indem Sie Anforderungen parallel senden, aber Sie müssen verstehen, wie Sie sie richtig senden.

Nicht alle Umgebungen sind gleich

Nicht jeder Dataverse-Umgebung ist die gleiche Anzahl an Webserver-Ressourcen zugewiesen. Dataverse passt sich den Anforderungen der Umgebung an, indem zur Unterstützung weitere Webserver-Ressourcen hinzugefügt werden. Eine Produktionsumgebung, die Tausende von aktiven Benutzenden unterstützt, erfordert mehr Webserver als eine Testumgebung. Wenn Ihre Umgebung über viele Webserver verfügt, kann das parallele Senden von Anforderungen einen dramatischen Unterschied im Gesamtdurchsatz machen, den Ihre Client-Anwendung erreichen kann.

Dataverse gibt Daten in einem Antwortheader zurück, der Ihnen einen empfohlenen Parallelisierungsgrad (DOP) für Ihre Umgebung mitteilt. Die Leistung verschlechtert sich, wenn Sie mehr parallele Anforderungen senden, als im Antwortheader empfohlen. Die Client-Hardware, die Sie zum Ausführen Ihrer Anwendung verwenden, benötigt möglicherweise mehr CPU-Kerne, um so viele Anforderungen parallel zu senden. Möglicherweise müssen Sie mehr Clients verwenden, um den maximalen Durchsatz zu erzielen. Beispielsweise können Sie einen horizontal skalierten App-Dienst oder eine Azure-Funktion verwenden.

Abhängig von Ihrer clientseitigen Architektur müssen Sie möglicherweise den empfohlenen Parallelitätsgrad aufteilen. Wenn Sie beispielsweise zwei Clients haben und Ihr empfohlener DOP 50 beträgt; konfigurieren Sie jeden Client für die Verwendung von 25.

Azure-Affinität deaktivieren

Gegebenenfalls können Sie die besten Ergebnisse erzielen, wenn Sie Ihren Client so konfigurieren, dass er alle verfügbaren Webserver nutzt, indem Sie das Azure-Affinitätscookie entfernen, das versucht, Ihre Anwendung einem einzelnen Webserver zuzuordnen. Das Deaktivieren der Azure-Affinität ist nicht für interaktive Anwendungen geeignet, 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 folgenden anwenden, um Ihre Verbindung zu optimieren, damit Ihre Anforderungen nicht durch Standardeinstellungen eingeschränkt werden.

// 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 Massenvorgangsprojekte zu optimieren:

  • Wählen Sie einen Tabellentyp, der Ihren Anforderungen entspricht. Elastische Tabellen bieten eine viel größere Kapazität für Massenvorgänge.
  • Minimieren, deaktivieren oder umgehen Sie benutzerdefinierte Geschäftslogik für die von Ihnen verwendeten Tabellen. Konfigurieren Sie Ihre Client-Anwendung so, dass bei Bedarf benutzerdefinierte Logik umgangen wird.
  • Verwenden Sie Dataverse-Massenvorgangs-APIs, wenn möglich. Andernfalls verwenden Sie Batch-APIs.
  • 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 Parallelitätsgrad (DOP) zu führen. Deaktivieren Sie gegebenenfalls das Affinitäts-Cookie.
  • Validieren Sie die Daten, um sicherzustellen, dass sie dem Tabellenspaltenschema entsprechen. Dies kann dazu beitragen, Fehler zu vermeiden und die Anzahl fehlgeschlagener Vorgänge zu reduzieren.

Siehe auch

Elastische Tabelle
Verwenden von Plug-Ins zur Erweiterung von Geschäftsprozessen
Synchrone Logik umgehen
Massenvorgang für Nachrichten
Plug-Ins für „CreateMultiple“ und „UpdateMultiple“ schreiben
Parallelanfragen senden

Hinweis

Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)

Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).