26 资源队列工作负载管理
26 资源队列工作负载管理
使用Greenplum的工作负载管理的优先次序,并根据业务需求分配资源来查询,并防止查询时资源不可用开始。
本节将介绍Greenplum数据引擎的工作负载管理,并说明如何使用资源队列管理资源。使用资源的队列中,可用的存储器和CPU资源可以被分配给不同类型的的Greenplum的系统上执行查询。可以限制并发查询的数量,所使用的内存来执行查询的数量,并专门用于处理查询的CPU的相对量。
主资源管理问题是可以同时执行的查询的数量和存储器分配给每个查询量。在不限制的并发性和存储器的使用情况,它是不可能保证可接受的性能。存储器是最有可能限制该系统的处理能力的资源。因此,我们首先Greenplum数据引擎的内存使用情况的概述。
26.1 在Greenplum的内存使用情况的概述
存储器为Greenplum的系统,并有效地使用时,能够确保高的性能和吞吐量的关键资源。本主题介绍段主内存是如何细分,并提供给管理员配置内存的选项之间进行分配。
一个Greenplum数据段的主机运行多个PostgreSQL的情况下,所有的共享主机的内存。段具有相同的结构和它们消耗的内存,CPU和磁盘IO同时相似量的,在并行查询工作时。
为了获得最佳的查询吞吐量,内存配置必须慎重处理。有在Greenplum数据每一个级别的内存配置选择,从操作系统参数,管理工作负载资源队列,要设置分配给单个查询的内存量。
The following figure illustrates how memory isconsumed on a Greenplum segment host.
在说明的底部开始,线标记为A表示总主机内存。该生产线正上方线A的总主机内存包括物理RAM和交换空间。
该段(C)各获得Greenplum的数据库内存(B)的一个相等的份额。
在一个领域,资源管理队列内存是如何分配给执行SQL语句。资源队列,让你在你的Greenplum系统业务需求转换执行政策并防范可能降低性能的查询。
提交的非管理用户到一个Greenplum的系统中的每个语句与一个资源队列相关联。队列确定是否该语句将被允许执行,并且当资源可用时,允许其执行。该声明可能会被拒绝,立即执行,或者排队时资源可用来执行。
可以创建用于不同类型的查询资源队列和保留段存储器的一个固定部分,用于每个队列。另外,您也可以设置服务器配置参数指定多少内存分配为每个查询,并把没有最大内存限制对资源的队列中。
主机内存是由段主机上的所有应用程序共享的内存总量。主机存储器的量可以使用以下任何方法来配置:
•设置内核参数vm.overcommit_memory和vm.overcommit_ratio配置操作系统如何处理大的内存分配请求。
物理RAM和操作系统配置通常是由平台团队和系统管理员进行管理。参考Greenplum数据引擎安装指南(Greenplum Database Installation Guide)推荐的内核参数设置。
vm.overcommit_meniory内核参数应该始终设置为2,对Greenplum数据的唯一安全值。
要计算vm.overcommit_ratio一个安全值,首先要确定可用于Greenplum的数据库进程的总内存,叫gp_vmem,利用如下公式计算:
gp_vmem =((SWAP + RAM) - (7.5GB + 0.05 * RAM)) / 1.7
其中SWAP是在主机上的交换空间,单位是GB,RAM是安装在主机上的RAM的大小,单位是GB。使用这个公式来计算vm.overcommit_ratio值:
vm.overcommit_ratio= (RAM - 0.026 * gp_vmem) / RAM
例如,SWAP是32GB,RAM是64GB,则gp_vmem = ((32 + 64) - (7.5 +0.05 * 64)) / 1.7=50.1764705882353
vm.overcommit_ratio= (RAM - 0.026 * gp_vmem) / RAM =(64 – 0.026*50.1764705882353) /64 =0.979615809
Configuring Greenplum Database Memory
Greenplum的数据库内存是内存提供给所有Greenplum数据段实例的数量。
使用下面的公式来计算gp_vmem_protect_limit一个安全值。
计算gp_vmem,所有Greenplum的数据库进程的可用内存,使用如下公式:
gp_vmem = ((SWAP +RAM) - (7.5GB + 0.05 * RAM)) / 1.7
其中SWAP是在主机上的交换空间,单位是GB,RAM是安装在主机上的RAM的大小,单位是GB。
计算gp_vmem_protect_limit使用这个公式:
gp_vmem_protect_limit = gp_vmem /max_acting_primary_segments
这里max_acting_primary_segments是主链段,可以是最大数量
另一个重要的Greenplum数据库服务器配置参数是statement_mem。此参数设置的最大内存量分配给执行查询。要确定这个值
(gp_vmem_protect_limit * 0.9)/ max_expected_concurrent_queries
资源队列可以分配给查询的内存量的控制。请参阅配置工作负载管理的详细信息。
26.2 Overview of Managing Workloads with Resource Queues
如果查询不会导致队列超过其资源限制,那么该查询就会立即运行。如果查询导致队列超过其限制(例如,如果活动语句的最大插槽数目前都在使用),那么查询必须等到队列资源是空闲的才能运行。
资源队列定义具有相似资源需求的查询类。关键的建议administratrors创造的各类机构中的工作负载的资源队列。例如,你可以创建资源队列查询以下类,分别对应不同的服务等级协议:
每个段所有的查询的总内存量例如,在ETL队列memory_limit的设置为2GB允许ETL查询每个段最多使用2GB的内存。
例如, the pg_defauit resource queue has ACTIVE_STATEMENTS = 20.
为队列时隙数;最大并发级别的队列。当使用了所有的插槽,新的查询必须等待。每个查询默认使用的存储器等量。
例如,在pg_defauit资源队列中ACTIVE_STATEMENTS=20。
注: Pivotal建议您使用memory_limit的和ACTIVE_STATEMENTS设置为资源队列,而不是MAX_COST限制。
在Greenplum数据引擎优化分配一个数值代价每个查询。如果成本超过了所述资源队列设置MAX_COST值,查询被拒绝,因为过于昂贵。
一个资源队列允许的并发查询的数量取决于memory_limit参数是否被设置:
•当memory_limit的设置上的资源队列,查询队列可同时执行的数量由队列的可用内存的限制。
这个例子有三类具有不同特点和服务水平协议(SLA)查询。三种资源队列为他们配置。该段存储器的一部分被保留为安全余量。
Resource Queue Name |
Active Statements |
Memory Limit |
Memory per Query |
ETL |
3 |
2GB |
667MB |
Reporting |
7 |
3GB |
429MB |
Executive |
1 |
1.4GB |
1.4GB |
一旦查询已经开始执行,它保持其分配的存储器中的队列中,直到它完成,即使在执行期间实际消耗小于其分配的内存量。
默认情况下提交队列中的每个语句分配的内存500MB。现在考虑
1.用户ADHOC_1提交查询Q1,覆盖STATEMENT_MEM到800MB。在Q1语句获准进入该系统。
3. Q1和Q2仍在运行,用户ADHOC3提交查询Q3,使用默认的500MB。
查询Q1和Q2使用了队列的1500MB的1300MB。因此,Q3必须等待Q1或Q2完成才能运行。
优先级设置为资源队列从memory_limit的和ACTIVE_STATEMENTS设置,以确定查询是否被录取到队列中,并最终执行的是不同的。
优先级设置适用于查询他们变得活跃了。活动查询共享可用的CPU
资源通过其资源的队列优先级设置决定。当从一个高优先级队列声明进入集团积极运行报表,它可能会声称可用的CPU更大的份额,减少分配给已经运行在较小的优先级设置队列报表份额。
Figure 26: CPU share readjusted according topriority Note:
在这些图中所示的百分数是近似的。高,低和最高优先级的队列之间的CPU使用率并不总是正是这些比例计算。
当执行查询进入组中运行报表,CPU使用率是调整,以考虑其最大的优先级设置。这可能是比分析师和报告查询一个简单的查询,但直到它完成,它会获取CPU的最大份额。
Figure 27: CPU share readjusted for maximumpriority query
For more information about commands to setpriorities, seeSetting Priority Levels.
26.3 Steps to Enable Workload Management
在Greenplum数据引擎启用和使用工作负载管理涉及以下高级任务:
2.创建资源队列并对其设置的限制。请参阅创建资源队列和修改资源队列。
3.分配一个队列的一个或多个用户角色。请参见分配角色(用户)资源队列。
4.使用工作负载管理系统的观点来监控和管理资源的队列。请参阅检查资源队列状态。
26.4 配置工作负载管理
To configure workload management
•max_resource_queues- 设置资源的队列的最大数量。
•max_resource_portals_per_transaction- 设置每个事务允许同时打开的游标的最大数量。需要注意的是一个开放的光标将在资源队列举行活动查询插槽。
•resource_cleanup_gangs_on_wait- 以一个槽在资源队列之前清理了空闲段工作进程。
•stats_queue_level- 启用资源队列使用情况统计信息收集,然后可以
• max_resource_queues -设置资源的队列的最大数量。
• max_resource_portais_per_transaction -设置每个事务最多可以打开几个游标 (Cursor)。值得注意的是每个游标需要占用资源队列的一个活动查询。
• resource_cleanup_gangs_on_wait-在开始一个新的查询之前先清空所在资源 队列中其他空闲的工作进程。
• stats_queue_level- 激活资源队列使用信息收集,这样就可以通过查询系统视图 Pg_stat_resqueues 查看。
• gp_resqueue_memory_policy-启用Greenplum的内存管理特性。
3. 以下参数与查询优先级有关。注意,这些参数都是本地(LOCAL)参数,必须修改所有 Instance 的postgresql.conf文件:
• gp_resqueue_priority -缺省状态下查询优先级特性开启。
• gp_resqueue_priority_sweeper_interval -设置CPU为所有活动语句重新计算 CPU资源分配的时间。缺省值通常己经可以满足常规的DB操作。
为master 和 standby master设置10。通常情况下,只有master实例在maser主机上。在段主机上设置段实例为2.5。
实际的CPU核心利用率是基于Greenplum的数据库的并行查询并执行查询所需要的资源的能力。
注意:被包括在CPU内核的数量不限CPU核心是提供给操作系统。例如,虚拟CPU核心被包括在CPU内核的数量。
$ gpconfig --showgp_vmem_protect_limit
6. 比如,要修改一个参数的值,且Master的值与Segment不同:
$ gpconfig -c gp_resqueue_priority_cpucores_per_segment -v 2 -m 8
7. 重启GPDB以确保修改的参数生效(本节介绍的参数都需要重启才能生效):
26.5 创建资源队列
创建资源队列涉及到Name、成本、活动语句数量、执行优先级等。通过CREATE RESOURCE QUEUE命令来创建新的资源队列。
26.5.1 Creating Queues with an Active Query Limit
资源队列通过设置ACTIVE_STATEMENTS控制活动语句的数量。例如,创建 一个名称为adhoc活动语句数量为3的资源队列:
=# CREATE RESOURCE QUEUE adhoc WITH(ACTIVE_STATEMENTS=3);
26.5.2 创建含内存限制的资源队列
MEMORY_LIMIT=0.9*8GB=7.2GB。如果存在多个资源队列,他们的 MEMORY_LIMIT总和应被控制为7.2GB。
比如,创建一个活动语句数量为10,内存限制为2000MB的资源队列(每个语句 在执行时在每个Instance上获得200MB的内存):
=# CREATE RESOURCE QUEUE myqueue WITH (ACTIVE_STATEMENTS=10/MEMORY_LIMIT='2000MB');
缺省的内存分配可以在每个语句通过设置statement_mem参数复写,但不可超过 MEMORY_LIMIT和max_statement_mem设定的值。比如,分配更多的内存:
=> SELECT * FROM my_big_table WHERE column='value' ORDER BY id;
26.5.3设置优先级别
为了控制CPU资源的使用,管理员可以设置合适的优先级。在并发争用CPU资 源时,高优先级资源队列中的语句将可以获得比低优先级资源队列中的语句更 多的CPU资源。
优先级可以在 CREATE RESOURCE QUEUE 和 ALTER RESOURCE QUEUE 的
时候通过WITH来设置。例如,为adhoc和reporting队列指定优先级,管理员可 以使用下面的命令:
=# ALTER RESOURCE QUEUE adhoc WITH (PRIORITY=LOW);
=# ALTER RESOURCE QUEUE reporting WITH (PRIORITY=HIGH);
创建最高优先级的队列executive,管理员可以使用下面的命令:
=# CREATE RESOURCE QUEUE executive WITH (ACTIVE_STATEMENTS=3,PRIORITY=MAX);
在优查询优先级特性开启时,资源队列的优先级缺省为MEDIUM。seeHowPriorities Work.
重要提示:要使得资源队列的优先级设置在执行语句中强制生效,必须确保优 先级特性的相关参数已经设置好。参见”配置工作负载管理”。
26.6 Assigning Roles (Users) to a Resource Queue
使用ALTER ROLE或者CREATE ROLE命令来分配ROLE到资源队列。比如:
=# ALTER ROLE name RESOURCE QUEUE queue_name;
=# CREATE ROLE name WITH LOGIN RESOURCE QUEUE queue_name;
每个ROLE同一时间只能被分配到一个资源队列,可以使用ALTER ROLE命令修改 ROLE的资源队列。
资源队列的分配必须通过逐个User的方式进行。如果有一个层级较高的ROLE(比如 GROUP ROLE),将给ROLE分配到一个资源队列并不会将其包含的User分配到该资源队列。
SUPERUSER总是不受资源队列限制的。SUPERUSER的查询总是可以立即得到执行, 而不管资源队列的限制如何设置。
26.6.1 从资源队列中移除ROLE
=# ALTER ROLE role_name RESOURCE QUEUE none;
在创建资源队列后,可以使用ALTER RESOURCE QUEUE命令来改变或者重置队列 的限制。还可以使用DROP RESOURCE QUEUE命令删除资源队列。
26.7 修改资源队列
在创建资源队列后,可以使用ALTER RESOURCE QUEUE命令来改变或者重置队列的限制。还可以使用DROPRESOURCE QUEUE命令删除资源队列。
26.7.1变更资源队列
使用ALTERRESOURCE QUEUE命令来改变资源队列的限制。一个资源队列必 须包含ACTIVE_STATEMENTS或者MAX_COST(或者都包含)。变更资源队列,
=# ALTER RESOURCE QUEUE adhoc WITH (ACTIVE_STATEMENTS=5);
=# ALTER RESOURCE QUEUE exec WITH (MAX_COST=100000.0);
要将活动语句数量或者内存限制重置为无限制,可以使用-1值。要重置Cost门 槛为无限制,可以设置为-1值。比如:
=# ALTER RESOURCE QUEUE adhoc WITH (MAX_COST=-1.0, MEMORY_LIMIT='2GB');
可以使用ALTERRESOURCE QUEUE命令改变查询优先级。比如,设置一个资源队列的优先级为最低级别:
ALTER RESOURCE QUEUE webuser WITH (PRIORITY=MIN);
26.7.2删除资源队列
使用DROP RESOURCE QUEUE命令删除资源队列。要删除一个资源队列,该 资源队列不能与任何ROLE相关,或者队列中有语句正等待执行。删除一个资源队列:
26.8 检查资源队列状态
26.8.1 查看排队语句和资源队列状态
管理员可以通过查看视图gp_toolkit.gp_resqueue_status来查看资源队列的状态。
该视图展示系统中每个资源队列有多少语句在等待执行,多少语句正在执行。 查看资源队列在系统中的创建、限制、当前的状态:
=# SELECT * FROM gp_toolkit.gp_resqueue_status;
26.8.2 查看资源队列统计信息
如果要追踪资源队列的统计信息和性能,需要为资源队列开启统计信息收集配置。这可以通过配置Master上postgresql.conf文件的这个参数来实现:
更多关于资源队列统计信息收集的问题可以参考PostgreSQL的相关文档。
26.8.3 查看分配到资源队列的ROLE
要查看ROLE与资源队列之间的关联关系,使用系统日志表pg_roles和 gp_toolkit.gp_resqueue_status 来获得:
要查看ROLE与资源队列之间的关联关系,使用系统日志表pg_roles和 gp_toolkit.gp_resqueue_status 来获得:
=# SELECT rolname, rsqname FROM pg_roles,
WHERE pg_roles.rolresqueue=gp_toolkit.gp_resqueue_status.queueid;
SELECT rolname, rsqname FROM pg_roles, pg_resqueue
WHERE pg_roles.rolresqueue=gp_toolkit.gp_resqueue_status.queueid;
26.8.4 查看资源队列中等待的语句
=# SELECT * FROM gp_toolkit.gp_locks_on_resqueue WHERE lorwaiting='true';
若该查询没有结果返回,意味着此时没有语句在资源队列中等待执行。
26.8.5 清除资源队列中等待的语句
SELECT rolname, rsqname, pid, granted,
FROM pg_roles, gp_toolkit.gp_resqueue_status, pg_locks,
WHERE pg_roles.rolresqueue=pg_locks.objid
AND pg_locks.objid=gp_toolkit.gp_resqueue_status.queueid
AND pg_stat_activity.procpid=pg_locks.pid
AND pg_stat_activity.usename=pg_roles.rolname;
若没有结果返回,意味着当前没有语句处于资源队列中。比如有两个语句在资源队列中可能是这种样子的:
rolname |
| rsqname 丨 |
pid |
granted 丨 |
current_query |
丨 datname |
sammy |
webuser | |
31861 |
| t |
<IDLE> in transaction |
丨 namesdb |
daria |
webuser 丨 |
31905 |
| f |
SELECT * FROM topten; |
丨 namesdb |
根据输出结果确定需要清除语句的进程ID(pid)。通过下面的方式清除语句:
注意:尽量不要使用OS的KILL命令。译者认为,不是完全不可以用,如果不小心把系统搞崩溃了有能力拯救的话,其实怎么杀都无所谓。
26.8.6查看活动语句的优先级
26.8.7重置活动语句的优先级
=# SELECT gp_adjust_priority(752, 24905, 'HIGH')
26 资源队列工作负载管理相关推荐
- 《Greenplum5.0 最佳实践》 内存与资源队列 (四)
避免内存错误和GPDB资源问题 内存管理对GPDB集群具有重要的性能影响.大多数环境推荐使用默认设置.不要去改变默认设置,除非你真的理解了自己系统的需求. 解决内存溢出错误 内存不足错误绘制出遇到内存 ...
- DB2 Workload Management 工作负载管理最佳实践
转自:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0912db2workloadm/index.html 概要介 ...
- 【云驻共创】GaussDB(DWS)云数仓工作负载管理流程体验
文章目录 前言 一.GaussDB(DWS)工作负载管理介绍 1.工作负载管理满足的主要业务场景 2.工作负载管理概览 二.GaussDB(DWS)工作负载队列介绍与使用 1.工作负载队列机制介绍 2 ...
- 【Yarn】hadoop的yarn资源队列
文章目录 1.美图 0. 起因 1.查看 1.1 web查看 1.2 命令行查看某一个队列 2. 调度器的选择 3. capacity调度器 3.1 什么是capacity调度器 3.2 特性 3.3 ...
- UltraScale时钟资源和时钟管理模块
UltraScale时钟资源和时钟管理模块 绪论 图2.1和2.2给出了UltraScale结构的时钟结构.从图中可以看出,基本的结构是由表示分段时钟行和列的CR块构成的CR以一个单元的方式排列,从而 ...
- 第十九章——使用资源调控器管理资源(2)——使用T-SQL配置资源调控器
第十九章--使用资源调控器管理资源(2)--使用T-SQL配置资源调控器 原文: 第十九章--使用资源调控器管理资源(2)--使用T-SQL配置资源调控器 前言: 在前一章已经演示了如何使用SSMS来 ...
- SpringMVC拦截器2(资源和权限管理)(作为补充说明)
SpringMVC拦截器(资源和权限管理) 1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServle ...
- 利用文件摘要简化游戏资源的引用管理
资源的引用管理是个有趣的话题,最近我在代码里实践了一种做法,可以在某些方面简化资源的管理,完成之后简单记录在这里.这篇文章先介绍传统的各种方式,然后简单说明一下,这个实践在传统方式的基础上做了哪些改善 ...
- TMS、物流系统、司机运输商、承运商、结算流程、运输流程、运输调度、结构图、在途跟踪、提货单、签收单、回单交接、车辆管理、运力资源、报价管理、发票管理、询价单管理、审批报价、KPI数据、适度配载
TMS.物流系统.司机运输商.承运商.结算流程.运输流程.运输调度.结构图.在途跟踪.提货单.签收单.回单交接.车辆管理.运力资源.报价管理.发票管理.询价单管理.审批报价.KPI数据.适度配载.订单 ...
最新文章
- 900万张标注图像,谷歌发布Open Images最新V3版
- poj1144(割点)
- webservice 测试窗体只能用于来自本地计算机的请求
- 正则表达式判断号码靓号类型
- c++中c_str()函数
- arcgis中欧氏距离操作_ArcGIS空间统计工具—平均中心与中位数中心
- 8 一点就消失_消失的莉莉安(26)
- 使用sar进行性能分析
- 手把手教我班小姐姐学java之面向对象
- Codeforces Edu Round 68 (Rated for Div. 2)
- script language=javascriptwindow.location.href=http://blog.securitycn.net/script
- PowerBuilder反编译,PowerBuilder 反编译
- php通过函数怎么禁止百度蜘蛛抓取,怎么屏蔽百度蜘蛛(Baiduspider)抓取网站
- 失业的程序员(十二):潜意识的智商
- 基于rfid的毕业设计题目50例
- Atcoder ARC093F : Dark Horse
- micropython入门指南电子版_MicroPython入门指南
- 弹性盒子 -- flex
- 【源码】紫色UI趣味测试小程序源码各种测试(趣味测试、爱情测试、缘分测试、性格测试)
- python实用小工具
热门文章
- CSS进阶:vertical-align垂直居中对齐、溢出的文字省略(网页常用)
- inoreader android 去广告,安卓阅读器APP—Inoreader,高效订阅源推荐
- 眼图(Eye Diagram)与数字信号测试眼图
- C分割字符串以及strtok
- 微信公众号开发--微信JS-SDK分享到朋友圈和分享给朋友
- 一个可以地址和各种格式的经纬度查询互换的网址,支持百度、高德、Google等地图对比查询。
- 【机器学习】聚类学习笔记+西瓜书数据集K-means实现
- 家庭服务机器人仿真平台运行指南
- python 金融分析代码_手把手教你以python为工具进行量化金融分析
- epson机器人编程 范例_案例研究