TiDB v7.1.0 版本 Resource Control体验

news2024/12/26 14:51:46

作者: Ming 原文来源: https://tidb.net/blog/8abfaa25

简介

近期迎来了 TiDB v7.1.0 版本,也是2023年首发的LTS(Long-Term Support Release)版本,相比于之前的 v6.5.0 LTS版本已经过去了很长时间,在该版本当中,引入了之前 v6.6.0-DMR 与 v7.0.0-DMR 的新功能,并进行了改进,那其中,最让人值得注意的就是,在 v6.6.0 版本的时候 资源管控(Resource Control)作为实验特性加入之前版本,现如今到 v7.1.0 版本已经正式GA,该功能的实现,对 TiDB 来说具有里程碑的意义,它可以把 TiDB 集群分割成多个小的逻辑单元,即使某些单元过度使用资源,也不会影响其他单元所需资源的使用。这种分割可以使数据库更加稳定和可靠,因为单元之间的互相独立性能够保证故障不会影响整个数据库集群。那么也就是说,我们在该功能的加持下,可以做到在不影响业务的情况下,合并其他业务,保证互不影响,这样可以说是大幅度的降低了成本。

使用场景

既然说该功能对于 TiDB 来说具有里程碑的意义,那么它必然存在它的道理,接下来我们来看一下它的使用场景都有哪些:

通过观察上图可以发现,我们只要有足够的资源支持,可以把多个中小业务,去合并到一起来管理,并且呢,合并到一起后还不会出现资源争抢的状况,只需要设置好各自的资源与优先级就可以了,这样大大的降低了运维难度与管理成本。

功能讲解

TiDB的Resource Control功能的实现方式,主要是通过两层结构来实现的,分别是TiDB的流控和TiKV的优先级调度。

1、TiDB的流控

什么是流控?在数据库当中,流控是指在高并发场景下,为了保证数据库的稳定性和可靠性,对访问数据库的请求进行限制和控制的一种机制,在Resource Control特性里,对TiDB做流控是采取的 令牌桶算法 实现的。

什么是令牌桶算法?令牌桶算法是一种基于令牌的流量控制算法,可以用来平滑的去限制流量和请求的达速率,从而免受突发流量和攻击的影响。在一段时间内为用户或客户端分配一个令牌桶,每个令牌表示允许进行一次请求或数据包的传输。当用户需要发送请求时,需要从令牌桶中获取一个令牌,如果令牌桶没有令牌,则无法发送请求。同时,令牌桶会以一定的速率往令牌桶中添加新的令牌,从而控制请求的到达速率,保护系统免受突发流量的冲击。优点就是可以平滑地调节流量和请求的到达速率,有效避免了系统过载和崩溃的问题。

开关控制参数(系统变量):tidb_enable_resource_control

MySQL [(none)]> SHOW VARIABLES LIKE "tidb_enable_resource_control";
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| tidb_enable_resource_control | ON    |
+------------------------------+-------+

2、TiKV的优先级调度

什么是TiKV的优先级调度?当开启 TiKV 调度特性后,TiKV 会根据每个存储组的RU_PER_SEC 值来映射每个存储组的读写请求优先级。在存储层使用优先级队列进行调度,以确保高优先级的请求优先处理,进而提高整体数据服务的响应速度和吞吐量。

什么是Request Unit(RU)?RU是TiDB中对系统资源的抽象单位,目前RU的话包括了CPU、IOPS、IO带宽三个指标,这三个指标的消耗会按照一定的比例统一到RU单位上。官网提供了用户请求对TiKV存储层CPU和IO资源消耗与RU权重,如下:

image.png

开关控制参数(TiKV配置文件参数):resource-control-enabled

MySQL [(none)]> SHOW CONFIG WHERE NAME LIKE "resource-control.enabled";
+------+-----------------------+--------------------------+-------+
| Type | Instance              | Name                     | Value |
+------+-----------------------+--------------------------+-------+
| tikv | 192.168.146.132:20160 | resource-control.enabled | true  |
| tikv | 192.168.146.130:20160 | resource-control.enabled | true  |
| tikv | 192.168.146.131:20160 | resource-control.enabled | true  |
+------+-----------------------+--------------------------+-------+

