Partager via


Stratégie de limites des demandes

La stratégie de limitation des demandes d’un groupe de charges de travail permet de limiter les ressources utilisées par la demande pendant son exécution.

Par objet de stratégie

Chaque limite se compose des éléments suivants :

  • Typé : Value valeur de la limite.
  • IsRelaxable - valeur booléenne qui définit si la limite peut être assouplie par l’appelant, dans le cadre des propriétés de la requête.

Les limites suivantes sont configurables :

Propriété Type Description Valeurs prises en charge Propriété de requête client correspondante
Datascope string Étendue des données de la requête. Cette valeur détermine si la requête s’applique à toutes les données ou uniquement au cache chaud. All, HotCacheou null query_datascope
MaxMemoryPerQueryPerNode long Quantité maximale de mémoire (en octets) qu’une requête peut allouer. [1, 50 % de la RAM totale d’un nœud unique] max_memory_consumption_per_query_per_node
MaxMemoryPerIterator long Quantité maximale de mémoire (en octets) qu’un opérateur de requête peut allouer. [1, 50 % de la RAM totale d’un nœud unique] maxmemoryconsumptionperiterator
MaxFanoutThreadsPercentage int Pourcentage de threads sur chaque nœud vers lequel exécuter la requête. Lorsqu’il est défini sur 100 %, le cluster affecte tous les processeurs sur chaque nœud. Par exemple, 16 processeurs sur un cluster déployé sur des nœuds Azure D14_v2. [1, 100] query_fanout_threads_percent
MaxFanoutNodesPercentage int Pourcentage de nœuds sur le cluster vers lequel exécuter la requête. Fonctionne de la même manière que MaxFanoutThreadsPercentage. [1, 100] query_fanout_nodes_percent
MaxResultRecords long Nombre maximal d’enregistrements qu’une demande est autorisée à retourner à l’appelant, au-dessus duquel les résultats sont tronqués. La limite de troncation affecte le résultat final de la requête, tel qu’il est remis au client. Toutefois, la limite de troncation ne s’applique pas aux résultats intermédiaires des sous-requêtes, tels que ceux qui résultent de références entre clusters. [1, 9223372036854775807] truncationmaxrecords
MaxResultBytes long Taille de données maximale (en octets) qu’une demande est autorisée à retourner à l’appelant, au-dessus de laquelle les résultats sont tronqués. La limite de troncation affecte le résultat final de la requête, tel qu’il est remis au client. Toutefois, la limite de troncation ne s’applique pas aux résultats intermédiaires des sous-requêtes, tels que ceux qui résultent de références entre clusters. [1, 9223372036854775807] truncationmaxsize
MaxExecutionTime timespan Durée maximale d’une demande.
Remarques :
1) Cela peut être utilisé pour placer des limites supplémentaires en plus des limites par défaut sur le temps d’exécution, mais pas pour les étendre.
2) Le traitement du délai d’expiration n’est pas à la résolution de secondes, mais plutôt à empêcher l’exécution d’une requête pendant quelques minutes.
3) Le temps nécessaire à la lecture de la charge utile au niveau du client n’est pas traité dans le cadre du délai d’attente. Il dépend de la vitesse à laquelle l’appelant extrait les données du flux.
4) Le temps d’exécution total peut dépasser la valeur configurée si l’arrêt de l’exécution prend plus de temps.
[00:00:00, 01:00:00] servertimeout

Notes

Une limite qui n’est pas définie, ou qui est définie comme null, est extraite de la default stratégie de limites de requête du groupe de charge de travail.

Utilisation des ressources du processeur

Les requêtes peuvent utiliser toutes les ressources du processeur au sein du cluster. Par défaut, lorsque plusieurs requêtes s’exécutent simultanément, le système utilise une approche de tourniquet équitable pour distribuer les ressources. Cette stratégie est optimale pour obtenir des performances élevées avec des requêtes ad hoc.

Toutefois, il existe des scénarios dans lesquels vous pouvez restreindre les ressources processeur allouées à une requête spécifique. Par instance, si vous exécutez un travail en arrière-plan qui peut prendre en charge des latences plus élevées. La stratégie de limites de requête offre la possibilité de spécifier un pourcentage inférieur de threads ou de nœuds à utiliser lors de l’exécution d’opérations de sous-requête distribuées. Le paramètre par défaut est 100 %.

Groupe de charge de travail default

Le groupe de charge de travail default comporte la stratégie suivante qui est définie par défaut. Cette stratégie peut être modifiée.

{
  "DataScope": {
    "IsRelaxable": true,
    "Value": "All"
  },
  "MaxMemoryPerQueryPerNode": {
    "IsRelaxable": true,
    "Value": < 50% of a single node's total RAM >
  },
  "MaxMemoryPerIterator": {
    "IsRelaxable": true,
    "Value": 5368709120
  },
  "MaxFanoutThreadsPercentage": {
    "IsRelaxable": true,
    "Value": 100
  },
  "MaxFanoutNodesPercentage": {
    "IsRelaxable": true,
    "Value": 100
  },
  "MaxResultRecords": {
    "IsRelaxable": true,
    "Value": 500000
  },
  "MaxResultBytes": {
    "IsRelaxable": true,
    "Value": 67108864
  },
  "MaxExecutiontime": {
    "IsRelaxable": true,
    "Value": "00:04:00"
  }
}

Notes

  • Les limites du groupe de default charge de travail doivent être définies et avoir une valeur différentenull .
  • Toutes les limites du groupe de default charge de travail ont IsRelaxable la valeur true.
  • Les limites de requête sont désactivées pour des types de commandes spécifiques au sein du default groupe de charge de travail, tels que .export les commandes et l’ingestion à partir de commandes de requête telles que .set-or-append et .set-or-replace. Lorsque ces commandes sont affectées à un groupe de charge de travail autre que celui par défaut, les limites de requête spécifiées dans la stratégie deviennent applicables.

Exemple

Le code JSON suivant représente un objet de stratégie de limites de demandes personnalisées :

{
  "DataScope": {
    "IsRelaxable": true,
    "Value": "HotCache"
  },
  "MaxMemoryPerQueryPerNode": {
    "IsRelaxable": true,
    "Value": 2684354560
  },
  "MaxMemoryPerIterator": {
    "IsRelaxable": true,
    "Value": 2684354560
  },
  "MaxFanoutThreadsPercentage": {
    "IsRelaxable": true,
    "Value": 50
  },
  "MaxFanoutNodesPercentage": {
    "IsRelaxable": true,
    "Value": 50
  },
  "MaxResultRecords": {
    "IsRelaxable": true,
    "Value": 1000
  },
  "MaxResultBytes": {
    "IsRelaxable": true,
    "Value": 33554432
  },
  "MaxExecutiontime": {
    "IsRelaxable": true,
    "Value": "00:01:00"
  }
}