Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Restrictions sur la complexité des requêtes

Vue d’ensemble

Dans le cadre des paramètres, ClickHouse offre la possibilité d’imposer des restrictions sur la complexité des requêtes. Cela permet de se prémunir contre des requêtes potentiellement très gourmandes en ressources et de garantir une exécution plus sûre et plus prévisible, en particulier lors de l’utilisation de l’interface utilisateur.

Presque toutes les restrictions ne s’appliquent qu’aux requêtes SELECT et, pour le traitement distribué des requêtes, elles sont appliquées séparément sur chaque serveur.

En règle générale, ClickHouse ne vérifie les restrictions qu’une fois les parties de données entièrement traitées, plutôt que de les vérifier pour chaque ligne. Il peut donc arriver que les restrictions soient dépassées pendant le traitement d’une partie de données.

Paramètres de overflow_mode

La plupart des restrictions ont également un paramètre overflow_mode, qui définit ce qui se passe lorsque la limite est dépassée, et peut prendre l'une des deux valeurs suivantes :

  • throw : lever une exception (par défaut).
  • break : arrêter l'exécution de la requête et renvoyer un résultat partiel, comme si les données d'origine étaient épuisées.

Lorsqu’une requête est arrêtée par max_execution_time avec break, certaines opérations ne peuvent pas renvoyer un résultat partiel en toute sécurité et s’arrêtent donc sans produire de résultat, plutôt que de renvoyer un résultat réduit. Une fonction qui calcule une seule valeur s’arrête sans produire cette valeur ; le fait que l’arrêt atteigne également le client sous forme d’erreur TIMEOUT_EXCEEDED, ou seulement sous forme de résultat manquant, dépend de l’endroit où la requête a été interrompue. Une mutation de table Memory laissée incomplète par le délai d’expiration laisse la table inchangée et signale TIMEOUT_EXCEEDED. Un INSERT peut signaler QUERY_WAS_CANCELLED. Certaines opérations qui attendent d’autres répliques ou un traitement en arrière-plan ne s’arrêtent pas du tout à max_execution_time : une écriture avec quorum continue d’attendre jusqu’à ce que son quorum soit atteint, ou signale UNKNOWN_STATUS_OF_INSERT si insert_quorum_timeout expire en premier.

Paramètres de group_by_overflow_mode

Le paramètre group_by_overflow_mode accepte également la valeur any :

  • any : poursuivre l’agrégation pour les clés déjà présentes dans l’ensemble, mais ne pas ajouter de nouvelles clés à l’ensemble.

Liste des paramètres

Les paramètres suivants servent à appliquer des restrictions à la complexité des requêtes.

