GreenPlum系列-7-资源管理

资源管理是为了限制系统中活动的SQL对资源的消耗,包括CPU、MEM、并发等资源,避免并发SQL将系统资源耗尽导致的缓慢或崩溃。常用的资源管理模式包括 资源队列、资源组。

一、资源队列

GP默认启用的资源管理模式。数据库角色与单个资源队列关联,多个角色共享同一个资源队里。如果没有指定资源队列,则角色会被自动关联到默认资源队列pg_default。当用户提交一个执行SQL时,队列会根据其限制对查询评估,如果需要的资源没有超过限制,则立即执行,否则需要等到队列资源有空闲时执行,资源评估是先进先出原则。如果启用查询优先级,则会预估系统当前的负载并根据优先级进行资源分配。Superuser属性的角色不受资源队列限制。

1、参数

MEMORY_LIMIT:队列中所有查询能够使用的内存量。

ACTIVE_STATEMENTS:队列中槽位数量(最大并发)

PRIORITY:查询优先级,LOW 、MEDIUM(默认)、HIGH、MAX

MAX_COST:查询计划消耗限制。

2.资源组操作

创建资源组

create resource queue adhoc with (active_statements=20, memory_limit='1024MB');

指派角色到资源队列

alter role user_1 resource queue queue_test;

create role user_2 with login resource queue queus_test;

从队列中移除

alter role user_1 resource queue none;

修改资源队列

alter resource queue queue_test with (priority=MAX);

删除资源队列

drop resource queue queue_test;

查看资源队列

select * from gp_toolkit.gp_resqueue_status;

查看等待查询

select * from gp_toolkit.gp_locks_on_resqueue where lorwaiting='true';

清理等待查询

获取查询ID

SELECT rolname, rsqname, pid, granted,

current_query, datname

FROM pg_roles, gp_toolkit.gp_resqueue_status, pg_locks,

pg_stat_activity

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;

#pg_cancel_backend(id);

二、资源组

资源组使用Linux cgroup 进行资源限制,当用户执行查询时,数据库会根据资源组定义的限制进行评估。如果未达到限制并且查询不会导致组超过并发事务限制,SQL会立即执行。如果不满足,数据库会对查询进行排毒。事务以先进先出的方式评估。

  1. 限制参数

MEMORY_AUDITOR:资源组的内存审计器。

CONCURRENCY:资源组中允许的最大并发事务数。包括活动和空闲。

CPU_RATE_LIMIT:资源组可用CPU的百分比。

CPUSET:为资源组保留的CPU数。

MEMORY_LIMIT:资源组可用内存百分比。

MEMORY_SHARED_QUOTA:提交到资源组的事务之间共享的内存资源百分比。

MEMORY_SPILL_RATIO:内存密集型事务的内存使用阈值,超过阈值会溢出到磁盘。

  1. 操作资源组

开启资源组

gpconfig -c gp_resource_manager -v "group"

gpstop -M fast / gpstart

创建资源组

create resource group rgroup_test with (MEMORY_AUDITOR=cgroup, CONCURRENCY=10, CPUSET='1', MEMORY_LIMIT=30);

将资源组分配给角色

alter role user_1 resource group rgroup_test;

create role user_2 resource group rgroup_test;

查询资源限制

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 current_query, waiting, rsgname, rsgqueueduration from pg_stat_activity;

三、两种模式的区别

参数

资源队列

资源组

并行

在查询级别管理

在事务级别管理

CPU

指定队列顺序

指定CPU的使用百分比;使用Linux控制组

内存

在队列和操作级别管理;用户可以过量使用

在事务级别管理,可以进一步分配和追踪;用户不可以过量使用。

内存隔离

同资源组下的事务使用的内存是隔离的,不同资源组使用的内存也是隔离的。

用户

仅非管理员用户有限制。

非管理员用户和超级用户都有限制

排序

当没有可用槽位时,才开始排序

当槽位或内存不足时,开始排序

查询失效

当内存不足时,查询可能会立即失效

在没有更多的共享资源组内存的情况下,若事务到达了内存使用量限制后仍然提出增加内存的申请,查询可能会失效

避开限制

超级用户角色以及特定的操作者和功能不受限制。

SET、RESET和SHOW指令不受限制

外部组件

管理PL/Container CPU和内存资源

四、资源配置

  1. 系统

vm.overcommit_memory 系统分配给系统进程使用多少内存的方 0,1,2

vm.overcommit_ratio 系统分配给应用的内存百分比

2、资源队列

内存管理策略

gp_resqueue_memory_policy

eager_free:数据库在评估SQL对内存的申请时,分阶段统计,降低query报内存不足的可能性。

auto:内存消耗由 statement_mem 和 query_memory_limit 限制

资源队列的优先级

gp_resqueue_priority

on 使用, off 不使用, 不使用资源队列优先级时,所有队列公平对待。

gp_requeue_priority_cpucores_per_segment 每个segment可以使用的CPU盒数

gp_requeue_priority_sweeper_interval CPU时间片统计间隔

3.资源组

gp_resource_group_memory_limit 分配给数据库的内存百分比,默认70%

gp_workfile_limit_files_per_query 限制每个查询允许使用临时溢出文件的最大量。默认为0

gp_workfile_compression 压缩溢出文件

参考

http://docs-cn.greenplum.org/v6/admin_guide/wlmgmt.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Greenplum数据库的分布式部署,您需要遵循以下步骤: 1. 首先,确保您的系统符合Greenplum的硬件要求,并具备必要的操作系统和软件依赖。 2. 下载Greenplum数据库的安装包(greenplum-db-6.13.0-rhel7-x86_64.rpm),并将其复制到所有节点上。 3. 在每个节点上安装Greenplum数据库软件包。您可以使用以下命令进行安装: ``` rpm -ivh greenplum-db-6.13.0-rhel7-x86_64.rpm ``` 4. 创建一个主节点和多个段节点的配置文件(gpinitsystem_config),该文件指定了Greenplum数据库的分布式配置。您可以使用以下命令创建配置文件: ``` gpinitsystem -c gpinitsystem_config ``` 5. 编辑配置文件(gpinitsystem_config),指定主节点和段节点的主机名、IP地址、端口号等信息。确保所有节点都在配置文件中正确配置。 6. 在主节点上运行gpinitsystem命令以初始化Greenplum数据库集群。这将创建数据库实例并启动相关服务。您可以使用以下命令进行初始化: ``` gpinitsystem -c gpinitsystem_config ``` 7. 在每个段节点上启动Greenplum数据库服务。您可以使用以下命令启动服务: ``` gpstart -a ``` 8. 检查Greenplum数据库集群的状态,确保所有节点都已成功启动。您可以使用以下命令进行检查: ``` gpstate -a ``` 以上是Greenplum数据库的基本分布式部署步骤。请注意,这只是一个概述,并且需要根据您的特定环境进行适当的调整和配置。建议您参考Greenplum官方文档以获取更详细的部署指南和最佳实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值