在Doris中可以使用软限制(Soft Limit)与硬限制(Hard Limit)对资源使用进行限制:
资源硬限:硬限是指资源能够使用的绝对上线,租户无法超越该限制。一旦达到硬限,超出部分的资源请求将会被拒绝。硬限一般用于防止集群内资源被耗尽或不同业务之间的资源抢占,确保集群的稳定与性能;
资源软限:软限是一个可以被超越的资源限制,通常表示资源推荐使用的上限。在系统不繁忙时,租户申请的资源超过了软限,可以借用其他资源组的资源。在系统繁忙存在资源争用时,租户申请资源超过了软限,将无法继续获得资源。
CPU:不同 Workload Group 只能同时设置软限或硬限,无法设置部分组硬限及部分组软限
软隔离:
开关:FE Config - enable_cpu_hard_limit = false
参数:Property - cpu_share
硬隔离:
开关:FE Config - enable_cpu_hard_limit = true
参数:property - cpu_hard_limit 修改 CPU 硬限
内存:不同 Workload Group 可以任意设置软限或硬限,部分组可以设置硬限,部分组可以设置软限
软隔离:
开关:property - enable_memory_overcommit = true
参数:property - memory_limit
硬隔离:
开关:property - enable_memory_overcommit = false
参数:property - memory_limit
本地/远程IO:只有硬限
参数:read_bytes_per_second 暂时只提供本地IO硬限
参数:remote_read_bytes_per_second 暂时只提供远程IO硬限
参数介绍
property_list 支持的属性:
cpu_share: 必选,用于设置资源组获取 cpu 时间的多少,可以实现 cpu 资源软隔离。cpu_share 是相对值,表示正在运行的资源组可获取 cpu 资源的权重。例如,用户创建了 3 个资源组 rg-a、rg-b 和 rg-c,cpu_share 分别为 10、30、40,某一时刻 rg-a 和 rg-b 正在跑任务,而 rg-c 没有任务,此时 rg-a 可获得 (10 / (10 + 30)) = 25% 的 cpu 资源,而资源组 rg-b 可获得 75% 的 cpu 资源。如果系统只有一个资源组正在运行,则不管其 cpu_share 的值为多少,它都可以获取全部的 cpu 资源。
memory_limit: 必选,用于设置资源组可以使用 be 内存的百分比。资源组内存限制的绝对值为:物理内存 * mem_limit * memory_limit,其中 mem_limit 为 be 配置项。系统所有资源组的 memory_limit 总合不可超过 100%。资源组在绝大多数情况下保证组内任务可使用 memory_limit 的内存,当资源组内存使用超出该限制后,组内内存占用较大的任务可能会被 cancel 以释放超出的内存,参考 enable_memory_overcommit。
enable_memory_overcommit: 可选,用于开启资源组内存软隔离,默认为 false。如果设置为 false,则该资源组为内存硬隔离,系统检测到资源组内存使用超出限制后将立即 cancel 组内内存占用最大的若干个任务,以释放超出的内存;如果设置为 true,则该资源组为内存软隔离,如果系统有空闲内存资源则该资源组在超出 memory_limit 的限制后可继续使用系统内存,在系统总内存紧张时会 cancel 组内内存占用最大的若干个任务,释放部分超出的内存以缓解系统内存压力。建议在有资源组开启该配置时,所有资源组的 memory_limit 总和低于 100%,剩余部分用于资源组内存超发。