Paramètre Description succincte
max_memory_usage Quantité maximale de RAM utilisable pour exécuter une requête sur un seul serveur.
max_memory_usage_for_user Quantité maximale de RAM utilisable pour exécuter les requêtes d’un utilisateur sur un seul serveur.
max_rows_to_read Nombre maximal de lignes pouvant être lues à partir d’une table lors de l’exécution d’une requête.
max_bytes_to_read Nombre maximal d’octets (de données non compressées) pouvant être lus à partir d’une table lors de l’exécution d’une requête.
read_overflow_mode_leaf Définit le comportement lorsque le volume de données lues dépasse l’une des limites des nœuds feuille.
max_rows_to_read_leaf Nombre maximal de lignes pouvant être lues à partir d’une table locale sur un nœud feuille lors de l’exécution d’une requête distribuée.
max_bytes_to_read_leaf Nombre maximal d’octets (de données non compressées) pouvant être lus à partir d’une table locale sur un nœud feuille lors de l’exécution d’une requête distribuée.
read_overflow_mode_leaf Définit le comportement lorsque le volume de données lues dépasse l’une des limites des nœuds feuille.
max_rows_to_group_by Nombre maximal de clés uniques issues de l’agrégation.
group_by_overflow_mode Définit le comportement lorsque le nombre de clés uniques pour l’agrégation dépasse la limite.
max_bytes_before_external_group_by Active ou désactive l’exécution des clauses GROUP BY en mémoire externe.
max_bytes_ratio_before_external_group_by Ratio de mémoire disponible autorisé pour GROUP BY. Une fois ce seuil atteint, la mémoire externe est utilisée pour l’agrégation.
max_bytes_before_external_sort Active ou désactive l’exécution des clauses ORDER BY en mémoire externe.
max_bytes_ratio_before_external_sort Ratio de mémoire disponible autorisé pour ORDER BY. Une fois ce seuil atteint, le tri externe est utilisé.
max_rows_to_sort Nombre maximal de lignes avant le tri. Permet de limiter la consommation de mémoire lors du tri.
max_bytes_to_sort Nombre maximal d’octets avant le tri.
sort_overflow_mode Définit le comportement si le nombre de lignes reçues avant le tri dépasse l’une des limites.
max_result_rows Limite le nombre de lignes dans le résultat.
max_result_bytes Limite la taille du résultat en octets (non compressés).
result_overflow_mode Définit le comportement si le volume du résultat dépasse l’une des limites.
max_execution_time Temps d’exécution maximal d’une requête, en secondes.
timeout_overflow_mode Définit le comportement si la requête s’exécute plus longtemps que max_execution_time ou si le temps d’exécution estimé dépasse max_estimated_execution_time (l’estimation n’est vérifiée qu’avec throw).
max_execution_time_leaf Similaire sur le plan sémantique à max_execution_time, mais s’applique uniquement aux nœuds feuille pour les requêtes distribuées ou distantes.
timeout_overflow_mode_leaf Définit le comportement lorsque la requête sur un nœud feuille s’exécute plus longtemps que max_execution_time_leaf.
min_execution_speed Vitesse d’exécution minimale en lignes par seconde.
min_execution_speed_bytes Nombre minimal d’octets traités par seconde.
max_execution_speed Nombre maximal de lignes traitées par seconde.
max_execution_speed_bytes Nombre maximal d’octets traités par seconde.
timeout_before_checking_execution_speed Vérifie, une fois le délai spécifié en secondes écoulé, que la vitesse d’exécution n’est pas trop faible (c’est-à-dire qu’elle n’est pas inférieure à min_execution_speed).
max_estimated_execution_time Temps d’exécution estimé maximal d’une requête, en secondes.
max_columns_to_read Le nombre maximal de colonnes pouvant être lues depuis une table dans une seule requête.
max_temporary_columns Le nombre maximal de colonnes temporaires devant être conservées simultanément en RAM lors de l’exécution d’une requête, y compris les colonnes constantes.
max_temporary_non_const_columns Le nombre maximal de colonnes temporaires devant être conservées simultanément en RAM lors de l’exécution d’une requête, sans compter les colonnes constantes.
max_subquery_depth Définit ce qui se passe si une requête contient plus de sous-requêtes imbriquées que le nombre spécifié.
max_ast_depth La profondeur maximale d’imbrication de l’arbre syntaxique d’une requête.
max_ast_elements Le nombre maximal d’éléments dans l’arbre syntaxique d’une requête.
max_rows_in_set Le nombre maximal de lignes pour un ensemble de données dans la clause IN créé à partir d’une sous-requête.
max_bytes_in_set Le nombre maximal d’octets (de données non compressées) utilisés par un ensemble dans la clause IN créé à partir d’une sous-requête.
set_overflow_mode Définit ce qui se passe lorsque le volume de données dépasse l’une des limites.
max_rows_in_distinct Le nombre maximal de lignes distinctes lors de l’utilisation de DISTINCT.
max_bytes_in_distinct Le nombre maximal d’octets de l’état en mémoire (en octets non compressés) utilisé par une table de hachage lors de l’utilisation de DISTINCT.
distinct_overflow_mode Définit ce qui se passe lorsque le volume de données dépasse l’une des limites.
max_rows_to_transfer Taille maximale (en lignes) pouvant être transmise à un serveur distant ou enregistrée dans une table temporaire lors de l’exécution de la section GLOBAL IN/JOIN.
max_bytes_to_transfer Le nombre maximal d’octets (données non compressées) pouvant être transmis à un serveur distant ou enregistrés dans une table temporaire lors de l’exécution de la section GLOBAL IN/JOIN.
transfer_overflow_mode Définit ce qui se passe lorsque le volume de données dépasse l’une des limites.
max_rows_in_join Limite le nombre de lignes dans la table de hachage utilisée pour joindre des tables.
max_bytes_in_join La taille maximale, en octets, de la table de hachage utilisée pour joindre des tables.
join_overflow_mode Définit l’action que ClickHouse effectue lorsque l’une des limites de jointure suivantes est atteinte.
max_partitions_per_insert_block Limite le nombre maximal de partitions dans un seul bloc inséré, et une exception est levée si le bloc contient trop de partitions.
throw_on_max_partitions_per_insert_block Permet de contrôler le comportement lorsque max_partitions_per_insert_block est atteint.
max_temporary_data_on_disk_size_for_user La quantité maximale de données consommée par les fichiers temporaires sur disque, en octets, pour toutes les requêtes utilisateur exécutées concurremment.
max_temporary_data_on_disk_size_for_query La quantité maximale de données consommée par les fichiers temporaires sur disque, en octets, pour toutes les requêtes exécutées concurremment.
max_sessions_for_user Nombre maximal de sessions simultanées par utilisateur authentifié sur le serveur ClickHouse.
max_partitions_to_read Limite le nombre maximal de partitions accessibles dans une seule requête.

Paramètres obsolètes

max_pipeline_depth

Profondeur maximale du pipeline. Elle correspond au nombre de transformations que chaque bloc de données subit pendant le traitement d'une requête. Elle est comptabilisée dans les limites d'un serveur unique. Si la profondeur du pipeline dépasse cette limite, une exception est levée.

Navigation