概述
数据库的系统资源(CPU资源、内存资源、IO资源和存储资源)是有限的,DWS在同时运行多种类型的业务(如数据加载、批量分析、实时查询等)时,各类型业务之间可能会竞争资源,从而出现资源性能瓶颈,导致吞吐量下降,造成整体的查询性能低下。那么对系统的资源进行合理的分配,能避免产生资源的不合理占用而导致的系统运行效率下降或者系统运行问题。
DWS提供了工作负载管理功能,用户可以根据自身的业务对资源进行划分,将资源按需划分成不同的工作负载队列,不同工作负载队列之间资源互相隔离。再通过关联用户功能将数据库用户关联至不同的工作负载队列,用户SQL查询根据“用户-工作负载队列”的关联关系将查询转至工作负载队列执行,在工作负载队列指定数据库可运行的并发查询数、每个查询可以使用的内存大小、以及可使用的CPU资源。从而实现对不同业务之间的资源限制和隔离,满足数据库混合负载需求,保证执行查询时有预期的系统资源,保证符合预期的查询性能。
须知
- 如果在旧版本数据库中从后台创建了资源池,需要删除后台创建的,从前台页面重新创建,详情请联系工程师。
- 离线扩容过程中不支持工作负载管理功能,如开启了工作负载计划,请在进行离线扩容操作之前停止。
工作负载管理功能
DWS的工作负载负载管理根据系统资源管控类型可分为:
- 计算资源管理:主要由工作负载队列功能实现,对计算资源进行隔离和限制,防止异常SQL查询导致集群级异常,包括:并发管理、内存管理、CPU管理以及异常规则。详情请参见 工作负载队列。
- 存储空间管理:从用户和schema两方面实现对存储空间的管理,防止磁盘满和数据库只读,详细请参见 空间管理。
- 工作负载计划:按计划进行资源管理自动配置,应对复杂多变的负载场景,实现更为灵活的资源管理,详细请参见 导入导出工作负载计划。
DWS的工作负载管理根据管控时机可分为:
- 运行前管理
查询运行前,对查询进行运行前管理,如果资源充足则查询可以运行,否则查询需要排队,等待其他查询释放资源后才能运行。运行前管理包含并发管理和运行前 内存管理 。
- 运行中管理
查询执行过程中,对查询使用资源进行管控,防止低质量SQL导致集群异常。运行中管理包含运行中内存管理 、CPU 管理 、空间管理和 异常规则 。
简单查询和复杂查询
DWS提供了精细化的工作负载管理,在查询进行负载管理前,根据查询预期执行时间和资源消耗,将查询划分为执行时间长、资源消耗多的复杂查询和执行时间短、资源消耗少的简单查询。简单查询和复杂查询的划分和资源消耗相关,因此根据估算内存对查询进行划分:
- 简单查询:估算内存小于32MB。
- 复杂查询:估算内存大于等于32MB。
混合负载场景下,复杂查询可能会长时间占用大量资源,虽然简单查询执行时间短、消耗资源少,但是因为资源耗尽,简单查询不得不在队列中等待复杂查询执行完成。为提升执行效率、提高系统吞吐量,DWS的“短查询加速”功能,实现对简单查询的单独管理。
- 开启短查询加速后,简单查询与复杂查询分开管理,简单查询无需与复杂查询竞争资源。
- 关闭短查询加速后,简单查询与复杂查询执行相同的工作负载管理。
虽然单个简单作业资源消耗少,但是大量简单作业并发运行还是会占用大量资源,因此短查询加速开启情况下,需要对简单查询进行并发管理;资源管理可能会影响查询性能,影响系统吞吐量,因此简单查询不进行资源管理,异常规则也不生效。
说明基于估算内存的查询划分一方面依赖估算内存的准确性,另一方面查询执行时间和CPU消耗可能与内存消耗不成正比,因此对于性能不敏感、业务明确的资源池可以通过关闭短查询加速实现对简单作业的资源管理和异常处理。