Les clés d’une forte concurrence
Des requêtes rapides constituent la base d’un QPS élevé. Moins chaque requête nécessite de travail, plus un serveur peut en exécuter simultanément. Les principales fonctionnalités qui réduisent le travail nécessaire par requête sont les suivantes :- L’index primaire clairsemé de la famille de moteurs de table MergeTree, qui évite de lire les données ne correspondant pas à la requête.
- Les caches, tels que le cache de requêtes, qui répondent directement aux requêtes
SELECTrépétées à partir des résultats mis en cache. - Les projections, qui précalculent les données au moment de l’insertion et peuvent être sélectionnées automatiquement par ClickHouse, ainsi que les vues matérialisées, qui stockent des résultats précalculés dans une table cible distincte, que les requêtes peuvent lire directement.
Contrôler et limiter la concurrence
Par défaut, ClickHouse OSS ne limite pas le nombre de requêtes concurrentes. ClickHouse Cloud définitmax_concurrent_queries_for_all_users sur 1000 par défaut. Vous pouvez configurer des limites à plusieurs niveaux :
max_concurrent_querieslimite le nombre total de requêtes exécutées simultanément sur le serveur.max_concurrent_insert_queriesetmax_concurrent_select_queriesappliquent séparément la même limite aux requêtesINSERTetSELECT. Ces trois paramètres sont définis sur0(sans limite) par défaut.max_concurrent_queries_for_useretmax_concurrent_queries_for_all_userslimitent la concurrence par utilisateur ou pour l’ensemble des utilisateurs.
Isolation des workloads
Pour éviter que des workloads concurrents n’interfèrent entre eux, ClickHouse propose :- La planification des workloads pour réguler le partage du CPU, de la mémoire et des IO entre les workloads.
- Des quotas pour limiter l’utilisation des ressources par utilisateur sur un intervalle de temps.
- Des restrictions sur la complexité des requêtes pour empêcher que des requêtes individuelles ne consomment trop de ressources.
- Un contrôle d’accès basé sur les rôles intégré pour définir les requêtes que chaque utilisateur est autorisé à exécuter.