Partage via


Limitation des requêtes

Si une requête spécifique crée une charge disproportionnée sur la base de données qui stocke les données Microsoft Dataverse, elle peut priver la base de données de ressources et avoir un impact négatif sur les performances de toutes les opérations sur les données. Quand cela arrive, Dataverse commencer à limiter cette requête particulière pour permettre à tous les autres scénarios de s’exécuter normalement.

La principale manière dont la limitation des requêtes diffère des Limites de l’API de protection des services est que la limitation des requêtes cible une requête spécifique qui provoque une dégradation des performances tout en laissant le reste du trafic inchangé. Si la requête limitée provient d’une application non interactive, la limitation ne sera probablement pas perceptible pour les utilisateurs finaux. Si la requête provient d’une application interactive, elle affecte les utilisateurs qui exécutent ce scénario particulier.

Comportement de la limitation des requêtes

La limitation peut se manifester de trois manières :

  • Un délai est introduit avant chaque exécution de la requête, ce qui ralentit le scénario qui l’utilise
  • Une fraction des tentatives d’exécution de la requête échoue avec une des erreur suivantes :
Code d'erreur Code hexadécimal Message
-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.

Pour plus d’informations sur les modèles de requêtes limités de manière plus agressive, tels que les principaux caractères génériques, consultez Optimiser les performances à l’aide de FetchXml et Optimiser les performances à l’aide de QueryExpression

Causes courantes

La plupart des situations où la limitation des requêtes est nécessaire entrent dans l’une de ces deux grandes catégories suivantes :

  • Certaines requêtes d’un scénario interactif courant, par exemple une requête enregistrée utilisée dans une grille ou une requête exécutée par un plug-in, sont inefficaces et nécessitent beaucoup de ressources de base de données pour chaque exécution

  • Une opération automatisée, par exemple l’intégration de données impliquant le déplacement d’une grande quantité de données vers ou hors de Dataverse, exécute une requête à très haut débit qui consomme beaucoup de ressources de base de données en agrégat, même si chaque exécution est moins cher en ressources

Comment éviter la limitation des requêtes

La limitation des requêtes dépend de la requête et du scénario dans lequel elle est exécutée, mais il existe des directives communes :

  • Pour les requêtes lentes à basse fréquence, généralement utilisées dans les applications interactives, la structure de la requête doit être modifiée pour la rendre plus efficace

  • Pour les applications non interactives, les moyens courants de réduire la charge de la base de données sont les suivants :

    • Si vous utilisez ExecuteMultiple (ou un autre mécanisme de traitement par lots), réduisez la taille du lot
    • Si l’application a plusieurs fils, réduire le nombre de threads concurrents
    • Lorsque ni le traitement par lots ni les demandes de concurrence ne sont utilisés, ajoutez un délai entre les demandes pour réduire le débit des requêtes