Greenplum中的资源队列

0    42    3

Tags:

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

用资源队列进行工作负载管理

使用Greenplum数据库的工作负载管理根据业务需求对查询按照优先级分配资源,并且在资源不可用时阻止查询开始。

这一节描述Greenplum数据库的负载管理,并且解释如何使用资源队列来管理资源。使用资源队列,可用的内存和CPU资源可以被分配给执行在Greenplum数据库系统上的不同类别的查询。用户可以限制并发查询的数量、执行一个查询所用到的内存量以及处理一个查询耗费的CPU相对量。

资源管理主要关注的是能并发执行的查询数量以及分配给每个查询的内存量。如果不限制并发度和内存使用,就不可能保证可接受的性能。内存是最有可能限制系统处理能力的资源。因此,我们从Greenplum数据库的内存使用概述开始。

Greenplum数据库的内存使用概述

内存是一个Greenplum数据库系统的关键资源,如果被有效使用,就能确保高性能和高吞吐。这一主题描述Segment主机的内存如何在Segment之间分配以及管理员可以用来配置内存的选项。

一台Greenplum数据库的Segment主机运行多个PostgreSQL实例,它们都共享该主机的内存。这些Segment拥有相同的配置,并且在并行处理查询时它们同时消耗相似的内存量、CPU和磁盘I/O。

为了最好的查询吞吐,内存配置应该被仔细地管理。在Greenplum数据库的每个层次都有内存配置选项,从操作系统参数到用资源队列管理负载,再到设置分配给个别查询的内存量。

Segment主机内存

在一台Greenplum数据库的Segment主机上,可用的主机内存被执行在该计算机上的所有进程共享,包括操作系统、Greenplum数据库的Segment实例以及其他应用进程。管理员必须决定Greenplum数据库进程和非Greenplum数据库进程怎样共享主机的内存,并且配置系统有效地使用内存。定期监控内存使用同样重要,这样可以检测Greenplum数据库或其他进程消耗主机内存的方式变化。下面的图展示了在一台Greenplum数据库的Segment主机上内存如何被消耗。图 1. Greenplum数据库的Segment主机内存

Greenplum中的资源队列

从该图示的底部开始,标有A的线表示总的主机内存。在上方紧挨着线A的线显示总的主机内存由物理RAM和交换空间构成。

标有B的线显示可用的总内存必须被Greenplum数据库和主机上的所有其他进程共享。非Greenplum数据库进程包括操作系统和任意其他应用,例如系统监控代理。一些应用可能会使用相当大一部分内存,结果用户可能不得不调整每台Greenplum数据库主机上的Segment数量或者每个Segment的内存量。

Segment(C)每个都会得到等份的Greenplum数据库内存(B)。

在一个Segment中,资源队列管理着如何分配内存以执行一个SQL语句。资源队列要求用户把业务需求翻译成Greenplum数据库系统的执行策略,并且警惕可能降低性能的查询。

有非管理用户提交给Greenplum数据库系统的每一个语句都与一个资源队列相关联。该队列决定该语句是否将被允许执行,并且在资源可用时允许它执行。该语句可能被拒绝、立即执行或者被放入队列在资源可用时执行。

用户可以为不同类型的查询创建资源队列,并且为每个队列保留固定大小的Segment内存。另外一种选择是,用户可以设置一个服务器配置参数来指定为每个内存分配多少内存并且在资源队列上不加最大内存限制。

查询优化器产生一个查询执行计划,它由一系列被称为操作符(图中标为D)的任务构成。操作符执行诸如表扫描或连接之类的任务,并且一般会通过处理一个或者多个输入行集合产生中间查询结果。操作符接收一份资源队列分配给查询的内存。如果一个操作符无法在分配给它的内存中执行它所有的工作,它会把数据缓冲在磁盘上的溢出文件中。

配置Segment主机内存的选项

主机内存是该Segment主机上所有应用共享的总内存。主机内存量可以用下列任一方法配置:

  • 对节点增加更多RAM来增加物理内存。
  • 分配交换空间来增加虚拟内存的尺寸。
  • 设置内核参数vm.overcommit_memory和vm.overcommit_ratio来配置操作系统如何处理大型内存分配请求。

物理RAM和OS配置通常由平台团队和系统管理员管理。推荐的内核设置请见Greenplum数据库安装指南。

为操作系统和其他进程保留的内存量是与负载相关的。操作系统内存的最小推荐是32GB,但如果Greenplum数据库中很多并发,将保留内存增加到64GB可能是必须的。操作系统内存的最大用户是SLAB,它会随着Greenplum数据库并发和使用的端口数增加而增加。

vm.overcommit_memory内核参数应该总是被设置为2,这是对Greenplum数据库唯一的安全值。