该参数与上述提到的系统变量需要配合使用,组合效果图如下:

resource-control.enabled tidb_enable_resource_control= ON tidb_enable_resource_control= OFF
true 流控和调度(推荐组合) 无效配置
false 仅流控(不推荐) 特性被关闭

功能体验

1、集群配置信息

Cluster type:       tidb
Cluster name:       tidb-test
Cluster version:    v7.1.0
Deploy user:        tidb
SSH type:           builtin
Dashboard URL:      http://192.168.146.130:2379/dashboard
Grafana URL:        http://192.168.146.130:3000
ID                     Role          Host             Ports        OS/Arch       Status  Data Dir                                             Deploy Dir
--                     ----          ----             -----        -------       ------  --------                                             ----------
192.168.146.130:9093   alertmanager  192.168.146.130  9093/9094    linux/x86_64  Up      /home/tidb/tidb-cluster/tidb-data/alertmanager-9093  /home/tidb/tidb-cluster/tidb-deploy/alertmanager-9093
192.168.146.130:3000   grafana       192.168.146.130  3000         linux/x86_64  Up      -                                                    /home/tidb/tidb-cluster/tidb-deploy/grafana-3000
192.168.146.130:2379   pd            192.168.146.130  2379/2380    linux/x86_64  Up|UI   /home/tidb/tidb-cluster/tidb-data/pd-2379            /home/tidb/tidb-cluster/tidb-deploy/pd-2379
192.168.146.131:2379   pd            192.168.146.131  2379/2380    linux/x86_64  Up|L    /home/tidb/tidb-cluster/tidb-data/pd-2379            /home/tidb/tidb-cluster/tidb-deploy/pd-2379
192.168.146.132:2379   pd            192.168.146.132  2379/2380    linux/x86_64  Up      /home/tidb/tidb-cluster/tidb-data/pd-2379            /home/tidb/tidb-cluster/tidb-deploy/pd-2379
192.168.146.130:9090   prometheus    192.168.146.130  9090/12020   linux/x86_64  Up      /home/tidb/tidb-cluster/tidb-data/prometheus-8249    /home/tidb/tidb-cluster/tidb-deploy/prometheus-8249
192.168.146.130:4000   tidb          192.168.146.130  4000/10080   linux/x86_64  Up      -                                                    /home/tidb/tidb-cluster/tidb-deploy/tidb-4000
192.168.146.131:4001   tidb          192.168.146.131  4001/10081   linux/x86_64  Up      -                                                    /home/tidb/tidb-cluster/tidb-deploy/tidb-4000
192.168.146.132:4002   tidb          192.168.146.132  4002/10082   linux/x86_64  Up      -                                                    /home/tidb/tidb-cluster/tidb-deploy/tidb-4000
192.168.146.130:20160  tikv          192.168.146.130  20160/20180  linux/x86_64  Up      /home/tidb/tidb-cluster/data1/tidb-data/tikv-20160   /home/tidb/tidb-cluster/data1/tidb-deploy/tikv-20160
192.168.146.131:20160  tikv          192.168.146.131  20160/20180  linux/x86_64  Up      /home/tidb/tidb-cluster/data1/tidb-data/tikv-20160   /home/tidb/tidb-cluster/data1/tidb-deploy/tikv-20160
192.168.146.132:20160  tikv          192.168.146.132  20160/20180  linux/x86_64  Up      /home/tidb/tidb-cluster/data1/tidb-data/tikv-20160   /home/tidb/tidb-cluster/data1/tidb-deploy/tikv-20160

2、确认开启资源管控特性

