写点什么

TiDB 7.5.1 资源管控测试

  • 2024-03-29
    北京
  • 本文字数:3196 字

    阅读完需:约 10 分钟

作者: 像风一样的男子原文来源:https://tidb.net/blog/189313c2

一、前言

诸位 DBA 是否经常遇到过如下问题:


1、当集群突然遇到某些 SQL 引发的性能问题时,为了不影响真个集群正常使用,只能忍痛停掉相关服务 。


2、当某个业务处于高峰期时,会过多占用整个数据库系统的资源,进而影响别的业务正常运行。


TiDB v7.1.0 开始支持基于资源组的资源管控,为同一集群中的不同工作负载分配并隔离资源。该功能显著提升了多应用集群的稳定性。


TiDB 资源管控提供了两层资源管理能力,分别在 TiDB 层和 TiKV 层的优先级调度。将用户绑定到某个资源组后,TiDB 层会根据用户所绑定资源组设定的配额对用户的读写请求做流控,TiKV 层会根据配额和优先级来对请求做调度。通过流控和调度这两层控制,可以实现用户、会话、语句级别的应用资源隔离。


资源管控已经推出半年较为成熟,之前社区小伙伴已经做了很详细的测评。


最近有这方面需求就做了个简单的功能测试。

二、升级版本

之前数据库所使用版本为 5.4.3(一直稳定运行,没有升级的动力)。现在把该集群升级到最新的 7.5.1.




在 dashboard 中可以看到新加入的资源管控页面。


三、创建资源组和用户

Request Unit (RU) 是 TiDB 对 CPU、IO 等系统资源的统一抽象的计量单位,用于表示对数据库的单个请求消耗的资源量。请求消耗的 RU 数量取决于多种因素,例如操作类型或正在检索或修改的数据量。


集群资源的评估,一开始只能通过系统自动根据硬件配置来计算得到总 RU 量,然后根据这个估计得到的量,创建资源组、分配租户。


运行一段时间后,会根据这段时间的实际负载获得准确的总 RU 和消耗量,这个时候还需要管理员介入,再次调整之前不同租户的资源组所持有的分配额。

创建资源组

CREATE RESOURCE GROUP IF NOT EXISTS rg1 RU_PER_SEC = 10000;


CREATE RESOURCE GROUP IF NOT EXISTS rg2 RU_PER_SEC = 20000;

创建用户绑定到对应资源组

CREATE USER ‘usr2’@‘%’ IDENTIFIED BY ‘123456’ RESOURCE GROUP rg2;


 CREATE USER ‘usr1’@‘%’ IDENTIFIED BY ‘123456’ RESOURCE GROUP rg1;


然后就可以在 dashboard 重要到相关资源组的信息。



也可以在数据库中查询到用户和资源组的绑定关系。


[root\@tsp-tidb-taos-01 ~]# mysql -h 127.0.0.1 -P4000 -uusr1 -p


Enter password:


MySQL [(none)]> select host, user,User_attributes from mysql.user;


+——+——+—————————+


| host | user | User_attributes           |


+——+——+—————————+


| %    | root | NULL                      |


| %    | read | NULL                      |


| %    | usr1 | {“resource_group”: “rg1”} |


| %    | usr2 | {“resource_group”: “rg2”} |


+——+——+—————————+


4 rows in set (0.00 sec)


MySQL [(none)]>

四、关闭资源管控做压力测试

先关闭资源管控


SET GLOBAL tidb_enable_resource_control = ’OFF’;



建库 sbtest 


MySQL [(none)]> create database sbtest;


sysbench 主要对集群做基准测试,主要关注 TPS、QPS


远程连接进入 shell 环境, 安装 sysbench


[root\@tsp-tidb-taos-01 ~]# yum install sysbench


[root\@tsp-tidb-taos-01 ~]# sysbench –version


sysbench 1.0.17


初始化压测数据建 100 张表


sysbench oltp_common –threads=32 –rand-type=uniform  –db-driver=mysql –mysql-db=sbtest –mysql-host=10.20.10.137 –mysql-port=4000 –mysql-user=usr1 –mysql-password=‘123456’  –tables=100 –table-size=10 prepare


启动一个 sysbench 任务做写入测试 


