GaussDB细粒度资源管控技术透视
本文分享自华为云社区《【GaussTech速递】技术解读之细粒度资源管控》,作者:GaussDB 数据库。
背景
对数据库集群内资源管控与资源隔离一直是企业客户长久以来的诉求。华为云GaussDB作为一款企业级分布式数据库,一直致力于满足企业对大型数据库集群的管理需要。
数据库可以管理的资源有计算资源与存储资源,计算资源包括CPU、内存、IO与网络,存储资源包括数据存储空间、日志存储空间与临时文件等。
从用户角度来看,资源管控通过设定阈值或者优先级限定程序对资源的使用,保证承诺服务等级协议的同时,又满足不同用户间资源隔离,达成多个租户共享数据库资源的目的。
从系统的角度来看,引入资源监控与控制的手段,可以实现资源在可控情况下被合理利用的目的,避免资源耗尽,防止系统停止响应、崩溃等情况的发生。作业优先级,可以保证作业平稳运行,避免某个作业占用资源过高时影响其他作业,并在资源富裕时,实现资源利用的最大化。除此以外,还能满足外部的期望,保证系统资源使用最大化。通过对作业控制,可以保证作业是平稳的,避免作业执行过程中出现不可控的行为。
为了解决上述目标,华为云GaussDB数据库提供了一种对数据库集群内资源进行细粒度管控的方案——细粒度资源管控。该方案在不同的管控粒度(如用户级、会话级与语句级)和不同的管控维度(CPU、内存与IO)都提供了对应的管控能力。用户可以根据自己业务需求采取合适的管控维度与管控粒度来达成资源管控与资源隔离的目标,满足不同场景的资源控制的需要。
技术架构
create resource pool respool_tp with(control_group="cgroup_tp", max_dynamic_memory="5GB", max_shared_memory="5GB", io_limits=50, io_priority="High");
alter role tp_user RESOURCE POOL 'respool_tp'; create resource pool respool_report with(control_group="cgroup_report", max_dynamic_memory="3GB", max_shared_memory="3GB", io_limits=30, io_priority="Medium");
alter role report_user RESOURCE POOL 'respool_report'; create resource pool respool_other with(control_group="cgroup_other", max_dynamic_memory="1GB", max_shared_memory="1GB", io_limits=10, io_priority="Low");
alter role other_user RESOURCE POOL 'respool_other';
关键能力
CPU管控
gs_cgroup -c -S cgroup_tp -s 50;
gs_cgroup -c -S cgroup_report -s 30;
gs_cgroup -c -S cgroup_other -s 10;
内存管控
IO管控
连接数与并发管控
alter resource pool respool_tp with(max_connections=-1, max_concurrency = -1);
alter resource pool respool_report with(max_connections=200, max_concurrency = 100);
alter resource pool respool_other with(max_connections=100, max_concurrency = 50);
存储空间管控
alter user tp_user PERM SPACE '200G' TEMP SPACE '20G' SPILL SPACE '20G';
alter user report_user PERM SPACE '100G' TEMP SPACE '10G' SPILL SPACE '10G';
alter user other_user PERM SPACE '100G' TEMP SPACE '10G' SPILL SPACE '10G';
特性演示
1. 创建控制组:
gs_cgroup -c -S class1 -s 20;
gs_cgroup -c -S class2 -s 60;
2. 创建资源池:
CREATE RESOURCE POOL xuuer_pool with(control_group = "class1");
CREATE RESOURCE POOL xyuser1_pool with(control_group = "class2");
3. 创建用户绑定资源池:
create role user1 RESOURCE POOL 'xuuer_pool';
create role user2 RESOURCE POOL 'xyuser1_pool';
整理两个用户的CPU使用率并绘制曲线图如下图,可看出user1与user2的CPU使用率最终会平衡到3比1的状态,符合资源池对应的CGroup控制组里设置的20%与60%的比例,达到了CPU管控的效果。
总结
细粒度资源管控作为多租户的资源隔离的底座,实现资源的精准划分与控制,并解决高负载场景下资源不足而导致集群不可服务的问题。该特性适用于数据隔离不敏感,但对不同业务有资源隔离需求的场景,如果客户对资源隔离和数据隔离都有需求的话,可以关注一下我们后面即将分享的多租数据库特性哦!
GaussDB细粒度资源管控技术透视的更多相关文章
- 详解GaussDB(DWS) 资源监控
摘要:本文主要着重介绍资源池资源监控以及用户资源监控. 本文分享自华为云社区<GaussDB(DWS)资源监控之用户.队列资源监控>,作者: 一只菜菜鸟. GaussDB(DWS)资源监控 ...
- 游戏UI框架设计(7): 资源国际化技术
游戏UI框架设计(7) --资源国际化技术 说起"资源国际化"技术,个人认为可以追述到微软Window2000 PC操作系统的发布,在这之前windows98操作系统的开发都是先由 ...
- 混部之殇-论云原生资源隔离技术之CPU隔离(一)
作者 蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友.目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作. 导语 混部,通常指在离线混部(也有离在线混部之说 ...
- Window黑客编程之资源释放技术
前言 今天说一下写病毒木马会广泛使用的一种技术--资源释放技术.为什么我们在写木马时会使用到资源释放技术呢?这是因为它可以使我们写的程序变得简洁.如果程序需要额外加载一些DLL文件或者文本文件,我们可 ...
- Hadoop YARN资源隔离技术
YARN对内存资源和CPU资源采用了不同的资源隔离方案.对于内存资源,它是一种限制性资源,它的量的大小直接决定应用程序的死活,因为应用程序到达内存限制,会发生OOM,就会被杀死.CPU资源一般用Cgr ...
- 云图说 | 云上资源管控有神器!关于IAM,你想知道的都在这里!
摘要:统一身份认证(Identity and Access Management,简称IAM)是华为云上帮助您安全控制华为云资源访问权限的基础服务.通过本期云图说,您可以初步了解IAM的基本功能. 从 ...
- 利用多线程资源竞争技术上传shell
通过多线程资源竞争的手段同时上传两个头像,就可以在Apache+Rails环境下实现远程代码执行.这并不是天方夜谭,同时我相信许多文件上传系统都会有这个漏洞……这是一个非常有趣的安全实验,一起来看看吧 ...
- kubernetes kubelet组件中cgroup的层层"戒备"
cgroup是linux内核中用于实现资源使用限制和统计的模块,docker的风靡一时少不了cgroup等特性的支持.kubernetes作为容器编排引擎,除了借助docker进行容器进程的资源管理外 ...
- 细说GaussDB(DWS)复杂多样的资源负载管理手段
摘要:对于如此多的管控功能,管控起来实际的效果到底如何,本篇文章就基于当前最新版本,进行效果实测,并进行一定的分析说明. 本文分享自华为云社区<GaussDB(DWS) 资源负载管理:并发管控以 ...
- 一文详解GaussDB(DWS) 的并发管控和内存管控
摘要:DWS的负载管理分为两层,第一层为cn的全局并发控制,第二层为资源池级别的并发控制. 本文分享自华为云社区<GaussDB(DWS) 并发管控&内存管控>,作者: fight ...
随机推荐
- 无监督学习-K-means算法
无监督学习-K-means算法 1. 什么是无监督学习 一家广告平台需要根据相似的人口学特征和购买习惯将美国人口分成不同的小组,以便广告客户可以通过有关联的广告接触到他们的目标客户. Airbnb 需 ...
- Make It Equal 题解
Problem Link 简要题意 翻译很清楚. 思路 提供一种简单直接的思路. 可以发现最多会操作 \(n\) 次. 那么就可以每次直接枚举切的高度 \(h\),检查更改是否超过 \(k\),之后暴 ...
- CSP-S2021江西自评分数(10-26)
娱乐性质,不负责任 在机房大佬的努力下,评测完了 总表 姓名 编号 总分 airport bracket palin traffic JX-00001 JX-00001 0 0 0 0 0 JX-00 ...
- 深入理解 C++ 右值引用和移动语义:全面解析
C++11引入了右值引用,它也是C++11最重要的新特性之一.原因在于它解决了C++的一大历史遗留问题,即消除了很多场景下的不必要的额外开销.即使你的代码中并不直接使用右值引用,也可以通过标准库,间接 ...
- C#-GroupBox包含控件,如何获取这些控件的名称
您可以使用 Enumerable.OfType在GroupBox中查找和投射您的RadioButtons: var radioButtons = groupBox1.Controls.OfType&l ...
- C++调用Python-6:调用Python类
# mytest.py class Test: def hello(self): print("this is test class hello function no params ret ...
- Mybatis总体框架设计
Mybatis架构概览 Mybatis架构整体设计如下: 接口层和数据库交互的方式 Mybatis和数据库的交互方式有两种 使用传统的MyBatis提供的API: 使用Mapper接口 使用传统的My ...
- 第十七篇:Django入门
一.模板 二.BootStrap使用 三.web框架简绍 四.Django使用 五.创建APP 六.APP各目录功能 七.静态文件处理 八.模板语言 九.请求过程
- ActiveMQ c# 系列——实例(二)
前言 前面一章中介绍了activemq,并且呢安装了. 这一章就来看一下实例吧. 正文 我使用队列举例. 是这样子,队列是一对一的关系,比如说我生产了一条消息,那么只要有一个消费者消费完毕那么就算消费 ...
- List拖拽功能的实现
概述 如何在HarmonyOS应用中实现一个可拖拽的列表组件,通过这个组件,用户可以拖动列表中的项并将其放置在新的位置,实现列表的动态排序. 核心功能 列表初始化:创建并填充列表数据. 拖 ...