Le memory overcommit est une technique expérimentale visant à définir des limites mémoire plus souples pour les requêtes.
Le principe de cette technique est d’introduire des paramètres représentant la quantité de mémoire garantie qu’une requête peut utiliser.
Lorsque le memory overcommit est activé et que la limite mémoire est atteinte, ClickHouse sélectionne la requête la plus en surallocation et tente de libérer de la mémoire en interrompant cette requête.
Lorsque la limite mémoire est atteinte, toute requête attend un certain temps lorsqu’elle tente d’allouer de la mémoire supplémentaire.
Si le délai d’attente est dépassé et que de la mémoire a été libérée, la requête continue son exécution.
Sinon, une exception est levée et la requête est interrompue.
La sélection de la requête à arrêter est effectuée par le traqueur d’overcommit global ou utilisateur, selon la limite mémoire atteinte.
Si le traqueur d’overcommit ne peut pas choisir de requête à arrêter, l’exception MEMORY_LIMIT_EXCEEDED est levée.
Traqueur d’overcommit utilisateur
Le traqueur d’overcommit utilisateur identifie la requête présentant le ratio d’overcommit le plus élevé dans la liste des requêtes de l’utilisateur.
Le ratio d’overcommit d’une requête est calculé en divisant le nombre d’octets alloués par la valeur du paramètre memory_overcommit_ratio_denominator_for_user.
Si memory_overcommit_ratio_denominator_for_user pour la requête est égal à zéro, le traqueur d’overcommit ne sélectionnera pas cette requête.
Le délai d’attente est défini par le paramètre memory_usage_overcommit_max_wait_microseconds.
Exemple
Traqueur global d’overcommit
Le traqueur global d’overcommit identifie la requête ayant le ratio d’overcommit le plus élevé dans la liste de toutes les requêtes.
Dans ce cas, le ratio d’overcommit est calculé en divisant le nombre d’octets alloués par la valeur du paramètre memory_overcommit_ratio_denominator.
Si memory_overcommit_ratio_denominator pour la requête est égal à zéro, le traqueur d’overcommit ne sélectionnera pas cette requête.
Le délai d’attente est défini par le paramètre memory_usage_overcommit_max_wait_microseconds dans le fichier de configuration. Dernière modification le 23 juillet 2026