采用资源组的形式管理数据库集群的内存、cpu等信息,非特殊说明,需要在集群每台机器上执行。

1.安装cgroup工具

# 1.安装
yum install -y libcgroup-tools# 如果碰到 No module named site 错误 执行以下命令
unset PYTHONPATH
# 再执行安装命令 yum install -y libcgroup-tools 完成安装# 2.安装完成后输入
declare -x PYTHONPATH="/usr/local/greenplum-db-6.13.0/lib/python/"
declare -x PYTHONHOME="/usr/local/greenplum-db-6.13.0/ext/python/"

2.配置GP数据库资源组

官网说明:https://gpdb.docs.pivotal.io/6-11/admin_guide/workload_mgmt_resgroups.html

# 1.添加GP数据库资源组配置文件
vim /etc/cgconfig.d/gpdb.conf# 配置使用硬件信息 文件内容如下
group gpdb {perm {task {uid = gpadmin;gid = gpadmin;}admin {uid = gpadmin;gid = gpadmin;}}cpu {}cpuacct {}cpuset {} memory {}
}# 2.使配置生效
cgconfigparser -l /etc/cgconfig.d/gpdb.conf# 3.启动cgroup服务并加入开机自启
systemctl start cgconfig
systemctl enable cgconfig# 4.验证配置是否成功
# 识别挂载目录
grep cgroup /proc/mounts# 第一行的路径信息即为 cgroup_mount_point tmpfs /sys/fs/cgroup tmpfs ro,nosuid,nodev,noexec,mode=755 0 0# 验证命令
ls -l <cgroup_mount_point>/cpu/gpdb
ls -l <cgroup_mount_point>/cpuacct/gpdb
ls -l <cgroup_mount_point>/cpuset/gpdb
ls -l <cgroup_mount_point>/memory/gpdb
# 验证实例 只要用户是gpadmin并且有内容说明cgroup配置成功
[root@tcloud ~]# ls -l /sys/fs/cgroup/cpu/gpdb
total 0
-rw-rw-r-- 1 gpadmin gpadmin 0 Mar 31 17:02 cgroup.clone_children
--w--w---- 1 gpadmin gpadmin 0 Mar 31 17:02 cgroup.event_control
-rw-rw-r-- 1 gpadmin gpadmin 0 Mar 31 17:02 cgroup.procs
-r--r--r-- 1 gpadmin gpadmin 0 Mar 31 17:02 cpuacct.stat
-rw-rw-r-- 1 gpadmin gpadmin 0 Mar 31 17:02 cpuacct.usage
-r--r--r-- 1 gpadmin gpadmin 0 Mar 31 17:02 cpuacct.usage_percpu
-rw-rw-r-- 1 gpadmin gpadmin 0 Mar 31 17:02 cpu.cfs_period_us
-rw-rw-r-- 1 gpadmin gpadmin 0 Mar 31 17:02 cpu.cfs_quota_us
-rw-rw-r-- 1 gpadmin gpadmin 0 Mar 31 17:02 cpu.rt_period_us
-rw-rw-r-- 1 gpadmin gpadmin 0 Mar 31 17:02 cpu.rt_runtime_us
-rw-rw-r-- 1 gpadmin gpadmin 0 Mar 31 17:02 cpu.shares
-r--r--r-- 1 gpadmin gpadmin 0 Mar 31 17:02 cpu.stat
-rw-rw-r-- 1 gpadmin gpadmin 0 Mar 31 17:02 notify_on_release
-rw-rw-r-T 1 gpadmin gpadmin 0 Mar 31 17:02 tasks

3.集群配置资源组(主节点 gpadmin 用户操作)

# 切换用户
su gpadmin# 1.开启资源组
gpconfig -c gp_resource_manager -v "group"# 2.修改集群连接数
gpconfig -c max_connections -v 1000 -m 800# 3.设置资源组cpu总限制(设置总cpu最多为主机的90%)
gpconfig -c gp_resource_group_cpu_limit  -v 0.9# 4.设置资源组内存总限制(设置总内存最多为主机的90%)
gpconfig -c gp_resource_group_memory_limit -v 0.9

4.数据库配置资源组