MySQL [(none)]>  SHOW CONFIG WHERE NAME LIKE "%resource-control%";
+------+-----------------------+--------------------------+-------+
| Type | Instance              | Name                     | Value |
+------+-----------------------+--------------------------+-------+
| tikv | 192.168.146.132:20160 | resource-control.enabled | true  |
| tikv | 192.168.146.130:20160 | resource-control.enabled | true  |
| tikv | 192.168.146.131:20160 | resource-control.enabled | true  |
+------+-----------------------+--------------------------+-------+
MySQL [(none)]> SHOW VARIABLES LIKE "%tidb_enable_resource_control%";
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| tidb_enable_resource_control | ON    |
+------------------------------+-------+

3、创建资源组,并绑定用户

CREATE RESOURCE GROUP IF NOT EXISTS app1 RU_PER_SEC = 200;
CREATE RESOURCE GROUP IF NOT EXISTS app2 RU_PER_SEC = 300;
CREATE RESOURCE GROUP IF NOT EXISTS app3 RU_PER_SEC = 400;
ALTER USER app1 RESOURCE GROUP app1;
ALTER USER app2 RESOURCE GROUP app2;
MySQL [(none)]> SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS;
+---------+------------+----------+-----------+
| NAME    | RU_PER_SEC | PRIORITY | BURSTABLE |
+---------+------------+----------+-----------+
| app1    | 200        | MEDIUM   | NO        |
| app2    | 300        | MEDIUM   | NO        |
| app3    | 400        | MEDIUM   | NO        |
| default | UNLIMITED  | MEDIUM   | YES       |
+---------+------------+----------+-----------+

4、使用sysbench进行压测

(1)总共三个库,app_schema1 \ app_schema2 \ app_schema3 构建相同数据命令:
sysbench --config-file=config oltp_point_select --tables=5 --table-size=1000000 prepare
(2)读写同时用三个用户分别压测三个库:
sysbench --config-file=config oltp_point_select --tables=5 --table-size=1000000 --db-ps-mode=auto --rand-type=uniform run

5、观察监控指标

(1)RU分别为200、300、400的监控指标

(2)运行途中更改RU值的监控指标

命令简介

1、预估容量

(1)指定时间对实际负载查看RU容量
CALIBRATE RESOURCE START_TIME '2023-04-18 08:00:00' END_TIME '2023-04-18 08:20:00';
(2)指定WORKLOAD查看RU容量,TPCC默认
CALIBRATE RESOURCE;

2、资源组管理

(1)创建资源组
CREATE RESOURCE GROUP IF NOT EXISTS appn RU_PER_SEC = 500 BURSTABLE PRIORITY = HIGH;;
appn = 资源组名
RU_PER_SEC = 每秒限额
BURSTABLE = 允许超额
PRIORITY = 优先级(LOW|MEDIUM|HIGH) 默认MEDIUM
(2)查看资源组
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS;
(3)创建用户并绑定资源组
CREATE USER 'usr1'@'%' IDENTIFIED BY '123' RESOURCE GROUP rg1;
(4)将已有用户绑定到资源组
ALTER USER usr2 RESOURCE GROUP rg2;
(5)删除资源组
DROP RESOURCE GROUP IF EXISTS rg1;
这里需要注意,删除资源组需要先将绑定的用户去掉
(6)会话级别绑定资源组
SET RESOURCE GROUP rg1;
(7)语句级别绑定资源组
SELECT /*+ RESOURCE_GROUP(rg1) */ * FROM t limit 10;
(8)关闭资源管控
SET GLOBAL tidb_enable_resource_control = 'OFF';
将TiKV参数resource-control.enabled设为flase

总结

优点:

(1)该功能将资源利用高效,通过控制应用、会话、SQL放入到对应的资源组中,保证了响应时间与负载不受其他事项的影响,最大化的利用了系统资源。

(2)系统可扩展性强,在系统负载较低的情况下,繁忙应用即使超过设定的RU,也仍然可以获得所需的系统资源,从而提高了系统的可扩展性

(3)运维难度低,在合理利用资源管控特性的情况下,减少应用集群数量,降低运维难度及管理成本

缺点:

(1)集群系统复杂度变高,由于采用资源管控特性,需要对集群进行划分和管理,会对性能有一定的影响并且增加系统的复杂度,维护难度变高

