#资源类型
YashanDB资源管理通过配置物理资源(CPU、内存等)的分配规则,以满足不同用户或程序对资源的需求:
CPU资源管理适用于单机部署(非级联备)和分布式部署,且适用于LINUX和ARM平台,不适用于docker容器。
内存资源管理适用于单机部署(非级联备)和分布式部署。
并行执行资源适用于单机部署(非级联备)和分布式部署。
# CPU资源管理
YashanDB的CPU资源管理用于保证数据库在稳定运行的前提下,保障核心用户的使用和紧急任务的运行及最大限度提高CPU整体资源的利用率。
CPU资源管理功能按节点生效,例如配置某个用户的CPU资源上限为20%则表示该用户对环境中每个节点的CPU可使用上限为20%。CPU资源上限可能存在波动,上限+3%以内均属正常情况。
CPU资源管理的资源计划指令主要通过SHARES、UTILIZATION_LIMIT、MGMT_P1参数约束CPU使用份额。
# SHARES
CPU共享模式下的使用份额,须为[1,100]中的整数。当CPU资源不足时,该值越大就能获得更多的CPU资源。但是,具体分配的CPU资源需要根据与其它资源使用组的份额计算后确定。
为了确保内置资源使用组SYS_GROUP有足够的资源可用,当该组的共享资源(MGMT_P1)较少或较多时,系统会根据用户的输入进行动态调整。如果SYS_GROUP的MGMT_P1全局比例低于40%或高于60%时,系统会将SYS_GROUP的MGMT_P1调整为其它资源使用组的MGMT_P1总和。这种情况下,SYS_GROUP的MGMT_P1值可能会超过100(可以通过查看视图DBA_RSRC_PLAN_DIRECTIVES的MGMT_P1字段来了解,全局比例的计算公式是:SYS_GROUP的MGMT_P1 / 所有资源使用组的MGMT_P1总和
)。
# UTILIZATION_LIMIT
CPU的最大可能使用率,须为[1,100]中的整数。无论系统的CPU资源如何,分配给资源使用组的CPU资源不会超过这个上限。计算CPU最大使用率的公式是UTILIZATION_LIMIT * CPU个数
。例如一个用户映射的资源使用组设定的UTILIZATION_LIMIT为10,CPU的个数为2,那么这个用户最多够使用的20%的CPU资源。
# MGMT_P1
CPU共享模式下的使用份额,与SHARES参数相同含义。
# MAX_UTILIZATION_LIMIT
CPU的最大可能使用率,与UTILIZATION_LIMIT参数相同含义。
Note:
- 当同时设置MGMT_P1和SHARES参数时,以SHARES参数为准。
- 当同时设置MAX_UTILIZATION_LIMIT和UTILIZATION_LIMIT参数时,以UTILIZATION_LIMIT参数为准。
# 内存资源管理
YashanDB用户内存资源管理,主要针对用户在一定时间内能独占的内存(即SPA,详情参考内存体系)进行分配和管理,公共缓存或其他没有用户属性的内存区域则不在管理范围内。
用户内存资源管理的资源计划指令主要通过SPA_LIMIT、SESSION_SPA_LIMIT、SPA_LIMIT_RESERVED和EXECUTION_QUEUE_TIMEOUT参数约束会话和资源使用组的内存使用。
# SPA_LIMIT
计划指令中的SPA_LIMIT
,表示对应资源使用组最大能使用整个系统的用户内存的比例值,公共缓存等其他内存不在限制内。在多实例部署下(例如分布式部署),SPA_LIMIT
表示的是对应本地实例(或节点)内部SPA部分内存的占比。例如,CN节点与DN节点在内存配置上有不同的大小,资源使用组能在对应节点上使用的SPA内存的上限,都是通过SPA_LIMIT
的比例进行折算的,每个节点最终的内存大小不一定是一样的。
# SESSION_SPA_LIMIT
资源使用组下的会话工作时,不仅受到整个资源使用组总的SPA内存上限比例SPA_LIMIT
的限制,同时也受到单个会话自身的SESSION_SPA_LIMIT
限制。SESSION_SPA_LIMIT
表示该资源使用组下的会话(即会话对应的用户从属于该资源使用组),能使用资源使用组总的SPA内存上限的比例大小。例如资源使用组HIGH_GROUP的计划指令下SPA_LIMIT
和SESSION_SPA_LIMIT
分别是50和10,那对应的会话能使用SPA内存的上限为SPA总内存的5%(即50% * 10%)。
会话运行过程中会受到会话SPA内存上限约束,同时多个会话并发运行也收到资源使用组SPA内存上限的约束。
# SPA_LIMIT_RESERVED
在高并发性能敏感的场景下,SPA内存的集中管控无法避免带来性能损耗。计划指令中的SPA_LIMIT_RESERVED
,允许资源使用组将一定比例的SPA内存使用额度预留下来,提前平均分配给各个会话,使得会话在没有超出该预留额度前,无需向资源使用组申请或释放,从而获得更优的性能表现。
由于不同部署形态下活跃会话的数量不同,预留额度分配的基数也不同:
- 单机部署下,预留额度按
MAX_SESSIONS
配置参数的值进行分配; - 分布式部署下,预留额度按
MAX_WORKERS
配置参数的值进行分配。如果MAX_WORKERS
值为0,则按对应服务器上CPU核数的2倍计算。
# EXECUTION_QUEUE_TIMEOUT
分布式部署形态下,为了提高执行成功率,正式执行前会进行资源预占,同时在资源分配冲突导致失败后,支持重试处理。EXECUTION_QUEUE_TIMEOUT
表示执行过程中的重试、等待的最大时间,不包含执行时间或重试的执行时间,超过这个时间则执行会失败报错。
# 并行执行资源管理
YashanDB并行执行资源管理,通过在执行前预分配并行线程,有效减少系统在高并发情况下因并行线程不足而报错的情况。每个资源使用组分配了一定数量的可用并行线程,如果在执行时无法获取到足够的并行线程,系统会进行等待和重试,直到获取所需的线程资源。
并行执行资源管理的资源计划指令主要通过PARALLEL_SERVER_LIMIT参数约束资源使用组的并行线程使用。
# PARALLEL_SERVER_LIMIT
资源使用组的最大并行资源百分比,须为[0,100]中的整数。根据系统总体可用的最大并行线程数MAX_PARALLEL_WORKERS
,可以计算出每个资源使用组的可用并行线程数是 MAX_PARALLEL_WORKERS
* (PARALLEL_SERVER_LIMIT / 100)
。