Teilen über


Abfrage-Drosselung

Wenn eine bestimmte Abfrage eine unverhältnismäßige Last auf der Datenbank erzeugt, die Microsoft Dataverse Daten speichert, kann sie die Datenbank aushungern und die Leistung aller Datenoperationen negativ beeinflussen. Wenn dies geschieht, beginnt Dataverse, diese bestimmte Abfrage zu drosseln, sodass alle anderen Szenarien normal ausgeführt werden können.

Der Hauptunterschied zwischen Abfrage-Drosselung und Service-Schutz-API-Limits besteht darin, dass die Abfrage-Drosselung auf eine bestimmte Abfrage abzielt, die eine Leistungsverschlechterung verursacht, während der Rest des Datenverkehrs davon unberührt bleibt. Wenn die gedrosselte Abfrage aus einer nicht-interaktiven Anwendung stammt, wird die Drosselung für Endbenutzer wahrscheinlich nicht spürbar sein. Wenn die Abfrage aus einer interaktiven Anwendung stammt, wirkt sie sich auf Benutzende aus, die dieses spezielle Szenario ausüben.

Abfrage-Drosselungs-Verhalten

Die Drosselung kann sich auf drei Arten manifestieren:

  • Eine Verzögerung wird vor jeder Ausführung der Abfrage eingeführt, wodurch das Szenario, das sie verwendet, langsamer wird
  • Ein Teil der Versuche, die Abfrage auszuführen, schlägt mit einem der folgenden Fehler fehl:
Fehlercode Hex-Code Nachricht
-2147187388 0x80048544 This query cannot be executed because it conflicts with query throttling.
-2147187132 0x80048644 This query cannot be executed because it conflicts with Query Throttling; the query uses a leading wildcard value in a filter condition, which will cause the query to be throttled more aggressively.
-2147186876 0x80048744 This query cannot be executed because it conflicts with Query Throttling; the query uses a computed column in a filter condition, which will cause the query to be throttled more aggressively.

Weitere Informationen zu stärker gedrosselten Abfragemustern wie vorangestellte Platzhaltern finden Sie unter Die Leistung mit FetchXml optimieren und Die Leistung mit QueryExpression optimieren

Häufige Ursachen

Die meisten Situationen, in denen eine Abfrage-Drosselung notwendig ist, fallen in eine dieser beiden großen Kategorien:

  • Eine Abfrage in einem gängigen interaktiven Szenario, z. B. eine gespeicherte Abfrage, die in einem Raster verwendet wird, oder eine Abfrage, die von einem Plug-In ausgeführt wird, ist ineffizient und benötigt bei jeder Ausführung viele Datenbankressourcen

  • Ein automatisierter Vorgang, z. B. eine Datenintegration, bei der eine große Menge an Daten in oder aus Dataverse verschoben wird, führt eine Abfrage mit einer hohen Rate aus, die insgesamt sehr viele Datenbankressourcen verbraucht, auch wenn die einzelne Ausführung günstiger ist

Wie vermeidet man Abfrage-Drosselung

Die Abfragedrosselung hängt von der Abfrage und dem Szenario ab, in dem sie ausgeführt wird, aber es gibt einige allgemeine Leitlinien:

  • Für langsame Abfragen mit niedriger Frequenz, die typischerweise in interaktiven Anwendungen verwendet werden, muss die Abfragestruktur geändert werden, um sie effizienter zu machen

  • Für nicht-interaktive Anwendungen sind die üblichen Möglichkeiten, die Datenbanklast zu reduzieren:

    • Wenn Sie ExecuteMultiple (oder ein anderer Batchverarbeitungsmechanismus) verwenden, reduzieren Sie die Batchgröße
    • Wenn die Anwendung mehrere Threads verwendet, reduzieren Sie die Anzahl der gleichzeitigen Threads
    • Wenn Sie weder die Batchverarbeitung noch gleichzeitige Anforderungen verwenden, fügen Sie eine Verzögerung zwischen den Anforderungen ein, um die Anforderungsrate zu reduzieren