Greenplum中的资源组

0    118    1

Tags:

👉 本文共约14933个字,系统预计阅读时间或需57分钟。

用户可以使用资源组在Greenplum数据库中设置和实施CPU,内存和并发事务限制。定义资源组后,可以将该组分配给一个或多个Greenplum数据库角色,或分配给外部组件(如PL /Container),以便控制这些角色或组件使用的资源。

当用户将资源组分配到角色(基于角色的资源组),用户定义该组的资源限制应用于所有的该组的所有角色。例如,对于一个资源组的内存限制标识了该组所有Greenplum数据库用户提交的运行事务的最大内存使用量。

同样,将资源组分配给外部组件时,组限制将应用于组件的所有正在运行的实例。 例如,如果为PL/Container外部组件创建资源组,则为组定义的内存限制将指定为其分配组的每个PL/Container运行时的所有正在运行的实例的最大内存使用量。

该章节包含以下小节

Parent topic: 管理资源

理解角色和组件资源组

Greenplum数据库支持两类型型的资源组:管理角色资源的组,以及管理外部组件(如PL/Container)资源的组。

资源组的最常见应用程序是管理不同角色可以在Greenplum数据库群集中并发执行的活动查询的数量。 用户还可以管理Greenplum为每个查询分配的CPU和内存资源量。

角色的资源组使用Linux控制组(cgroup)进行CPU资源管理。Greenplum数据库使用称为vmtracker的内存审计器在内部为这些资源组跟踪虚拟内存。

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

在角色的资源组中,事务以先进先出的方式进行评估。 Greenplum数据库定期评估系统的活动工作负载,根据需要重新分配资源和启动/排队作业。

用户还可以使用资源组来管理外部组件(如PL/Container)的CPU和内存资源。 外部组件的资源组使用Linux cgroup来管理组件的总CPU和总内存资源。

Note: Greenplum数据库的容器化部署(例如Greenplum for Kubernetes)可能会创建一组嵌套的cgroup,以管理主机系统资源。 嵌套cgroup会影响Greenplum数据库资源组对CPU百分比,CPU核心和内存的限制(Greenplum数据库外部组件除外)。 Greenplum数据库资源组系统资源限制基于父组的配额。

例如,Greenplum数据库在cgroup演示中运行,Greenplum Database cgroup嵌套在cgroup演示中。 如果cgroup演示配置CPU限制为系统CPU资源的60%且Greenplum数据库资源组CPU限制设置为90%,则主机系统CPU资源的Greenplum数据库限制为54%(0.6 x 0.9)。

嵌套的cgroup不会影响Greenplum数据库外部组件(如PL/Container)的内存限制。 仅当用于管理Greenplum数据库资源的cgroup未嵌套时,才能管理外部组件的内存限制,cgroup配置为顶级cgroup。

有关配置cgroup以供资源组使用的信息,请参阅使用资源组.

资源组的参数和限制

当用户创建一个资源组时,请注意以下几点:

  • 通过识别该组存储器是如何审核指定资源组的类型。
  • 提供一组限制,用于确定组可用的CPU和内存资源量。

资源组的参数和限制:

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

Note: 不对SET,RESET和SHOW命令强制执行资源限制。

内存审计器

MEMORY_AUDITOR属性通过标识组的内存审计器来指定资源组的类型。 指定vmtrackerMEMORY_AUDITOR的资源组标识角色的资源组。 指定cgroupMEMORY_AUDITOR的资源组标识外部组件的资源组。

默认的MEMORY_AUDITOR是vmtracker。

用户为资源组指定的MEMORY_AUDITOR确定Greenplum数据库是否以及如何使用限制属性来管理CPU和内存资源:

限制类型角色资源组外部组件资源组
CONCURRENCY否;必须为零(0)。
CPU_RATE_LIMIT
CPUSET
MEMORY_LIMITYes
MEMORY_SHARED_QUOTA视组件决定
MEMORY_SPILL_RATIO视组件决定