(2)划分策略难以确定,如何准确的划分资源组是该特性使用过程中需要考虑的问题,通过CALIBRATE RESOURCE可以预估容量,但在制定合适的划分策略的时候,也需要运维人员有很高的技术和经验

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/658144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android PagerSnapHelper改造RecyclerView为ViewPage,kotlin

Android PagerSnapHelper改造RecyclerView为ViewPage&#xff0c;kotlin <?xml version"1.0" encoding"utf-8"?> <androidx.recyclerview.widget.RecyclerView xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tool…

Spring Web vs Spring Webflux

当你需要构建Web应用程序时&#xff0c;Spring Web 和 Spring Webflux 是Spring生态系统中的两个框架&#xff0c;但它们之间有一些关键区别。 Spring Web 是一个传统的Web框架&#xff0c;它构建在Servlet API之上。它旨在处理阻塞式I/O&#xff0c;即线程在从数据库或其他服务…

CTFHub | 过滤cat

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习&#xff0c;实训平台。提供优质的赛事及学习服务&#xff0c;拥有完善的题目环境及配套 writeup &#xff0c;降低 CTF 学习入门门槛&#xff0c;快速帮助选手成长&#xff0c;跟随主流比赛潮流。 0x01 题目描述…

Springboot读取配置文件的方式以及多环境读取的方式

Springboot读取配置文件的方式以及多环境读取的方式 一.首先介绍一下读取配置文件中的值的方式1.Value注解2.ConfigurationProperties注解赋值3.使用 Environment 读取配置文件 多环境读取 在项目中我们可能需要灵活的配置一些参数&#xff0c;就会将这些参数写到yaml文件或者p…

C++技能系列 ( 4 ) - 深入理解C++临时对象【解析与提高性能手段】

系列文章目录 C技能系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the future of dream w…

Ubuntu设置虚拟机共享目录/mnt/hgfs下无文件显示相关问题归纳

文章目录 问题一&#xff1a;/mnt目录下无hgfs文件夹问题二&#xff1a;/mnt/hgfs 文件夹为空 问题一&#xff1a;/mnt目录下无hgfs文件夹 问题背景&#xff1a; 在打开共享目录A的时候&#xff0c;突然改变共享目录&#xff0c;也就是从A改到了B&#xff0c;但是资源管理器还…

TiDB v7.1.0版本 相关(部署、在线扩容、数据迁移)测试

作者&#xff1a; tomxu 原文来源&#xff1a; https://tidb.net/blog/69083bca TiDB v7.1.0版本 相关&#xff08;部署、在线扩容、数据迁移&#xff09;测试 一、服务器信息参数 | 序号 | 服务器型号 | 主机名 | 配置 | | IP地址 | 用户名 | 密码 | | -- | --------- | …

chatgpt赋能python:Python怎么过滤异常值-降噪数据的利器

Python怎么过滤异常值 - 降噪数据的利器 什么是异常值 在数据分析和机器学习领域&#xff0c;我们常常需要对数据进行预处理&#xff0c;其中一个常见的问题就是异常值。也可以称为噪声数据或离群点&#xff0c;指数据集中与其他值相差较大的点。通常这些异常值出现的原因有很…

6.10 面向对象抽象

抽象类 1 概念 Java中可以定义被abstract关键字修饰的方法,这种方法只有声明,没有方法体,叫做抽象方法. Java中可以定义被abstract关键字修饰的类,被abstract关键字修饰的类叫做抽象类 如果一个类含有抽象方法,那么它一定是抽象类 抽象类中的方法实现交给子类来完成 2 抽象…

MsSqlServer配置管理器TCP/IP属性

TCP/IP 属性&#xff08;“IP 地址”选项卡&#xff09; 使用 “TCP/IP 属性&#xff08;‘IP 地址’选项卡&#xff09;” 对话框&#xff0c;可以配置特定 IP 地址的 TCP/IP 协议选项。 只有选中 “IP All” &#xff0c;才能一次配置所有地址的 “TCP 动态端口” 和 “TCP…

