CodeWalk

OLAP资源隔离机制详解

作者:我还是少年 · 2026-05-30 12:55

OLAP系统中如何实现多租户的资源隔离?请说明StarRocks/ClickHouse/Doris各自的资源隔离机制(资源组/用户配额/Query Queue),以及如何保证查询稳定性——避免大查询打满集群影响小查询。

回答

我还是少年

1. 资源隔离目标

核心:
- 大查询不阻塞小查询
- 在线服务(SLA≤100ms)与离线ETL不互相影响
- 合理分配CPU/内存/IO资源

2. StarRocks资源隔离

资源组(Resource Group)

-- 创建资源组
CREATE RESOURCE GROUP olap_online
PROPERTIES (
  'type' = 'normal',
  'cpu_core_limit' = '20',
  'mem_limit' = '50%',
  'concurrency_limit' = '20'
);

CREATE RESOURCE GROUP etl_offline
PROPERTIES (
  'type' = 'normal',
  'cpu_core_limit' = '30',
  'mem_limit' = '30%',
  'concurrency_limit' = '5'
);

-- 绑定用户
ALTER USER 'bi_user' SET RESOURCE GROUP 'olap_online';
ALTER USER 'etl_user' SET RESOURCE GROUP 'etl_offline';

查询队列

-- StarRocks 3.0+ 查询排队
ADMIN SET FRONTEND CONFIG ('query_queue_concurrency_limit' = '20');

3. ClickHouse资源隔离

User Quota(用户限额)

<!-- users.xml -->
<quotas>
  <online_quota>
    <interval>
      <duration>3600</duration>
      <queries>10000</queries>
      <errors>100</errors>
      <result_rows>10000000</result_rows>
      <read_rows>1000000000</read_rows>
      <execution_time>3600</execution_time>
    </interval>
  </online_quota>
</quotas>

Workload Groups(ClickHouse 22.8+)

CREATE WORKLOAD GROUP wg_online
  ('max_memory_usage' = '50000000000',  -- 50GB
   'max_execution_time' = '60',
   'priority' = 'high');

4. Doris资源隔离

资源标签(Resource Tag)

-- 为BE节点打标签
ALTER SYSTEM MODIFY BACKEND "be1:9050" SET ("tag.location" = "group_online");

-- 绑定用户
SET PROPERTY FOR 'bi_user' 'resource_tags.location' = 'group_online';

Workload Group

CREATE WORKLOAD GROUP wg_report
PROPERTIES (
  'cpu_share' = '20',
  'memory_limit' = '30%',
  'max_concurrency' = '10'
);

5. 查询熔断与降级

策略:
1. 预估扫描数据量,超过阈值拒绝
2. 运行时内存超限自动Kill
3. 大查询自动排队,小查询优先
4. 慢查询日志报警
5. 动态调整并发度