事务并行限制

CONCURRENCY限制控制角色资源组允许的最大并发事务数。

Note: CONCURRENCY限制不适用于外部组件的资源组,对于此类组必须设置为零(0)。

角色的每个资源组在逻辑上被划分为等于CONCURRENCY限制的固定数量的槽。 Greenplum数据库为这些插槽分配相等,固定百分比的内存资源。

角色资源组的默认CONCURRENCY限制值为20。

Greenplum数据库将资源组达到CONCURRENCY限制后提交的任何事务排队。 当正在运行的事务完成时,如果存在足够的内存资源,Greenplum Database将排队并执行最早的排队事务。

用户可以设置服务器配置参数gp_resource_group_bypass来绕过资源组的并行限制。

CPU限制

通过将特定CPU核心分配给组,或通过标识要分配给组的分段CPU资源的百分比,可以配置要为段主机上的资源组保留的CPU资源份额。 Greenplum数据库使用CPUSET和CPU_RATE_LIMIT资源组限制来标识CPU资源分配模式。 配置资源组时,必须仅指定其中一个限制。

用户可以在Greenplum数据库群集中同时使用两种CPU资源分配模式。 用户还可以在运行时更改资源组的CPU资源分配模式。

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

Note: 如果用户在Greenplum数据库群集节点上运行其他工作负载,则默认的gp_resource_group_cpu_limit值可能不会留下足够的CPU资源,因此请务必相应地调整此服务器配置参数。

Warning: 避免将gp_resource_group_cpu_limit设置为高于.9的值。 这样做可能会导致高工作负载查询接近所有CPU资源,可能使Greenplum数据库辅助进程匮乏。

按核心数分配CPU资源

用户可以使用CPUSET属性标识要为资源组保留的CPU核心。 用户指定的CPU核心必须在系统中可用,并且不能与为其他资源组保留的任何CPU核心重叠。 (尽管Greenplum数据库使用用户专门为该组分配给资源组的核心,但请注意,系统中的非Greenplum进程也可以使用这些CPU核心。)

配置CPUSET时,请指定以逗号分隔的单核数字或数字间隔列表。必须将核心数字/间隔用单引号括起来,例如“1,3-4”。

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

  • 使用CPUSET创建的资源组仅使用指定的核心。如果组中没有正在运行的查询,则保留的核心处于空闲状态,并且其他资源组中的查询无法使用这些核心。 请考虑最小化CPUSET组的数量以避免浪费系统CPU资源。
  • CPU核心0未分配:在以下情况下,CPU核心0用作回退机制:
    • admin_group和default_group至少需要一个CPU核心。 保留所有CPU内核后,Greenplum Database会将CPU内核0分配给这些默认组。 在这种情况下,用户为其分配CPU核心0的资源组与admin_group和default_group共享核心。
    • 如果通过一个节点替换重新启动Greenplum数据库集群,并且节点没有足够的内核来为所有CPUSET资源组提供服务,则会自动为这些组分配CPU核心0以避免系统启动失败。
  • 将核心分配给资源组时,请使用尽可能少的核心编号。 如果替换Greenplum数据库节点并且新节点的CPU核心数少于原始节点,或者备份数据库并希望在具有较少CPU核心的节点的群集上还原它,则操作可能会失败。 例如,如果用户的Greenplum数据库群集有16个核心,则分配核心1-7是最佳选择。 如果创建资源组并将CPU核心9分配给该组,则数据库还原到8核心节点将失败。

使用CPUSET配置的资源组在CPU资源上具有更高的优先级。 在段主机上配置了CPUSET的所有资源组的最大CPU资源使用百分比是保留的CPU核心数除以所有CPU核心数乘以100。

为资源组配置CPUSET时,Greenplum数据库会禁用组的CPU_RATE_LIMIT并将值设置为-1。

Note: 在为Greenplum数据库群集启用基于资源组的资源管理,必须为资源组配置CPUSET。

