GreenPlum资源组的使用
资源组和资源队列
在Greenplum4版本中,要管理数据库的内存、CPU和并发事务只有资源队列(Resource Queues)这一种方法。而Greenplum5及之后的版本,提供了两种负载管理方法:资源队列(Resource Queues)和资源组(Resource Group),且Greenplum数据库中同时只能启用资源组或资源队列中的一个资源管理模式。
下面是资源队列和资源组的区别:
操作系统和Greenplum数据库内存设置对采用资源组来管理日常工作是非常有必要的:
vm.overcommit_memory
该Linux内核参数在/etc/sysctl.conf文件中设置,用来指定操作系统分配给系统进程使用多少内存的方法。vm.overcommit_memory在Greenplum数据库所在的机器上必须设置为2。
vm.overcommit_ratio
该Linux内核参数在/etc/sysctl.conf文件中设置,用来执行应用进程可以使用的内存百分比;剩余的内存留给操作系统。操作系统默认值(Red Hat上默认是50)对于部署Greenplum数据库集群基于资源组的管理方式是一个不错的初始值。如果感觉内存利用率太低,便可以提高该值;如果内存或交换分区使用太高,就减少该设置。
gp_resource_group_memory_limit
系统分配给Greenplum数据库的内存百分比。默认值为.7(70%)。
gp_workfile_limit_files_per_query
设置gp_workfile_limit_files_per_query以限制每个查询允许使用的临时溢出文件(工作文件)的大数量。当查询要求的内存比它能分配的更多时,它将创建溢出文件。当上述限制被超过时,查询会被中止。默认值为零,允许无限多的溢出文件并且可能会填满文件系统。
gp_workfile_compression
如果有很多溢出文件,则设置gp_workfile_compression来压缩这些溢出文件。压缩溢出文件可能有助于避免IO操作导致磁盘子系统过载。
其他考虑因素:
不要启用操作系统大页配置。
当您配置资源组内存时,提前考虑出现segment实例或segment主机宕机时,镜像segment变成主segment对系统内存的占用。
启用资源组
Resource Group基于linux内核提供的cgroup模块来实现,因此当使用Resource Group时,需要保证数据库所运行的操作系统上支持cgroup模块。
安装模块
yum install libcgroup-tools
配置文件/etc/cgconfig.d/gpdb.conf
group gpdb {
perm {
task {
uid = gpadmin;
gid = gpadmin;
}
admin {
uid = gpadmin;
gid = gpadmin;
}
}
cpu {
}
cpuacct {
}
memory {
}
cpuset {
}
}
启动服务并加入开机启动
systemctl start cgconfig.service
systemctl enable cgconfig.service
配置数据库参数,启用资源组
gpconfig -c gp_resource_manager -v "group"
重启数据库
gpstop
gpstart
数据库成功启用资源组后,会创建默认资源组admin_group和default_group,它具有以下属性
创建资源组
在创建一个Resource Group时,可以指定如下的属性:
在用角色创建资源组时,必须设置CPU_RATE_LIMIT或CPUSET和MEMORY_LIMIT限制值:
CREATE RESOURCE GROUP mygroup1 WITH (CPU_RATE_LIMIT=20, MEMORY_LIMIT=25);
在为外部组件创建资源组时,除了设置CPU_RATE_LIMIT或CPUSET和MEMORY_LIMIT限制值,还需要指定MEMORY_AUDITOR和设置CONCURRENCY =0,如:
CREATE RESOURCE GROUP mygroup_ext WITH (MEMORY_AUDITOR=cgroup, CONCURRENCY=,
CPUSET='1', MEMORY_LIMIT=15);
修改资源组参数设置
ALTER RESOURCE GROUP mygroup1 SET MEMORY_LIMIT 10;
ALTER RESOURCE GROUP mygroup_ext SET CPUSET '0,1';
为用户指定资源组
alter role test resource group mygroup1;
常用查询语句
查询资源组列表和参数设置的视图
SELECT * FROM gp_toolkit.gp_resgroup_config
其视图的sql语句
SELECT g.oid AS groupid, g.rsgname AS groupname,
t1.value AS concurrency, t1.proposed AS proposed_concurrency,
t2.value AS cpu_rate_limit, t3.value AS memory_limit,
t3.proposed AS proposed_memory_limit,
t4.value AS memory_shared_quota,
t4.proposed AS proposed_memory_shared_quota,
t5.value AS memory_spill_ratio,
t5.proposed AS proposed_memory_spill_ratio,
CASE
WHEN t6.value IS NULL THEN 'vmtracker'::text
WHEN t6.value = '0'::text THEN 'vmtracker'::text
WHEN t6.value = '1'::text THEN 'cgroup'::text
ELSE 'unknown'::text
END AS memory_auditor,
t7.value AS cpuset
FROM pg_resgroup g
JOIN pg_resgroupcapability t1 ON g.oid = t1.resgroupid AND t1.reslimittype = 1
JOIN pg_resgroupcapability t2 ON g.oid = t2.resgroupid AND t2.reslimittype = 2
JOIN pg_resgroupcapability t3 ON g.oid = t3.resgroupid AND t3.reslimittype = 3
JOIN pg_resgroupcapability t4 ON g.oid = t4.resgroupid AND t4.reslimittype = 4
JOIN pg_resgroupcapability t5 ON g.oid = t5.resgroupid AND t5.reslimittype = 5
LEFT JOIN pg_resgroupcapability t6 ON g.oid = t6.resgroupid AND t6.reslimittype = 6
LEFT JOIN pg_resgroupcapability t7 ON g.oid = t7.resgroupid AND t7.reslimittype = 7;
查询资源状态信息
SELECT * FROM gp_toolkit.gp_resgroup_status;
查询角色和资源组的关系
SELECT rolname, rsgname FROM pg_roles, pg_resgroup
WHERE pg_roles.rolresgroup=pg_resgroup.oid;
来源 https://www.modb.pro/db/52514
相关文章