高并发的实现基础
单个查询速度快是实现高 QPS 的基础。每个查询需要处理的工作越少,服务器能够同时运行的查询就越多。减少单个查询工作量的主要功能包括:- MergeTree 表引擎家族的稀疏主索引,可跳过读取不符合查询条件的数据。
- 查询缓存等缓存,可直接使用缓存结果响应重复的
SELECT查询。 - 投影,可在写入时预计算数据,并由 ClickHouse 自动选用;以及 materialized view,可将预计算结果存储在单独的目标表中,供查询直接读取。
控制和限制并发
默认情况下,ClickHouse OSS 不限制并发查询数量。ClickHouse Cloud 默认将max_concurrent_queries_for_all_users 设为 1000。您可以在多个层级配置限制:
max_concurrent_queries限制服务器上同时执行的查询总数。max_concurrent_insert_queries和max_concurrent_select_queries分别对INSERT和SELECT查询施加相同的限制。这三项的默认值均为0(不限制) 。max_concurrent_queries_for_user和max_concurrent_queries_for_all_users分别限制每个用户和所有用户的并发数。
隔离工作负载
为防止并发工作负载彼此干扰,ClickHouse 提供:- 工作负载调度,用于调控 CPU、内存和 IO 在不同工作负载之间的分配。
- 配额,用于限制每位用户在指定时间间隔内的资源使用量。
- 查询复杂度限制,用于防止单个查询占用过多资源。
- 内置的基于角色的访问控制,用于限定每位用户可查询的内容。