vm.overcommit_ratio内核参数设置为应用进程使用的RAM百分数,剩下的保留给操作系统。Red Hat的默认值是50(50%)。将这个参数设置得过高可能会导致为操作系统保留的内存不足,这会导致Segment主机失效或者数据库失效。将这个设置保持在50的默认值通常是安全的,但有些保守。将这个值设置的太低会降低Greenplum数据库可用的内存量,进而降低并发量同时可以运行的查询的复杂度。在增加vm.overcommit_ratio时,重要的是记住总是为操作系统活动保留一些内存。要为vm.overcommit_ratio计算一个安全的值,首先用下面的公式确定Greenplum数据库进程可用的总内存(称为gp_vmem):

其中SWAP是主机上的交换空间(以GB为单位),而RAM是安装在主机上的RAM的GB数。用这个公式计算vm.overcommit_ratio:

配置Greenplum数据库内存

Greenplum数据库内存是可用于所有Greenplum数据库的Segment实例的内存量。

在设置Greenplum数据库集群时,用户决定每台主机运行的主Segment数量以及为每个Segment分配的内存量。根据CPU核数、物理RAM的量以及负载特点,Segment的数量通常是介于4和8之间的值。如果启用了Segment镜像,为失效时执行在一台主机上的最大数量的主Segment分配内存很重要。例如,如果用户使用默认的组镜像配置,一个Segment主机失效会让拥有失效主机镜像的主机上的活动主Segment数量翻倍。将每台主机的镜像散布在多台其他主机上的镜像配置可以降低这个最大值,允许为每个Segment分配更多内存。例如,如果用户使用一种块镜像配置,其中每块有4台主机且每台主机上有8个主Segment,单个主机失效将会导致块中其他主机有11个活动主Segment这一最大值,这比默认的组镜像配置的16个要少。

gp_vmem_protect_limit值是为每个Segment分配的内存量。它通过计算所有Greenplum数据库进程可用的内存并且除以失效时主Segment的最大数量得到。如果gp_vmem_protect_limit被设置得过高,查询可能会失败。使用下面的公式为gp_vmem_protect_limit计算一个安全值。使用这个公式计算gp_vmem(所有Greenplum数据库进程可用的内存):

其中 其中SWAP是主机上的交换空间(以GB为单位),而RAM是安装在主机上的RAM的GB数。使用这个公式计算gp_vmem_protect_limit:

其中max_acting_primary_segments是镜像Segment由于主机或Segment失效而被激活时可能运行在一台主机上的主Segment的最大数量。另一项重要的Greenplum数据库服务器配置参数是statement_mem。这个参数设置分配来执行查询的最大内存量。要为这个参数确定值,用每个Segment的内存量(gp_vmem_protect_limit)减去一个10%的安全量,然后除以期望并发执行的最大查询数量。默认的Greenplum书库资源队列允许最多20个并发查询。这里有一个公式计算statement_mem:

资源队列允许对分配给查询的内存量进行更多控制。

用资源队列管理负载概述

资源队列是Greenplum数据库系统中管理并发程度的主要工具。资源队列是使用SQL语句CREATE RESOURCE QUEUE创建的数据库对象。用户可以使用它们来管理可以并发执行的活动查询的数量、每种查询分配的内存量和查询的相对优先级。资源队列也防止查询消耗过多资源并且降低总体系统性能。

每个数据库都关联着一个单一资源队列,多个角色可以共享同一个资源队列。使用CREATE ROLE or ALTER ROLE语句的RESOURCE QUEUE短语可将角色分派到资源队列。如果没有指定资源队列,角色将与默认资源队列pg_default关联。

当用户提交一个查询执行时,会根据资源队列的限制评估查询。如果该查询不会导致队列超过它的资源限制,那么该查询将被立即运行。如果该查询导致队列超过其限制(例如,如果当前正在使用的活动语句槽已达最大数量),那么查询必须等待直到队列资源被释放出来才能运行。采用先进先出的方式评估查询。如果启用了查询优先,系统上的活动负载会被定期访问并且处理资源会被根据查询优先度重新分配。带有SUPERUSER属性的角色会被免除资源队列限制。超级用户查询总是被立即运行,而不管它们所属资源队列上的限制。图 2. 资源队列处理

Greenplum中的资源队列

资源队列定义了具有类似资源需求的查询的分类。管理员应该为其组织中各种类型的查询创建资源队列。例如,用户可能会为下列分类的查询创建资源队列,它们对应于不同的服务水平协议:

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
Greenplum中的资源队列后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章!
验证码:
请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

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

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦。
  • 18509239930
  • 个人微信

  • DB宝
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部