按百分比分配CPU资源

Greenplum数据库节点CPU百分比在Greenplum节点上的每个段之间平均分配。 使用CPU_RATE_LIMIT配置的每个资源组都保留用于资源管理的段CPU的指定百分比。

用户可以为资源组指定的最小CPU_RATE_LIMIT百分比为1,最大值为100。

在Greenplum数据库群集中定义的所有资源组指定的CPU_RATE_LIMIT的总和不得超过100。

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

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

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

为资源组配置CPU_RATE_LIMIT时,Greenplum数据库会禁用组的CPUSET并将值设置为-1。

内存限制

启用资源组后,将在Greenplum数据库节点,段和资源组级别管理内存使用情况。用户还可以使用角色资源组在事务级别管理内存。

gp_resource_group_memory_limit服务器配置参数标识要分配给每个Greenplum数据库段主机上的资源组的系统内存资源的最大百分比。默认的gp_resource_group_memory_limit值为.7(70%)。

Greenplum数据库节点上可用的内存资源在节点上的每个段之间进一步平均分配。当基于资源组的资源管理处于活动状态时,分配给段主机上每个段的内存量是Greenplum数据库可用的内存乘以gp_resource_group_memory_limit服务器配置参数,并除以主机上活动主段的数量:

每个资源组保留用于资源管理的段内存的百分比。用户可以通过在创建资源组时指定的MEMORY_LIMIT值来标识此百分比。用户可以为资源组指定的最小MEMORY_LIMIT百分比为1,最大值为100。

在Greenplum数据库群集中定义的所有资源组指定的MEMORY_LIMIT总和不得超过100。

于角色的资源组的附加内存限制

资源组为角色保留的内存进一步分为固定和共享组件。创建资源组时指定的MEMORY_SHARED_QUOTA值标识可在当前运行的事务之间共享的预留资源组内存的百分比。此记忆按先到先得的原则分配。正在运行的事务可以使用MEMORY_SHARED_QUOTA中的任何一个,一些或全部。

用户可以指定的最小MEMORY_SHARED_QUOTA为0,最大值为100.默认MEMORY_SHARED_QUOTA为20。

如前所述,CONCURRENCY标识角色资源组中允许的最大并发运行事务数。由资源组保留的固定存储器被分成CONCURRENCY个事务槽数。每个插槽分配一个固定的,相等数量的资源组内存。Greenplum数据库会保证每个事务的固定内存。

Figure 1. 资源组内存分配

用资源组进行工作负载管理 - 图1

当查询的内存使用量超过固定的每事务内存使用量时,Greenplum数据库会将可用的资源组共享内存分配给查询。特定事务槽可用的最大资源组内存量是事务的固定内存和完整资源组共享内存分配的总和。

全局共享内存

为所有资源组(包括默认admin_group和default_group组)配置的MEMORY_LIMIT的总和标识预留资源组内存的百分比。如果此总和小于100,则Greenplum数据库会将任何未预留的内存分配给资源组全局共享内存池。

资源组全局共享内存仅适用于使用vmtracker内存审计器配置的资源组。

在可用时,Greenplum数据库在首次分配插槽和资源组共享内存后为事务分配全局共享内存。Greenplum数据库以先到先得的方式为事务分配资源组全局共享内存。

Note: Greenplum数据库跟踪但不主动监视资源组中的事务内存使用情况。如果资源组的内存使用量超过其固定内存分配,则在满足以下所有条件时,资源组中的事务将失败:

  • 没有可用的资源组共享内存。
  • 没有可用的全局共享内存。
  • 该事务请求额外的内存。

当用户为全局共享内存池保留一些未分配的内存(例如,10-20%)时,Greenplum数据库会更有效地使用资源组内存。全局共享内存的可用性还有助于缓解内存消耗或不可预测的查询失败。

查询运算符内存

