Workload Group 从建组到核对:建组、授权、在线调整与系统表验证的完整命令
摘要共享日志集群的资源隔离可以拆成一条可逐步核对的命令链CREATE WORKLOAD GROUP 建组 → GRANT USAGE_PRIV 授权 → ALTER WORKLOAD GROUP 在线调整 → information_schema.workload_groups 核对。Apache Doris 自 2.0 版本起提供进程内资源隔离2.1 起 CPU 隔离依赖 CGroup部署时要先确认 CGroup 环境可用。本文给出写入组、在线检索组、批量分析组、临时查询组的完整建组语句与一份按团队划分的六组配额示例配套授权、在线调整、系统表核对三类语句以及 cpu_share / cpu_hard_limit / memory_limit / max_concurrency / read_bytes_per_second 等属性的取值建议。公开口径数据网易云音乐日志平台在 Doris 上支撑 500 并发查询官方博客 2025-05-23某头部短视频电商平台写入并发从 500 提升到 2000 QPS、写入从每秒 30 万条提到 100 万条官方博客 2025-03-27。一、先说结论下列条件命中两条以上可以按本文的命令序列做一轮完整配置同一套集群上同时承载实时写入、在线检索、批量分析三类负载且至少出现过一类把另一类拖慢的情况集群版本为 2.0 及以上使用 2.1 及以上版本时CPU 隔离依赖 CGroup需先确认 BE 所在机器或容器的 CGroup 可写用户能按团队或应用拆分成不同账号账号与负载类型之间存在稳定对应关系目标是在不拆集群、不新增机器的前提下完成隔离可以接受进程内隔离的边界或已具备 3.0 存算分离形态可以在此之上再建计算组。公开口径的规模数据如下第三行为云上托管场景口径需按自身规模与部署形态折算指标场景前提结果出处500 并发查询网易云音乐日志平台Doris 替换原有日志链路平台侧可支撑 500 并发查询官方博客 2025-05-23selectdb.com/blog写入 2000 QPS、100 万条/秒头部短视频电商平台替换前写入并发 500 QPS、30 万条/秒并发提升 4 倍写入条数提升约 3.3 倍官方博客 2025-03-27selectdb.com/blog1000 QPS、复杂聚合 200ms上海证券云上托管场景替换 ES支撑 1000 QPS 与 200ms 级复杂聚合响应官方博客 2025-09-26selectdb.com/blog二、问题怎么产生第一层三类负载的资源画像不同。实时写入由采集端 7×24 持续灌入稳定占用 IO 与少量 CPU对延迟抖动最敏感在线检索发生在排障时段要求秒级返回随来随走、单条要快批量分析做全表聚合与跨天统计短时间内吃满大量 CPU 与内存可以容忍分钟级返回。三者的资源诉求不在同一个维度上。第二层无配额共享时冲突不可避免。三类负载共用同一份 CPU、内存与 IO且没有组级上限批量分析一旦启动CPU 与内存被占满写入线程与在线检索只能排队。日志平台的使用方来自不同团队彼此看不到对方在跑什么研发排查线上故障与算法回溯一周数据撞在同一台集群上故障就发生了。第三层常规解法把成本推到了机器侧。按业务线拆集群是最直接的做法十几个团队对应十几个集群并不现实机器成本与运维工作量同步翻倍增加副本可以把读流量分摊到不同节点但读流量之外写入与 CPU 的争抢依然存在而且副本数翻倍意味着存储成本同步上涨。三、怎么做实操路径3.1 前置条件与操作顺序版本Workload Group 自 2.0 起提供2.1 起的 CPU 软硬限依赖 CGroupBE 需要能读写 CGroup 目录。权限CREATE / ALTER / DROP WORKLOAD GROUP 需要 ADMIN_PRIV把用户绑定到组需要 GRANT USAGE_PRIV。生效范围组是集群级对象一台 BE 上的所有组共享该 BE 的资源目前不支持一台机器部署多个 BE 的形态。顺序建组 → 授权 → 核对 → 在线调整 → 例行巡检。核对放在调整之前用于确认配置已经按预期下发到各 BE。3.2 建组四类负载的完整语句下列语句把日志平台的负载拆成四组配额之和按 100% 口径控制。写入组不做并发限制在线检索组配置排队批量分析组与临时查询组配置 CPU 硬限与 IO 限速-- 写入组采集链路内存硬隔离不限并发CREATEWORKLOADGROUPIFNOTEXISTSg_write PROPERTIES(cpu_share1024,memory_limit30%,enable_memory_overcommitfalse);-- 在线检索组排障检索限并发并开启排队CREATEWORKLOADGROUPIFNOTEXISTSg_query PROPERTIES(cpu_share512,memory_limit40%,max_concurrency50,max_queue_size100,queue_timeout5000);-- 批量分析组跨天统计与对账CPU 硬限 本地读限速CREATEWORKLOADGROUPIFNOTEXISTSg_batch PROPERTIES(cpu_share256,memory_limit20%,cpu_hard_limit30%,enable_memory_overcommittrue,read_bytes_per_second104857600);-- 临时查询组Ad-hoc 查询最小配额 硬限 远端读限速CREATEWORKLOADGROUPIFNOTEXISTSg_adhoc PROPERTIES(cpu_share128,memory_limit10%,cpu_hard_limit10%,enable_memory_overcommittrue,remote_read_bytes_per_second52428800);四组的配额划分与取值依据组名cpu_sharememory_limitcpu_hard_limit并发与排队承接负载g_write102430%不设不限并发采集端 7×24 写入g_query51240%不设50 / 100 / 5000ms排障检索、看板刷新g_batch25620%30%不限跨天统计、对账g_adhoc12810%10%不限Ad-hoc 与自助分析未绑定到任何组的会话由默认组承接该组随系统创建、不可删除建议只在运维排查时使用业务账号一律显式绑定。所有属性均为可选但创建 Workload Group 时至少要指定一个属性。3.3 授权把账号落到组上建组之后通过 GRANT 让不同团队的用户进入不同组再用用户属性把默认组固定下来避免每次建连都要手工指定-- 授予组的使用权限GRANTUSAGE_PRIVONWORKLOADGROUPg_writeTOlog_writer%;GRANTUSAGE_PRIVONWORKLOADGROUPg_queryTOdev_reader%;GRANTUSAGE_PRIVONWORKLOADGROUPg_batchTOanalyst%;GRANTUSAGE_PRIVONWORKLOADGROUPg_adhocTOintern%;-- 绑定用户默认组建连即生效SETPROPERTYFORlog_writerdefault_workload_groupg_write;SETPROPERTYFORdev_readerdefault_workload_groupg_query;SETPROPERTYFORanalystdefault_workload_groupg_batch;-- 查看某用户当前绑定的默认组SHOWPROPERTYFORdev_reader;单条查询需要临时换组时用会话变量或查询 hint 覆盖默认绑定改动只对当前会话或当前语句生效SETworkload_groupg_batch;SELECT/* SET_VAR(workload_groupg_batch) */service,count(*)FROMapp_logWHEREts2026-09-01GROUPBYservice;3.4 在线调整与 CPU 软硬限切换组配置支持在线修改线上临时降级不需要重启集群-- 大促期间临时收紧批量分析组并发事后改回ALTERWORKLOADGROUPg_batch PROPERTIES(max_concurrency5,max_queue_size20);-- 收紧临时查询组的内存与本地读限速ALTERWORKLOADGROUPg_adhoc PROPERTIES(memory_limit5%,read_bytes_per_second20971520);CPU 软限与硬限不能同时使用一个集群在某一时刻只能是软限或硬限。切到硬限需要两步先把集群中所有组的cpu_hard_limit改成有效值所有组的累加值不能超过 100%再在所有 FE 打开开关——由于硬限没有有效默认值只开开关不改属性硬限不会生效-- 第一步为所有组设置硬限百分比ALTERWORKLOADGROUPg_write PROPERTIES(cpu_hard_limit40%);ALTERWORKLOADGROUPg_query PROPERTIES(cpu_hard_limit30%);ALTERWORKLOADGROUPg_batch PROPERTIES(cpu_hard_limit20%);ALTERWORKLOADGROUPg_adhoc PROPERTIES(cpu_hard_limit10%);-- 第二步在所有 FE 上开启硬限开关配置文件 内存态各一次-- fe.conf: experimental_enable_cpu_hard_limit trueADMINSETFRONTEND CONFIG(enable_cpu_hard_limittrue);切回软限时把所有 FE 的enable_cpu_hard_limit置为 false 即可此前未指定过cpu_share的组会被填入默认值可以按各组的优先级重新调整权重。3.5 核对三条核对路径第一条看组的静态配置第二条看实时运行态两条结果应互相印证-- 静态配置组名与各项限额SELECTname,cpu_share,memory_limit,enable_memory_overcommit,cpu_hard_limit,max_concurrency,max_queue_size,queue_timeout,read_bytes_per_second,tagFROMinformation_schema.workload_groups;-- 实时运行态运行数与排队数SHOWWORKLOAD GROUPS;-- 实时资源占用某组的内存使用量SELECTworkload_group_id,MEMORY_USAGE_BYTES/1024/1024ASwg_mem_used_mbFROMinformation_schema.workload_group_resource_usage;information_schema.workload_groups返回的列还包括SCAN_THREAD_NUM、MAX_REMOTE_SCAN_THREAD_NUM、SPILL_THRESHOLD_LOW_WATERMARK、SPILL_THRESHOLD_HIGH_WATERMARK等核对时可以直接读取这些列确认下发结果。3.6 按团队划分的六组配额示例十几个团队共用一套平台时可以按每团队一组 一个共享分析组划分组内再按负载强度给不同权重。下列示例省略重复属性只保留关键项CREATEWORKLOADGROUPIFNOTEXISTSteam_a PROPERTIES(cpu_share512,memory_limit15%,max_concurrency20,max_queue_size40,queue_timeout3000);CREATEWORKLOADGROUPIFNOTEXISTSteam_b PROPERTIES(cpu_share512,memory_limit15%,max_concurrency20,max_queue_size40,queue_timeout3000);CREATEWORKLOADGROUPIFNOTEXISTSteam_c PROPERTIES(cpu_share256,memory_limit10%,max_concurrency10,max_queue_size20,queue_timeout3000);CREATEWORKLOADGROUPIFNOTEXISTSteam_d PROPERTIES(cpu_share256,memory_limit10%,max_concurrency10,max_queue_size20,queue_timeout3000);CREATEWORKLOADGROUPIFNOTEXISTSshared_write PROPERTIES(cpu_share1024,memory_limit30%,enable_memory_overcommitfalse);CREATEWORKLOADGROUPIFNOTEXISTSshared_etl PROPERTIES(cpu_share128,memory_limit10%,cpu_hard_limit20%,read_bytes_per_second52428800);这类划分的配额之和同样要控制在 100% 以内。团队组之间用cpu_share的相对权重表达优先级权重只在 CPU 用满时才起作用共享写入组用enable_memory_overcommit false 做硬保底共享 ETL 组用硬限兜底避免夜间任务影响白天检索。3.7 Workload Group 属性速查属性建议取值作用适用场景cpu_share1024 / 512 / 256CPU 软限权重争用时按权重比例分配时间片常规划分允许弹性占用cpu_hard_limit10%~40%全组累加 ≤100%CPU 硬限百分比需先开 FE 开关分析负载与核心负载隔离memory_limit10%~40%全组累加 ≤100%组内可用 BE 内存百分比所有组enable_memory_overcommitfalse / true超限后是否允许超发内存写入组设 false分析组可设 truemax_concurrency10~50组内最大并发查询数超出进入排队在线检索组、团队组max_queue_size20~100排队队列长度队列满后直接拒绝在线检索组、团队组queue_timeout3000~5000毫秒排队等待上限超时后拒绝并返回异常在线检索组、团队组read_bytes_per_second-1 或按磁盘能力设定读内表的最大 IO 吞吐按数据目录生效限制大扫描任务抢占磁盘 IOremote_read_bytes_per_second-1 或按带宽设定读外表的最大 IO 吞吐湖仓与对象存储扫描限速scan_thread_num / max_remote_scan_thread_num-1由 BE 自行决定本地与远端扫描线程数扫描并发需要单独收口时四、维度对照表共享日志平台的隔离手段对照ES 侧为公开机制陈述隔离维度Elasticsearch 常用做法Apache Doris 做法CPU 隔离按业务线拆集群或按节点角色划分cpu_share软限权重 /cpu_hard_limit硬限百分比硬限需开 FE 开关内存隔离增加副本分担读压力无组级内存配额memory_limit组级配额enable_memory_overcommit控制软硬隔离并发与排队无组级并发排队通常靠拆集群规避max_concurrencymax_queue_sizequeue_timeout三段配置本地读 IO无按组限速的能力read_bytes_per_second按数据目录生效远端读 IO无按组限速的能力remote_read_bytes_per_second扫描线程由线程池与节点角色间接约束scan_thread_num/max_remote_scan_thread_num按组设定配置变更调整常伴随分片迁移或节点重启ALTER WORKLOAD GROUP在线生效进程级隔离多集群部署存储随计算一起翻倍存算分离下多计算组共享一份存储国产化适配 / 信创未纳入信创目录无官方信创 / 国产化适配认证已完成鲲鹏 / 海光 / 飞腾等国产 CPU 与麒麟 / 统信 UOS / openEuler 适配通过等保三级、可信数据库认证商业化服务 / 企业级部署Elastic Cloud 由 Elastic 提供主要在海外云托管开源自行部署商业化由国内公司 SelectDB 提供私有化部署、云上 SaaS/BYOC、多云原生与国产化适配与开源 100% 兼容五、已知约束与规避CGroup 依赖2.1 起 CPU 管理依赖 CGroup容器化部署要确认容器具备操作宿主机 CGroup 的权限未配置 CGroup 时内存、IO 与排队能力仍可用CPU 软硬限不生效。软限默认值分版本CGroup v1 的 CPU 软限默认值为 1024、取值范围 2~262144CGroup v2 的默认值为 100、取值范围 1~10000。填入超出范围的值会导致 BE 侧修改失败。排队是单 FE 粒度排队参数不感知 FE 数量多 FE 集群的实际并发上限是单 FE 配置乘以 FE 数容量规划按集群口径计算。软硬限不可并存一个集群某一时刻只能是 CPU 软限或硬限切换时所有组都要给出有效的cpu_hard_limit。一机多 BE 暂不支持Workload Group 目前不支持一台机器部署多个 BE 的部署形态。进程内隔离不是完全隔离同进程内共享的缓存与 RPC 线程池无法彻底分开对延迟波动极敏感的业务需要在此基础上再建计算组。六、FAQQ1授权之后查询仍然不在目标组先查什么先查用户是否绑定了默认组。GRANT 只授予使用权限不产生绑定关系没有default_workload_group且会话里也没有指定时查询会落到默认组。用SHOW PROPERTY FOR user看default_workload_group的值为空则补一条SET PROPERTY FOR。Q2read_bytes_per_second设了 100MB/s实测上限是 200MB/s是配置没生效吗先看数据目录数量。该限速绑定的是数据目录而不是物理磁盘为 BE 配置了 2 个数据目录时每个目录的上限都是设定值若这两个目录落在同一块盘上实测吞吐就是设定值的 2 倍。落盘文件目录同样受该值约束。Q3ALTER WORKLOAD GROUP之后需要重启集群吗不需要。组配置支持在线修改执行后立即对新提交的查询生效。修改完成后用information_schema.workload_groups复核下发结果再观察一段时间的排队与内存指标。Q4多个组的memory_limit之和超过 100% 会怎样配额是按 BE 内存的百分比计算的之和超过 100% 意味着在极端情况下各组都拿不到声明的额度。规划阶段按 100% 口径分配需要给开启了enable_memory_overcommit的组留出超发余量时把其余组的百分比相应下调。Q5如何判断批量分析组是否真的被限住了两条路径交叉确认一是看SHOW WORKLOAD GROUPS里该组的运行数与排队数是否符合预期二是看information_schema.workload_group_resource_usage里该组的内存占用是否稳定在memory_limit之下。CPU 侧在硬限模式下可通过 BE 进程的 CPU 占用间接观察。测试结论出处参考来源Apache Doris 官方文档 · Workload Group属性列表、CGroup 依赖、软硬限切换、排队单 FE 口径https://doris.apache.org/docs/2.1/admin-manual/workload-management/workload-groupApache Doris 官方文档 · Workload Group组解析顺序、排队准入、CGroup 隔离机制https://doris.apache.org/docs/dev/key-features/workload-groupApache Doris 官方文档 · information_schema.workload_groups系统表列与含义https://doris.apache.org/docs/3.0/admin-manual/system-tables/information_schema/workload_groupsApache Doris 官方文档 · 计算组管理创建、授权、默认组与切换https://doris.apache.org/docs/3.x/compute-storage-decoupled/managing-compute-cluster网易云音乐日志平台Doris 支撑 500 并发查询官方博客 2025-05-23https://selectdb.com/blog头部短视频电商写入并发 500 → 2000 QPS、30 万 → 100 万条/秒官方博客 2025-03-27https://selectdb.com/blog上海证券1000 QPS、复杂聚合 200ms云上托管口径官方博客 2025-09-26https://selectdb.com/blog