功能介绍
DWS工作负载队列的具体功能包括:并发管理、内存管理、CPU管理以及异常规则。
并发管理
并发,即工作负载队列中的最大查询并发数。并发管理作为运行前管理,用于限制查询并发运行的数量,通过限制查询并发数降低资源争抢,保证资源的有序高效利用。
并发管理规则如下:
- 短查询加速开启,复杂查询受工作负载队列并发控制,简单查询受短查询并发控制。
- 短查询加速关闭,复杂查询和简单查询均受工作负载队列并发控制,短查询并发控制无效。
内存管理
内存资源,即工作负载队列所占用的内存百分比。
内存管理的目的:防止数据库系统占用内存过高导致内存溢出(OOM)和实现资源池之间的内存隔离和限制。为满足这两个目的,工作负载管理从以下两方面进行内存管理:
- 全局内存管理
为防止数据库系统使用内存过大导致OOM,设置数据库系统全局内存上限(max_process_memory),对数据库全局内存进行管理。全局内存管理包含运行前管理和运行中管理,运行中管理防止实际使用内存超限,运行前管理防止查询执行过程中报错,具体如下:
−运行前管理:
一方面慢车道运行的所有查询估算内存都会进行统计,另一方面数据库系统实际使用内存会进行反馈,当实际使用内存大于统计内存时,对统计内存进行调整。查询运行前,判断全局剩余内存能否满足查询运行,满足情况下查询可以直接运行,否则查询需要排队,等待其他查询释放资源后运行。
−运行中管理:
查询执行过程中实际使用的内存也会进行统计,查询在申请内存时判断内存使用是否超限,内存超限查询报错,已用内存释放。
- 工作负载队列内存管理
工作负载队列内存管理属于专属限额的管理方式,资源池分配多少内存就只能使用多少内存,空闲出来的内存其他工作负载队列不能使用。
工作负载队列内存分配采用百分比方式,取值范围0-100。0表示工作负载队列不进行内存管理,100表示工作负载队列进行内存管理且可使用全局所有内存,1-99表示工作负载队列可以使用全局部分内存。
所有工作负载队列分配的内存百分比之和不能超过100。资源池内存管理仅管控慢车道查询,且只包含运行前管理,处理逻辑与全局内存运行前管理类似。资源池慢车道查询运行前,进行估算内存统计,当统计内存大于资源池内存时,查询需要排队,等待工作负载队列内其他查询运行结束释放资源后才能运行。
CPU管理
目前支持“共享配额”和“专属限额”两种CPU管理方式:
- CPU共享配额
−共享:若工作负载队列里有空闲的CPU配置,其他工作负载队列都能使用。
−配额:业务繁忙CPU满负载场景下,通过CPU秒级快速调度能够快速竞争资源。
- CPU专属限额
−专属:若工作负载队列里有空闲的CPU限额,任何其他工作负载队列不能使用(其他工作负载队列同样配置专属限额)。
−限额:其他工作负载队列空闲的专属限额,不能占用。
共享配额和专属限额的管理方式各有优劣,共享配额的管理方式可以实现CPU资源的充分利用,但是资源池之间隔离不彻底,可能影响查询性能;专属限额的管理方式可以实现CPU资源的绝对隔离,但是在资源池CPU资源空闲时,会造成CPU资源的浪费。
说明CPU专属限额仅8.1.3及以上版本支持。
异常规则
异常规则用于异常查询的识别和快速处理,防止“低质量SQL”长时间占用大量资源,导致其他查询阻塞或性能下降。
目前支持的异常处理规则如下表所示:
参数项 | 描述 | 取值范围(0表示不约束) | 操作 |
---|---|---|---|
阻塞时间 | 作业的阻塞时间,包括全局并发排队以及局部并发排队的总时间,单位秒。 例如,如果配置“阻塞时间”为300秒,那么当该队列中的用户执行的某个作业在阻塞300秒后将被终止。 | 1~2147483647的整数。0表示不约束。 | 终止或不约束 |
执行所消耗时间 | 已经执行的作业从开始执行到当前所消耗的时间,单位为秒。 例如,如果配置“执行所消耗时间”为100秒,那么当该队列中的用户执行的某个作业在执行超过100秒后将被终止。 | 1~2147483647的整数。0表示不约束。 | 终止或不约束 |
所有DN上CPU总时间 | 作业在所有DN上执行时所耗费的CPU总时间,单位为秒。 | 1~2147483647的整数。0表示不约束。 | 终止或不约束 |
检查倾斜率的时间间隔 | 检查作业执行的CPU倾斜率的间隔时间,单位为秒,需同“所有DN上CPU时间的倾斜率”一起设置。 | 1~2147483647的整数。0表示不约束。 | 终止或不约束 |
所有DN上CPU总时间倾斜率 | 作业在DN上执行时的CPU时间的倾斜率,依赖于“检查倾斜率的时间间隔”的设置。 | 1~100的整数。0表示不约束。 | 终止或不约束 |