人大金仓分析型数据库资源组(一)

目录

前言

一、资源组介绍

二、资源组参数

1、按核心数分配CPU资源

2、按百分比分配CPU资源 

四、限制内存

1、角色级别内存限制

2、内存注意事项


前言

        数据库为用户提供了根据业务需求对查询进行排序以及提供资源的功能,该功能的主要目的是为了防止在资源不可用时仍然发起查询的行为。用户可以使用资源管理功能来限制并行的查询数、单个查询所使用的内存量和CPU使用量。


一、资源组介绍

        用户可以使用资源组在数据库中设置和使用CPU,内存和并发事务限制。定义资源组后,可以将该组分配给一个或多个数据库角色,或分配给外部组件,以便控制这些角色或组件使用的资源。当用户将资源组分配到角色(基于角色的资源组),用户定义该组的资源限制应用于所有的该组的所有角色。同样,将资源组分配给外部组件时,组限制将应用于组件的所有正在运行的实例。

        当用户执行查询时,数据库会根据为资源组定义的一组限制来评估查询。如果尚未达到组的资源限制并且查询不会导致组超过并发事务限制,数据库会立即执行查询。如果不满足这些条件,数据库会对查询进行排队。例如,如果已达到资源组的最大并发事务数,则后续查询将排队,并且必须等待其他查询在运行之前完成。当资源组的并发和内存限制被更改为足够大的值时,数据库也可以执行挂起的查询。

二、资源组参数

        资源组的参数

限制类型 描述
MEMORY_AUDITOR
用于资源组的内存审计。 指定cgroup资源组分配使用
CONCURRENCY
资源组中允许的最大并发事务数,包括活动和空闲事务
CPU_RATE_LIMIT
此资源组可用的CPU资源百分比
CPUSET
为该资源组保留的CPU核心数
MEMORY_LIMIT
该资源组可用的内存资源百分比
MEMORY_SHARED_QUOTA
提交到该资源组的事务之间共享的内资源百分比
MEMORY_SPILL_RATIO
内存密集型事务的内存使用阈值。当事务达到此阈值时,它将溢出到磁盘

 三、限制CPU

         数据库使用CPUSET和CPU_RATE_LIMIT资源组限制来标识CPU资源分配模式。 配置资源组时,必须仅指定其中一个限制。

        gp_resource_group_cpu_limit服务器配置参数标识要分配给每个数据库主机上的资源组的系统CPU资源的最大百分比。 无论为组配置的CPU分配模式如何,此限制都将控制主机上所有资源组的最大CPU使用率。 剩余的未预留CPU资源用于OS内核和数据库辅助守护进程。 默认 的gp_resource_group_cpu_limit值为0 .9(90%) 。

1、按核心数分配CPU资源

        用户可以使用CPUSET属性标识要为资源组保留的CPU核心。 用户指定的CPU核心必须在系统中可用,并且不能与为其他资源组保留的CPU核心重复。配置CPUSET时,请指定以逗号分隔的单核数字或数字间隔列表。必须将核心数字/间隔用单引号括起来,例如“1,3-4”。

        将CPU核心分配给CPUSET组时,请考虑以下事项:

  • 使用CPUSET创建的资源组仅使用指定的核心。如果组中没有正在运行的查询,则保留的核心处于空闲状态,并且其他资源组中的查询无法使用这些核心。 请考虑最小化CPUSET组的数量以避免浪费系统CPU资源
  • 将核心分配给资源组时,请使用尽可能少的核心编号。 如果替换数据库节点并且新节点CPU核心数少于原始节点,或者备份数据库并希望在具有较少CPU核心的节点的群集上还原它,则操作可能会失败

2、按百分比分配CPU资源 

        数据库节点CPU百分比在每个实例之间平均分配。 使用CPU_RATE_LIMIT配置的每个资源组都保留用于资源管理的实例CPU的指定百分比。 用户可以为资源组指定的最小CPU_RATE_LIMIT百分比为 1,最大值为100。 

        使用CPU_RATE_LIMIT在实例主机上配置的所有资源组的最大CPU资源使用量是以下值中的最小值:

  • 非保留CPU核心数除以所有CPU核心数乘以100
  • gp_resource_group_cpu_limit值

        配置有CPU_RATE_LIMIT的资源组的CPU资源分配是弹性的,因为数据库可以将空闲资源组的CPU资源分配给更繁忙的资源组。在这种情况下,当该资源组接下来变为活动时,CPU资源被重新分配给先前空闲的资源组。如果多个资源组繁忙,则根据其CPU_RATE_LIMIT的比率为它们分配任何空闲资源组的CPU资源。例如,使用CPU_RATE_LIMIT为40创建的资源组将分配两倍于使用CPU_RATE_LIMIT 为20创建的资源组的额外CPU资源。

四、限制内存

        启用资源组后,将在数据库节点,实例和资源组级别管理内存使用情况。用户还可以使用角色资源组在事务级别管理内存。gp_resource_group_memory_limit服务器配置参数标识要分配给每个数据库实例的资源组的系统内存资源的最大百分比。每个资源组保留用于资源管理的段内存的百分比。用户可以通过在创建资源组时指定的MEMORY_LIMIT值来标识此百分比。用户可以为资源组指定的最小MEMORY_LIMIT百分比为 1,最大值为100 。

1、角色级别内存限制

        资源组为角色保留的内存进一步分为固定和共享。创建资源组时指定的MEMORY_SHARED_QUOTA值标识可在当前运行的事务之间共享的预留资源组内存的百分比。按先到先得的原则分配。正在运行的事务可以使用MEMORY_SHARED_QUOTA中的任何一些或全部。CONCURRENCY标识角色资源组中允许的最大并发运行事务数。 由资源组保留的固定存储器被分成CONCURRENCY个事务槽数。每个插槽分配一个固定的,相等数量的资源组内存。当查询的内存使用量超过固定的每事务内存使用量时,数据库会将可用的资源组共享内存分配给查询。特定事务槽可用的最大资源组内存量是事务的固定内存和完整资源组共享内存分配的总和。

        MEMORY_SPILL_RATIO标识事务中内存密集型运算符的内存使用阈值。达到此阈值时,事务将溢出到磁盘。数据库使用MEMORY_SPILL_RATIO来确定要分配给事务的初始内存。可以为资源组指定的最小MEMORY_SPILL_RATIO百分比为0,最大值为100.默认MEMORY_SPILL_RATIO为20。

2、内存注意事项

         角色的资源组跟踪通过palloc()函数分配的所有数据库内存。使用Linux palloc()函数分配的内存不受这些资源组的管理。要确保角色的资源组准确跟踪内存使用情况,请避免使用malloc()在自定义数据库用户定义函数中分配大量内存。

你可能感兴趣的:(数据库)