[root\@taos3 sysbench]# sysbench oltp_write_only    –threads=512     –rand-type=uniform  –db-driver=mysql     –mysql-db=sbtest     –mysql-host=10.20.10.137  –mysql-port=4000     –mysql-user=usr1     –mysql-password=‘123456’      –tables=16 –table-size=10000000 –report-interval=10 –time=300 run





可以看到服务器资源利用率非常高,资源管控相关监控应为关闭功能看不到数据了。

开启资源管控测试

SET GLOBAL tidb_enable_resource_control = ’ON’;


同样的测试方法只启动一个压测任务


[root\@taos3 sysbench]# sysbench oltp_write_only    –threads=512     –rand-type=uniform  –db-driver=mysql     –mysql-db=sbtest     –mysql-host=10.20.10.137  –mysql-port=4000     –mysql-user=usr1     –mysql-password=‘123456’      –tables=16 –table-size=10000000 –report-interval=10 –time=300 run




从测试结果和监控指标中可以看到资源控制的非常精确。

换个用户 usr2 做测试

[root\@taos3 sysbench]# sysbench oltp_write_only    –threads=512     –rand-type=uniform  –db-driver=mysql     –mysql-db=sbtest     –mysql-host=10.20.10.137  –mysql-port=4000     –mysql-user=usr2     –mysql-password=‘123456’      –tables=16 –table-size=10000000 –report-interval=10 –time=300 run




usr2 的压测结果和资源使用量都是 usr1 的 2 倍


加大资源组的限额

ALTER RESOURCE GROUP rg1  RU_PER_SEC = 50000;


ALTER RESOURCE GROUP rg2 RU_PER_SEC = 100000;


同时开启 usr1、usr2 用户启动 2 个 sysbench 任务做压测


sysbench oltp_write_only    –threads=512     –rand-type=uniform  –db-driver=mysql     –mysql-db=sbtest     –mysql-host=10.20.10.137  –mysql-port=4000     –mysql-user=usr1     –mysql-password=‘123456’      –tables=16 –table-size=1000000000 –report-interval=10 –time=300 run



任务 2


 sysbench oltp_write_only    –threads=512     –rand-type=uniform  –db-driver=mysql     –mysql-db=sbtest     –mysql-host=10.20.10.137  –mysql-port=4000     –mysql-user=usr2     –mysql-password=‘123456’      –tables=16 –table-size=1000000000 –report-interval=10 –time=300 run




压测结果和监控指标符合预期。


修改资源组总限额超过系统给的估算值(写入为 219552RU/s)。


ALTER RESOURCE GROUP rg1  RU_PER_SEC = 100000;


ALTER RESOURCE GROUP rg2 RU_PER_SEC = 200000;



同时启动 2 个任务进行测试


sysbench oltp_write_only    –threads=512     –rand-type=uniform  –db-driver=mysql     –mysql-db=sbtest     –mysql-host=10.20.10.137  –mysql-port=4000     –mysql-user=usr1     –mysql-password=‘123456’      –tables=16 –table-size=100000000 –report-interval=10 –time=300 run


sysbench oltp_write_only    –threads=512     –rand-type=uniform  –db-driver=mysql     –mysql-db=sbtest     –mysql-host=10.20.10.137  –mysql-port=4000     –mysql-user=usr2     –mysql-password=‘123456’      –tables=16 –table-size=100000000 –report-interval=10 –time=300 run





2 个任务发生了资源抢夺。


如果设置了优先级,TiDB 会优先满足高优先级 (PRIORITY) 资源组的请求。如果同一优先级的请求无法全部满足,TiDB 会根据用量 (RU_PER_SEC) 的大小按比例分配。这里就不一一测试了。

总结

TIDB 的 resource control 资源管控,将 cpu/ 内存 /io 的物理资源抽象成 RU 的感念,简化了使用方式,并且测试中发现该特性可以正常限制住 RU,达到资源控制的效果。


可以将 TiDB 当做一个资源池,资源不够时可以添加 TiDB 或 TiKV 资源来扩大资源池。


TiDB 的硬件配置校准如果能通过人工智能识别自动调整就完美了。


发布于: 刚刚阅读数: 3
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TiDB 7.5.1 资源管控测试_性能测评_TiDB 社区干货传送门_InfoQ写作社区