Passer au contenu principal
Quotas dans ClickHouse CloudLes quotas sont pris en charge dans ClickHouse Cloud, mais ils doivent être créés à l’aide de la syntaxe DDL. L’approche de configuration XML décrite ci-dessous n’est pas prise en charge.
Les quotas vous permettent de limiter l’utilisation des ressources sur une période donnée ou d’en suivre l’usage. Les quotas sont configurés dans la configuration utilisateur, généralement dans ‘users.xml’. Le système dispose également d’une fonctionnalité permettant de limiter la complexité d’une requête individuelle. Voir la section Restrictions sur la complexité des requêtes. Contrairement aux restrictions sur la complexité des requêtes, les quotas :
  • imposent des restrictions sur un ensemble de requêtes pouvant être exécutées sur une période donnée, au lieu de limiter une seule requête ;
  • prennent en compte les ressources consommées sur tous les serveurs distants dans le cadre du traitement distribué des requêtes.
Examinons la section du fichier ‘users.xml’ qui définit les quotas.
Par défaut, le quota suit la consommation des ressources heure par heure, sans limiter l’utilisation. La consommation des ressources calculée pour chaque intervalle est consignée dans le journal du serveur après chaque requête.
Pour le quota ‘statbox’, des restrictions sont définies pour chaque heure et pour chaque période de 24 heures (86 400 secondes). L’intervalle de temps est compté à partir d’un point fixe dans le temps, défini par l’implémentation. Autrement dit, la période de 24 heures ne commence pas nécessairement à minuit. Lorsque l’intervalle prend fin, toutes les valeurs collectées sont réinitialisées. Pour l’heure suivante, le calcul du quota repart de zéro. Voici les quantités pouvant être limitées : queries – Le nombre total de requêtes. query_selects – Le nombre total de requêtes SELECT. query_inserts – Le nombre total de requêtes INSERT. errors – Le nombre de requêtes ayant levé une exception. result_rows – Le nombre total de lignes renvoyées en résultat. result_bytes - La taille totale des lignes renvoyées en résultat. read_rows – Le nombre total de lignes lues dans les tables pour exécuter la requête sur l’ensemble des serveurs distants. read_bytes - La taille totale lue depuis les tables pour exécuter la requête sur l’ensemble des serveurs distants. written_bytes - La taille totale d’une opération d’écriture. execution_time – Le temps d’exécution total des requêtes, en secondes (temps réel). failed_sequential_authentications - Le nombre total d’erreurs d’authentification séquentielles. queries_per_normalized_hash – Le nombre maximal d’exécutions d’une même requête normalisée. Les requêtes normalisées sont des requêtes dans lesquelles les valeurs littérales sont remplacées par des marqueurs de substitution ; ainsi, SELECT 1 et SELECT 2 sont considérées comme une seule et même requête normalisée. Cette limite est suivie indépendamment pour chaque modèle distinct de requête normalisée. Si la limite est dépassée sur au moins un intervalle de temps, une exception est levée avec un message indiquant quelle restriction a été dépassée, pour quel intervalle, et quand le nouvel intervalle commence (c’est-à-dire quand des requêtes peuvent à nouveau être envoyées). Les quotas peuvent utiliser la fonctionnalité de « clé de quota » pour suivre l’utilisation des ressources indépendamment pour plusieurs clés. En voici un exemple :
Vous pouvez également définir les quotas en fonction du hash de la requête normalisée, afin que chaque modèle de requête distinct dispose de son propre quota indépendant. Dans la configuration XML, cela s’écrit <keyed_by_normalized_query_hash />:
On peut exprimer la même chose avec la syntaxe DDL :
Dans cet exemple, l’utilisateur peut exécuter jusqu’à 100 fois par heure chaque requête normalisée distincte. SELECT number FROM numbers(1) et SELECT number FROM numbers(2) partagent le même bucket (car elles ont la même forme normalisée), mais SELECT number, number FROM numbers(1) utilise un bucket distinct. Le quota est attribué aux utilisateurs dans la section ‘users’ de la config. Voir la section “Droits d’accès”. Pour le traitement distribué des requêtes, les quantités cumulées sont stockées sur le serveur émetteur de la requête. Ainsi, si l’utilisateur passe à un autre serveur, le quota y repartira de zéro. Lorsque le serveur redémarre, les quotas sont réinitialisés.
Dernière modification le 25 juin 2026