# 进入数据库命令行
psql# 1.修改默认资源组所占资源(设置默认组和管理员组cpu占用为5%,默认的为10%)
ALTER RESOURCE GROUP default_group SET cpu_rate_limit 5;
ALTER RESOURCE GROUP admin_group SET cpu_rate_limit 5; # 2.创建 dsjgroup 资源组(创建 dsjgroup 使用cpu为90% 内存为90%)
CREATE RESOURCE GROUP dsjgroup WITH (CPU_RATE_LIMIT=90, MEMORY_LIMIT=90, MEMORY_SPILL_RATIO=0);# 3.修改 dsjgroup 并发数量(修改并发量为200,默认为20)
ALTER RESOURCE GROUP dsjgroup SET CONCURRENCY 200; # 4.创建dsj角色(创建dsj角色并指定使用的资源组为dsjgroup)
CREATE ROLE dsj RESOURCE GROUP dsjgroup;# 5.修改dsj角色属性(设置dsj可以创建数据库,可以创建角色,超管,可以登陆)
alter role dsj createdb;
alter role dsj createrole;
alter role dsj with superuser;
alter role dsj login;
alter role dsj with password 'dsj';# 6.重启集群
gpstop && gpstart

5.指定用户登录

# 1.修改dsj远程登录
echo "local all dsj 0.0.0.0/0 md5">> /home/gpadmin/data/master/gpseg-1/pg_hba.conf
# 重新加载数据库配置
gpstop -u# 2.使用 dsj 登录并创建数据库
psql -U dsj
# 创建数据库
create database sjzt;
# 退出 psql \q

6.资源组相关

6.1 CPU限制

可以用CPU核心数方式也可以按照百分比来分配,但是同一资源组不能两种方式共用,参数:gp_resource_group_cpu_limit 即每个segments段主机上的CPU使用最大值,默认0.9,剩余CPU用来OS内核和GP辅助进程,所以不建议超过90%。

  • 方式一:按照核数来分配

参数:CPUSET = “1,3,4” 即指定1,3,4号CPU专门为资源组服务;此时CPU_RATE_LIMIT = -1。

资源组只会使用自己专用的CPU,专用分配方式优先级要高于百分比方式,即百分比分配的CPU是扣除专用CPU之后剩下的,所以说尽量少使用专用方式。标号尽量从最小的“1”开始用,避免restore时候报错。目前用gpcc创建资源组时不支持这种分配方式。

  • 方式二:按照百分比来分配

参数:CPU_RATE_LIMIT 取值1~100,所有资源组相加不能超过100;此时CPUSET = -1。

CPU_RATE_LIMIT 的最大值 = min(gp_resource_group_cpu_limit,非专用CPU数 / 所有CPU核数 × 100) 资源组对于CPU资源的分配是相对弹性的,它会把闲的CPU分配给忙的资源组,但是如果所有资源组都处于忙的状态,此时CPU资源的分配就会参考资源组设置中的CPU_RATE_LIMIT参数了。

6.2 内存限制

  • 参数:gp_resource_group_memory_limit 为每个点上的内存最大百分比,默认0.7。

每个段主机的内存在 gp_resource_group_memory_limit 的基础上平均分配 rg_perseg_mem = ((RAM * (vm.overcommit_ratio%) + SWAP) * gp_resource_group_memory_limit) / num_active_primary_segments

  • 参数:overcommit_ratio 为一次申请的内存不允许超过可用内存的大小。

  • 参数:MEMORY_LIMIT 取值0~100,创建资源组时为必录项。=0时,没有预留固定内存, 直接到全局共享区取内存 default_group初始值是0,admin_groupp初始值是10,所有资源组的MEMORY_LIMIT相加 ≤ 100,建议值 80~90。当事务没有可用的资源组共享内存且没有可用的全局共享内存且申请额外的内存时,事务将失败。

  • 参数:MEMORY_SHARED_QUOTA 取值0~100,指的是共享部分的百分比,默认80,即只有20%的分配内存为固定的。对于资源组已经分得的内存(MEMORY_LIMIT>0 and sum(MMEORY_LIMIT)<=100),再分为固定部分和共享部分。

  • 参数:MEMORY_SPILL_RATIO 取值0~100,默认值是0,就是没有阈值,=0时gp使用statement_mem参数来分配事务的初始内存。一个事务里内存敏感型操作的阈值,如果达到阈值则数据由内存向磁盘spill。gp用这个参数来确定对事务的初始内存分配。若资源组里MEMORY_LIMIT = 0,则memory_spill_ratio也必须是0,当 memory_spill_ratio <= 2 且 statement_mem <= 10M 时,对内存需求较低的事务会有较高的效率,可以在事务级进行控制:

    SET memory_spill_ratio=0;
    SET statement_mem='10 MB';
    

6.3 全局共享内存

