ClickHouse/docs/fr/operations/settings/query-complexity.md

302 lines
16 KiB
Markdown
Raw Normal View History

2020-03-30 12:48:55 +00:00
---
machine_translated: true
2020-04-04 09:15:31 +00:00
machine_translated_rev: f865c9653f9df092694258e0ccdd733c339112f5
toc_priority: 59
toc_title: "Restrictions sur la complexit\xE9 des requ\xEAtes"
2020-03-30 12:48:55 +00:00
---
2020-04-04 09:15:31 +00:00
# Restrictions Sur La Complexité Des Requêtes {#restrictions-on-query-complexity}
2020-03-30 12:48:55 +00:00
Les Restrictions sur la complexité des requêtes font partie des paramètres.
Ils sont utilisés pour fournir une exécution plus sûre à partir de linterface utilisateur.
Presque toutes les restrictions ne sappliquent quà `SELECT`. Pour le traitement des requêtes distribuées, des restrictions sont appliquées sur chaque serveur séparément.
2020-03-30 12:48:55 +00:00
ClickHouse vérifie les restrictions pour les parties de données, pas pour chaque ligne. Cela signifie que vous pouvez dépasser la valeur de restriction de la taille de la partie données.
Restrictions sur l “maximum amount of something” peut prendre la valeur 0, ce qui signifie “unrestricted”.
2020-03-30 12:48:55 +00:00
La plupart des restrictions ont également un overflow\_mode paramètre signification que faire lorsque la limite est dépassée.
Il peut prendre deux valeurs: `throw` ou `break`. Les Restrictions sur lagrégation (group\_by\_overflow\_mode) ont également la valeur `any`.
2020-03-30 12:48:55 +00:00
`throw` Throw an exception (default).
`break` Stop executing the query and return the partial result, as if the source data ran out.
`any (only for group_by_overflow_mode)` Continuing aggregation for the keys that got into the set, but dont add new keys to the set.
2020-03-30 12:48:55 +00:00
## max\_memory\_usage {#settings_max_memory_usage}
La quantité maximale de RAM à utiliser pour exécuter une requête sur un seul serveur.
Dans le fichier de configuration par défaut, le maximum est de 10 Go.
Le réglage ne tient pas compte du volume de mémoire disponible ou du volume total de mémoire sur la machine.
La restriction sapplique à une seule requête au sein dun seul serveur.
2020-03-30 12:48:55 +00:00
Vous pouvez utiliser `SHOW PROCESSLIST` pour vérifier la consommation de mémoire pour chaque requête.
En outre, la consommation de mémoire maximale est suivie pour chaque requête et écrite dans le journal.
Lutilisation de la mémoire nest pas surveillée pour les membres de certaines fonctions dagrégation.
2020-03-30 12:48:55 +00:00
Lutilisation de la mémoire nest pas totalement suivies pour les états des fonctions dagrégation `min`, `max`, `any`, `anyLast`, `argMin`, `argMax` de `String` et `Array` argument.
2020-03-30 12:48:55 +00:00
La consommation de mémoire est également limitée par les paramètres `max_memory_usage_for_user` et `max_memory_usage_for_all_queries`.
## max\_memory\_usage\_for\_user {#max-memory-usage-for-user}
Quantité maximale de RAM à utiliser pour exécuter les requêtes dun utilisateur sur un seul serveur.
2020-03-30 12:48:55 +00:00
Les valeurs par défaut sont définies dans [Paramètre.h](https://github.com/ClickHouse/ClickHouse/blob/master/dbms/Core/Settings.h#L288). Par défaut, le montant nest pas limité (`max_memory_usage_for_user = 0`).
2020-03-30 12:48:55 +00:00
Voir aussi la description de [max\_memory\_usage](#settings_max_memory_usage).
## max\_memory\_usage\_for\_all\_queries {#max-memory-usage-for-all-queries}
La quantité maximale de RAM à utiliser pour exécuter toutes les requêtes sur un seul serveur.
Les valeurs par défaut sont définies dans [Paramètre.h](https://github.com/ClickHouse/ClickHouse/blob/master/dbms/Core/Settings.h#L289). Par défaut, le montant nest pas limité (`max_memory_usage_for_all_queries = 0`).
2020-03-30 12:48:55 +00:00
Voir aussi la description de [max\_memory\_usage](#settings_max_memory_usage).
## max\_rows\_to\_read {#max-rows-to-read}
Les restrictions suivantes peut être vérifiée sur chaque bloc (au lieu de sur chaque ligne). Autrement dit, les restrictions peuvent être brisées un peu.
Lors de lexécution dune requête dans plusieurs threads, les restrictions suivantes sappliquent à chaque thread séparément.
2020-03-30 12:48:55 +00:00
Un nombre maximum de lignes pouvant être lues à partir dun tableau lors de lexécution dune requête.
2020-03-30 12:48:55 +00:00
## max\_bytes\_to\_read {#max-bytes-to-read}
Nombre maximal doctets (données non compressées) pouvant être lus à partir dune table lors de lexécution dune requête.
2020-03-30 12:48:55 +00:00
## read\_overflow\_mode {#read-overflow-mode}
Que faire lorsque le volume de lecture de données dépasse lune des limites: throw ou break. Par défaut, les jeter.
2020-03-30 12:48:55 +00:00
## max\_rows\_to\_group\_by {#settings-max-rows-to-group-by}
Un nombre maximum de clés uniques reçues de lagrégation. Ce paramètre permet de limiter la consommation de mémoire lors de lagrégation.
2020-03-30 12:48:55 +00:00
## group\_by\_overflow\_mode {#group-by-overflow-mode}
Que faire lorsque le nombre de clés uniques pour lagrégation dépasse la limite: throw, break, ou any. Par défaut, les jeter.
À laide de la any valeur vous permet dexécuter une approximation de GROUP BY. La qualité de cette approximation dépend de la nature statistique des données.
2020-03-30 12:48:55 +00:00
## max\_bytes\_before\_external\_group\_by {#settings-max_bytes_before_external_group_by}
Active ou désactive lexécution de `GROUP BY` clauses dans la mémoire externe. Voir [Groupe par dans la mémoire externe](../../sql-reference/statements/select.md#select-group-by-in-external-memory).
2020-03-30 12:48:55 +00:00
Valeurs possibles:
- Volume maximal de RAM (en octets) pouvant être utilisé par le [GROUP BY](../../sql-reference/statements/select.md#select-group-by-clause) opération.
2020-03-30 12:48:55 +00:00
- 0 — `GROUP BY` dans la mémoire externe désactivé.
Valeur par défaut: 0.
## max\_rows\_to\_sort {#max-rows-to-sort}
Un nombre maximum de lignes avant le tri. Cela vous permet de limiter la consommation de mémoire lors du tri.
## max\_bytes\_to\_sort {#max-bytes-to-sort}
Un nombre maximal doctets avant le tri.
2020-03-30 12:48:55 +00:00
## sort\_overflow\_mode {#sort-overflow-mode}
Que faire si le nombre de lignes reçues avant le tri dépasse lune des limites: throw ou break. Par défaut, les jeter.
2020-03-30 12:48:55 +00:00
## max\_result\_rows {#setting-max_result_rows}
Limite sur le nombre de lignes dans le résultat. Également vérifié pour les sous-requêtes, et sur des serveurs distants lors de lexécution de parties dune requête distribuée.
2020-03-30 12:48:55 +00:00
## max\_result\_bytes {#max-result-bytes}
Limite sur le nombre doctets dans le résultat. Le même que le réglage précédent.
2020-03-30 12:48:55 +00:00
## result\_overflow\_mode {#result-overflow-mode}
Que faire si le volume du résultat dépasse lune des limites: throw ou break. Par défaut, les jeter.
2020-03-30 12:48:55 +00:00
Utiliser break est similaire à Lutilisation de LIMIT. `Break` interrompt lexécution seulement au niveau du bloc. Cela signifie que la quantité de lignes renvoyées est supérieure à [max\_result\_rows](#setting-max_result_rows) multiples de [max\_block\_size](settings.md#setting-max_block_size) et dépend de l [max\_threads](settings.md#settings-max_threads).
2020-03-30 12:48:55 +00:00
Exemple:
``` sql
SET max_threads = 3, max_block_size = 3333;
SET max_result_rows = 3334, result_overflow_mode = 'break';
SELECT *
FROM numbers_mt(100000)
FORMAT Null;
```
Résultat:
``` text
6666 rows in set. ...
```
## max\_execution\_time {#max-execution-time}
Durée maximale dexécution de la requête en secondes.
Pour le moment, il nest pas vérifié pour lune des étapes de tri, ni lors de la fusion et de la finalisation des fonctions dagrégat.
2020-03-30 12:48:55 +00:00
## timeout\_overflow\_mode {#timeout-overflow-mode}
Que faire si la requête est exécutée plus de max\_execution\_time: throw ou break. Par défaut, les jeter.
## min\_execution\_speed {#min-execution-speed}
Vitesse dexécution minimale en lignes par seconde. Vérifié sur chaque bloc de données quand timeout\_before\_checking\_execution\_speed expirer. Si la vitesse dexécution est inférieure, une exception est levée.
2020-03-30 12:48:55 +00:00
## min\_execution\_speed\_bytes {#min-execution-speed-bytes}
Un nombre minimum dexécution doctets par seconde. Vérifié sur chaque bloc de données quand timeout\_before\_checking\_execution\_speed expirer. Si la vitesse dexécution est inférieure, une exception est levée.
2020-03-30 12:48:55 +00:00
## max\_execution\_speed {#max-execution-speed}
Un nombre maximal dexécution de lignes par seconde. Vérifié sur chaque bloc de données quand timeout\_before\_checking\_execution\_speed expirer. Si la vitesse dexécution est élevée, la vitesse dexécution sera réduit.
2020-03-30 12:48:55 +00:00
## max\_execution\_speed\_bytes {#max-execution-speed-bytes}
Un nombre maximal dexécution doctets par seconde. Vérifié sur chaque bloc de données quand timeout\_before\_checking\_execution\_speed expirer. Si la vitesse dexécution est élevée, la vitesse dexécution sera réduit.
2020-03-30 12:48:55 +00:00
## timeout\_before\_checking\_execution\_speed {#timeout-before-checking-execution-speed}
Vérifie que la vitesse dexécution nest pas trop lent (pas moins de min\_execution\_speed), après lexpiration du temps spécifié en secondes.
2020-03-30 12:48:55 +00:00
## max\_columns\_to\_read {#max-columns-to-read}
Nombre maximal de colonnes pouvant être lues à partir dune table dans une seule requête. Si une requête nécessite la lecture dun plus grand nombre de colonnes, il lève une exception.
2020-03-30 12:48:55 +00:00
## max\_temporary\_columns {#max-temporary-columns}
Nombre maximal de colonnes temporaires qui doivent être conservées en RAM en même temps lors de lexécution dune requête, y compris les colonnes constantes. Sil y a plus de colonnes temporaires que cela, il lève une exception.
2020-03-30 12:48:55 +00:00
## max\_temporary\_non\_const\_columns {#max-temporary-non-const-columns}
La même chose que max\_temporary\_columns mais sans compter constante colonnes.
Notez que les colonnes constantes sont formées assez souvent lors de lexécution dune requête, mais elles nécessitent environ zéro ressource informatique.
2020-03-30 12:48:55 +00:00
## max\_subquery\_depth {#max-subquery-depth}
Profondeur maximale de sous-requêtes. Si les sous-requêtes sont plus profondes, une exception est levée. Par défaut, 100.
## max\_pipeline\_depth {#max-pipeline-depth}
Profondeur maximale du pipeline. Correspond au nombre de transformations que chaque bloc de données lors du traitement des requêtes. Compté dans les limites dun seul serveur. Si la profondeur du pipeline est supérieure, une exception est levée. Par défaut, 1000.
2020-03-30 12:48:55 +00:00
## max\_ast\_depth {#max-ast-depth}
Profondeur maximale dune requête arbre syntaxique. En cas de dépassement, une exception est levée.
À ce moment, il nest pas vérifié pendant lanalyse, mais seulement après lanalyse de la requête. Autrement dit, un arbre syntaxique trop profond peut être créé pendant lanalyse, mais la requête échouera. Par défaut, 1000.
2020-03-30 12:48:55 +00:00
## max\_ast\_elements {#max-ast-elements}
Un nombre maximal déléments dans une requête arbre syntaxique. En cas de dépassement, une exception est levée.
De la même manière que le paramètre précédent, il est vérifié quaprès lanalyse de la requête. Par défaut, 50 000.
2020-03-30 12:48:55 +00:00
## max\_rows\_in\_set {#max-rows-in-set}
Nombre maximal de lignes pour un ensemble de données dans la clause in créée à partir dune sous-requête.
2020-03-30 12:48:55 +00:00
## max\_bytes\_in\_set {#max-bytes-in-set}
Nombre maximal doctets (données non compressées) utilisés par un ensemble de la clause in créé à partir dune sous-requête.
2020-03-30 12:48:55 +00:00
## set\_overflow\_mode {#set-overflow-mode}
Que faire lorsque la quantité de données dépasse lune des limites: throw ou break. Par défaut, les jeter.
2020-03-30 12:48:55 +00:00
## max\_rows\_in\_distinct {#max-rows-in-distinct}
Un nombre maximum de lignes différentes lors de Lutilisation de DISTINCT.
2020-03-30 12:48:55 +00:00
## max\_bytes\_in\_distinct {#max-bytes-in-distinct}
Nombre maximal doctets utilisés par une table de hachage lors de Lutilisation de DISTINCT.
2020-03-30 12:48:55 +00:00
## distinct\_overflow\_mode {#distinct-overflow-mode}
Que faire lorsque la quantité de données dépasse lune des limites: throw ou break. Par défaut, les jeter.
2020-03-30 12:48:55 +00:00
## max\_rows\_to\_transfer {#max-rows-to-transfer}
Nombre maximal de lignes pouvant être transmises à un serveur distant ou enregistrées dans une table temporaire lors de Lutilisation de GLOBAL IN.
2020-03-30 12:48:55 +00:00
## max\_bytes\_to\_transfer {#max-bytes-to-transfer}
Nombre maximal doctets (données non compressées) pouvant être transmis à un serveur distant ou enregistrés dans une table temporaire lors de Lutilisation de GLOBAL IN.
2020-03-30 12:48:55 +00:00
## transfer\_overflow\_mode {#transfer-overflow-mode}
Que faire lorsque la quantité de données dépasse lune des limites: throw ou break. Par défaut, les jeter.
2020-03-30 12:48:55 +00:00
## max\_rows\_in\_join {#settings-max_rows_in_join}
Limite le nombre de lignes dans la table de hachage utilisée lors de la jonction de tables.
Ce réglage sapplique à [SELECT … JOIN](../../sql-reference/statements/select.md#select-join) les opérations et les [Rejoindre](../../engines/table-engines/special/join.md) tableau moteur.
2020-03-30 12:48:55 +00:00
Si une requête contient plusieurs jointures, ClickHouse vérifie ce paramètre pour chaque résultat intermédiaire.
ClickHouse peut procéder à différentes actions lorsque la limite est atteinte. Lutilisation de la [join\_overflow\_mode](#settings-join_overflow_mode) réglage pour choisir laction.
2020-03-30 12:48:55 +00:00
Valeurs possibles:
- Entier positif.
- 0 — Unlimited number of rows.
Valeur par défaut: 0.
## max\_bytes\_in\_join {#settings-max_bytes_in_join}
Limite la taille en octets de la table de hachage utilisée lors de lassemblage de tables.
2020-03-30 12:48:55 +00:00
Ce réglage sapplique à [SELECT … JOIN](../../sql-reference/statements/select.md#select-join) les opérations et les [Rejoindre le moteur de table](../../engines/table-engines/special/join.md).
2020-03-30 12:48:55 +00:00
Si la requête contient des jointures, ClickHouse vérifie ce paramètre pour chaque résultat intermédiaire.
ClickHouse peut procéder à différentes actions lorsque la limite est atteinte. Utiliser [join\_overflow\_mode](#settings-join_overflow_mode) paramètres pour choisir laction.
2020-03-30 12:48:55 +00:00
Valeurs possibles:
- Entier positif.
- 0 — Memory control is disabled.
Valeur par défaut: 0.
## join\_overflow\_mode {#settings-join_overflow_mode}
Définit laction que ClickHouse effectue lorsque lune des limites de jointure suivantes est atteinte:
2020-03-30 12:48:55 +00:00
- [max\_bytes\_in\_join](#settings-max_bytes_in_join)
- [max\_rows\_in\_join](#settings-max_rows_in_join)
Valeurs possibles:
- `THROW` — ClickHouse throws an exception and breaks operation.
- `BREAK` — ClickHouse breaks operation and doesnt throw an exception.
2020-03-30 12:48:55 +00:00
Valeur par défaut: `THROW`.
**Voir Aussi**
- [Clause de JOINTURE](../../sql-reference/statements/select.md#select-join)
- [Rejoindre le moteur de table](../../engines/table-engines/special/join.md)
2020-03-30 12:48:55 +00:00
## max\_partitions\_per\_insert\_block {#max-partitions-per-insert-block}
Limite le nombre maximal de partitions dans un seul bloc inséré.
- Entier positif.
- 0 — Unlimited number of partitions.
Valeur par défaut: 100.
**Détail**
Lors de linsertion de données, ClickHouse calcule le nombre de partitions dans le bloc inséré. Si le nombre de partitions est plus que `max_partitions_per_insert_block`, ClickHouse lève une exception avec le texte suivant:
2020-03-30 12:48:55 +00:00
> “Too many partitions for single INSERT block (more than” + toString (max\_parts) + “). The limit is controlled by max\_partitions\_per\_insert\_block setting. A large number of partitions is a common misconception. It will lead to severe negative performance impact, including slow server startup, slow INSERT queries and slow SELECT queries. Recommended total number of partitions for a table is under 1000..10000. Please note, that partitioning is not intended to speed up SELECT queries (ORDER BY key is sufficient to make range queries fast). Partitions are intended for data manipulation (DROP PARTITION, etc).”
[Article Original](https://clickhouse.tech/docs/en/operations/settings/query_complexity/) <!--hide-->