Linux学习[16]bash学习深入2---别名设置alias---history指令---环境配置相关

文章目录 前言1. alias2. history3. 环境配置相关总结 前言 linux学习15里面简单提了一下alias指令&#xff0c;就表明它是一个别名的作用&#xff0c;这节就展开来写一下。 同时上一节一笔带过的history指令&#xff0c;这一节也进行例子的演示记录。 最后是环境相关的配置&a…

高斯过程(Gaussian Process)回归预测,例子,代码及可视化展示

高斯过程指的是一组随机变量的集合&#xff0c;这个集合里面的任意有限个随机变量都服从联合正态分布。&#xff08;联合正态分布是指多个随机变量的联合分布满足正态分布。联合分布是指多个随机变量同时满足的概率分布&#xff0c;一个常见的例子是考虑两个随机变量&#xff1…

【2023年最新】提高分类模型指标的六大方案详解

文章目录 数据增强特征选择调整模型参数模型集成迁移学习模型解释完结 当今&#xff0c;机器学习模型得到了广泛的应用&#xff0c;其中分类模型是其中最常见和重要的一种。在实际应用中&#xff0c;如何提高分类模型的指标&#xff0c;使其在不同场景下表现更佳并且具有更好的…

【Web网页制作】影视主题网页制作web页面开发(附源码)

【写在前面】 其实之前我就写过一篇关于我的家乡的页面&#xff0c;也有不少网友和我私下反馈&#xff0c;让我多出一些关于页面制作的&#xff0c;于是乎我就今天晚上抽出点时间来整理一篇关于影视内容的web页面制作&#xff0c;希望能够得到大家的喜欢。 【涉及内容】 web网页…

什么是进程?程序又是什么?程序运行在操作系统来看是怎么做的?

相信很多人都看到过课本上写的进程的概念&#xff0c;那么真的理解了吗&#xff1f; 课本上是这样讲的&#xff0c;课本概念&#xff1a;程序的一个执行实例&#xff0c;正在执行的程序等。 那么进程到底是什么&#xff1f;我先把内核层面上的概念拿出来&#xff1a;内核观点&a…

【算法基础】基础算法

快速排序 模板题&#xff1a;785. 快速排序 - AcWing题库 思路&#xff1a; 定义一个x&#xff08;一般喜欢用中间的&#xff09;&#xff0c;我们快速排序&#xff0c;让x左边的都比它小&#xff0c;同时让右边的都比它大。然后像二分一样不断细分&#xff0c;缩小范围进行同…

flink主要组件及高可用配置

背景 flink不论运行在哪种环境&#xff0c;例如Yarn&#xff0c;Mesos&#xff0c;Kebernute以及独立集群&#xff0c;每个应用都会包含重要的几个组件&#xff0c;本文就来讲述下flink的主要组件以及如何实现flink的高可用配置 flink主要组件 如图所示&#xff0c;flink主要…

TiDB 7.1 资源管控特性试用

作者&#xff1a; 啦啦啦啦啦 原文来源&#xff1a; https://tidb.net/blog/3ddb423a 一.背景 印象里 2022 年初的时候就有小伙伴在 asktug 提出 TiDB 未来是否会有多租户功能的问题了&#xff0c;没想到这么快就已经 GA 了。资源管控特性&#xff08;Resource Control&…

【论文阅读】Weighted Boxes Fusion(WBF)模型融合原理解读

论文地址&#xff1a;https://arxiv.org/pdf/1910.13302.pdf 代码地址&#xff1a;GitHub - ZFTurbo/Weighted-Boxes-Fusion: Set of methods to ensemble boxes from different object detection models, including implementation of "Weighted boxes fusion (WBF)"…

chatgpt赋能python:Python中如何转化大小写

Python中如何转化大小写 在Python编程中&#xff0c;转化字符串的大小写是一个常见的操作。Python提供了内置函数和字符串方法来实现此操作。本文将介绍如何使用Python中的这些函数和方法来转换字符串的大小写。 使用内置函数str.upper()和str.lower() str.upper()函数将字符…