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