大多数查询运算符都是非内存密集型的; 也就是说,在处理过程中,Greenplum数据库可以将其数据保存在已分配的内存中。当内存密集型查询运算符(如连接和排序)处理的数据多于可以保存在内存中的数据时,数据会溢出到磁盘。

gp_resgroup_memory_policy服务器配置参数控制所有查询运算符的内存分配和分配算法。Greenplum数据库支持eager-free(默认)和资源组的自动内存策略。当用户指定自动策略时,Greenplum数据库使用资源组内存限制在查询运算符之间分配内存,为非内存密集型运算符分配固定大小的内存,其余为内存密集型运算符。当eager_free策略到位时,Greenplum数据库通过在稍后的查询阶段将已完成处理的运算符释放的内存重新分配给运算符,从而更好地在运算符之间分配内存。

MEMORY_SPILL_RATIO标识事务中内存密集型运算符的内存使用阈值。达到此阈值时,事务将溢出到磁盘。Greenplum数据库使用MEMORY_SPILL_RATIO来确定要分配给事务的初始内存。

可以为资源组指定的最小MEMORY_SPILL_RATIO百分比为0.最大值为100.默认MEMORY_SPILL_RATIO为20。

在为角色创建资源组时定义MEMORY_SPILL_RATIO,用户可以使用memory_spill_ratio服务器配置参数在会话级别基于每个查询选择性地设置此限制。

memory_spill_ratio和低内存查询

低memory_spill_ratio设置(例如,在0-2%范围内)已被证明可以提高具有低内存要求的查询的性能。使用memory_spill_ratio服务器配置参数可以基于每个查询覆盖该设置。例如:

其他内存注意事项

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

使用资源组

Important: 在RedHat 6.x和CentOS 6.x系统上启用基于资源组的工作负载管理时,已观察到显着的Greenplum数据库性能下降。此问题是由Linux cgroup内核错误引起的。这个内核错误已在CentOS 7.x和Red Hat 7.x系统中修复。

如果用户使用RedHat 6并且资源组的性能对于用户的用例是可接受的,请将用户的内核升级到版本2.6.32-696或更高版本,以便从cgroups实现的其他修复程序中受益。

条件

Greenplum数据库资源组使用Linux控制组(cgroup)来管理CPU资源。Greenplum数据库还使用cgroup来管理外部组件的资源组的内存。使用cgroups,Greenplum将Greenplum进程的CPU和外部组件内存使用与节点上的其他进程隔离开来。这允许Greenplum在每个资源组的基础上支持CPU和外部组件内存使用限制。

有关cgroup的详细信息,请参阅Linux发行版的控制组文档。

在Greenplum数据库群集中的每个节点上完成以下任务,以设置用于资源组的cgroup:

  1. 如果用户在Greenplum数据库群集节点上运行SuSE 11+操作系统,则必须在每个节点上启用交换记帐并重新启动Greenplum数据库群集。swapaccount内核引导参数控制SuSE 11+系统上的交换记帐设置。设置此引导参数后,必须重新引导系统。有关详细信息,请参阅SuSE 11发行说明中的Cgroup交换控制讨论。用户必须是超级用户或具有sudo访问权限才能配置内核引导参数和重新引导系统。

  2. 创建Greenplum数据库cgroups配置文件/etc/cgconfig.d/gpdb.conf。用户必须是超级用户或具有sudo访问权限才能创建此文件:

  3. 将以下配置信息添加到 /etc/cgconfig.d/gpdb.conf:

    此内容配置由gpadmin用户管理的CPU,CPU计算,CPU核心集和内存控制组。Greenplum数据库仅将内存控制组用于使用cgroupMEMORY_AUDITOR创建的资源组。

  4. 如果尚未安装并正在运行,请安装Control Groups操作系统软件包,并在每个Greenplum Database节点上启动cgroups服务。用户运行以执行这些任务的命令将根据节点上安装的操作系统而有所不同。用户必须是超级用户或具有sudo访问权限才能运行这些命令:

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复