当所有资源组的 MEMORY_LIMIT 之和 < 100时,全局共享内存被启用,剩余内存被收集形成 shared pool 当全局共享内存 = 100 - sum(MEMORY_LIMIT) 介于10~20%时,gp会更有效的使用资源组分配内存。分配算法采用先到先得FCFS,全局共享内存的使用还有助于缓解内存消耗或不可预测的查询失败,综上:

(1) 每个host的可用内存 = RAM × gp_resource_group_memory_limit%
(2) 每个segment的可用内存 = 每个host的可用内存 / 主segments数量
(3) 每个rg的内存 = 每个segment的内存 × MEMORY_LIMIT%
(4) 其中共享部分 = 每个rg的内存 × MEMORY_SHARED_QUOTA%
(5) 其中固定部分 = 每个rg的内存 × (100 - MEMORY_SHARED_QUOTA)%
(6) 事务槽 = 其中固定部分 / 资源组的并发数
(7) 全局共享内存 = 每个segment的可用内存 × (100 - sum(MEMORY_LIMIT))%

内存使用优先级:当前事务槽(6) ==> 资源组中共享部分(4) ==> 全局共享内存(7) ==> 事务失败

6.4 内存配额

SQL提交到server端会被分配一定内存,并且生成一个执行计划树,计划树的每个节点都是一个“运算符”,例如排序连接和哈希连接。每个运算符都是单独执行的线程(至少100KB)

默认只会评估 SELECT、SELECT INTO、CREATE TABLE AS SELECT和 DECLARE CURSOR声明;如果服务器配置的 resource_select_only 参数为 off,那么INSERT、UPDATE 和DELETE声明也会受评估。

6.5 资源组与角色操作

-- 创建资源组
CREATE RESOURCE GROUP rgroup1 WITH (CPU_RATE_LIMIT=20, MEMORY_LIMIT=25);
-- 修改资源组配置
ALTER RESOURCE GROUP rg_role_light SET CONCURRENCY 7;
-- 删除资源组
DROP RESOURCE GROUP exec;
-- 创建角色并分配资源组
CREATE ROLE mary RESOURCE GROUP exec;
-- 调整角色资源组
ALTER ROLE bill RESOURCE GROUP rg_light;
-- 从资源组中删除角色
ALTER ROLE mary RESOURCE GROUP NONE;

6.6 资源组相关运维脚本

-- 查看资源组配置
SELECT * FROM gp_toolkit.gp_resgroup_config;-- 查看资源组实时状态
SELECT * FROM gp_toolkit.gp_resgroup_status;
SELECT * FROM gp_toolkit.gp_resgroup_status_per_host;
SELECT * FROM gp_toolkit.gp_resgroup_status_per_segment;-- 查看用户在哪个资源组
SELECT rolname, rsgname FROM pg_roles, pg_resgroup WHERE pg_roles.rolresgroup=pg_resgroup.oid;

6.7 resource queue 与 resource group 区别

resource group(需要安装和启用) 和 resource queue(默认安装)只能二选一。

参数 资源队列 资源组
并行 在查询级别管理 在事务级别管理
CPU 指定队列顺序 指定CPU的使用百分比;使用Linux控制组
内存 在队列和操作级别管理;用户可以过量使用 在事务级别管理,可以进一步分配和追踪;用户不可以过量使用。
内存隔离 同资源组下的事务使用的内存是隔离的,不同资源组使用的内存也是隔离的。
用户 仅非管理员用户有限制。 非管理员用户和超级用户都有限制
排序 当没有可用槽位时,才开始排序 当槽位或内存不足时,开始排序
查询失效 当内存不足时,查询可能会立即失效 在没有更多的共享资源组内存的情况下,若事务到达了内存使用量限制后仍然提出增加内存的申请,查询可能会失效
避开限制 超级用户以及特定的操作者和功能不受限制。 SET、RESET和SHOW指令不受限制
外部组件 管理PL/Container CPU和内存资源

Greenplum【集群搭建 02】cgroup工具安装+用户资源组配置+集群资源组配置+数据库资源组配置+资源组相关信息(一篇学会资源组配置)相关推荐

  1. Hadoop集群搭建之Hadoop组件安装

    兵马未动,粮草先行 --汉语成语 系列文章目录 Hadoop集群搭建之Linux系统安装 Hadoop集群搭建之Hadoop组件安装 文章目录 系列文章目录 前言 一.IP和主机名称配置 (一)Had ...

  2. mysql 数据库集群搭建:(四)pacemaker管理三台maxscale集群,搭建mariadb读写分离中间层集群...

    为什么80%的码农都做不了架构师?>>>    <mysql 数据库集群搭建:(一)VirtualBox中多台CentOS虚拟机间和windows主机间互通以及访问互联网设置& ...

  3. 【安卓开发系列 -- 开发环境】Unbuntu 下 Android 持续集成打包环境搭建 -- Jenkins 构建工具安装(gradle + git + android 工具)

    [安卓开发系列 -- 开发环境]Unbuntu 下 Android 持续集成打包环境搭建 -- Jenkins 构建工具安装(gradle + git + android 工具) [1]Unbuntu ...

  4. VUE前段开发-开发环境搭建和开发工具安装

    一 VUE介绍 (1)VUE,也就是vue.js,官方的介绍是是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上 ...

  5. Hadoop详解(五)——ZooKeeper详解,ZooKeeper伪分布搭建和集群搭建,Hadoop集群搭建,sqoop工具的使用

    ZooKeeper简介 什么是ZooKeeper? ZooKeeper是Google的Chubby一个开源的实现,是Hadoop分布式协调服务. 它包含了一个简单的原语集,分布式应用程序可以基于它实现 ...

  6. linux下安装oracle集群,【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)...

    目录 数据库安装 继oracle集群安装之后,接下来也是最重要的数据库安装,整个数据库安装难度不大,用户以oracle用户身份登录RAC1主节点,对解压后的文件安装.主节点下安装后,其他所有结点自动安 ...

  7. 大数据集群搭建之Linux的安装(一)

    1.准备工具 VMWare.centos mimal版本系统文件. 2.工具安装 1.安装vmware软件 安装软件地址: VMWare:http://pan.baidu.com/s/1qYnySrE ...

  8. delphi 企业微信消息机器人_GitHub - guoxianlong/insight: Insight是一个可以管理企业微信群机器人的小工具,可以非常方便的往群里发布即时消息和定时消息。...

    最科幻的企业微信群机器人管理工具 非常方便的发布群即时消息和定时消息,解放双手,提升沟通效率 部署教程 更新日志(2020.05.31) 修复设置为智能跳过工作日时,周日依然提醒问题. 前端修复定时成 ...

  9. oracle集群搭建视频,Oracle RAC安装视频(高俊峰视频)

    高俊峰视频: 第一讲:Oracle RAC体系结构 1.oracle rac的实质是多个OS上的多个实例访问同一个数据库: 多个节点实例间通过oracle私有网络进行通信: 数据库的数据文件.日志文件 ...

最新文章

  1. 第二阶段团队项目冲刺站立会议(九)
  2. python sql语句传参数_pyMySQL SQL语句传参问题,单个参数或多个参数说明
  3. 使用示例_在Unity中使用ComputeShader示例
  4. php 安卓实现实时导航,用安卓平板电脑轻松实现GPS实时导航
  5. python笔记之序列(str的基本使用和常用操作)
  6. editorconfig常用配置
  7. flask 模板 php,Flask四之模板
  8. SSD+caffe︱Single Shot MultiBox Detector 目标检测+fine-tuning(二)
  9. VS2010链接SQLsever2008数据库时出现[DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒
  10. 项目5 BBS博客项目
  11. 安捷伦or是德信号源+频谱仪操作: 从程控到自动测试 (四)平坦度检测的程控实现
  12. 实现文件及文件批量改名的工具(包含未确定盘符的情况下)
  13. bzoj3123【SDOI2013】森林
  14. ArcGIS模型构建器前提条件的应用(附省界县点练习数据)
  15. 重磅:第十二届中国西部国际资本论坛盛大举办,分布式存储行业备受瞩目!
  16. 2020面试自动化测试面试题【含答案】
  17. 手机截图并传输到电脑工具
  18. 对QQ和搜狗拼音的期望 - 2010.6
  19. 牛客第十场 F.Popping Balloons
  20. 记第十六次CCF CSP考试的经历

热门文章

  1. 土木工程结构力学————虚功原理
  2. 当前时间转换成UTC时间
  3. 咩小饬的造轮子之路(彩票篇)
  4. 关于如何安装linux系统
  5. Ubuntu 用GParted调整分区大小
  6. 【Linux】-- 基本指令
  7. MySQL数据的导出和导入工具
  8. 全球及中国犬淋巴瘤治疗行业研究及十四五规划分析报告
  9. python日历类_Python 时间日历类型
  10. 想成为高级程序员MYSQL的那些知识你需要全懂