本文将向您介绍如何以数据库账号、数据库、单条查询、数据库连接4种维度进行数据库资源管理。
版本限制
仅支持企业版。
产品系列为集群版时:
PolarDB MySQL版8.0.1版本,且修订版本为8.0.1.1.48及以上。
PolarDB MySQL版8.0.2版本,且修订版本为8.0.2.2.27及以上。
当系列为多主集群(Limiless)时:
PolarDB MySQL版8.0.1,且修订版本为8.0.1.0.33及以上。
注意事项
该功能目前处于申请使用阶段,如有需要,请提交工单咨询和开启。您也可以加入官方钉钉群进行咨询,获取更多技术支持。钉钉群号:59535005981。
PolarDB Resource Control功能与MySQL官方Resource Group功能并不相同,分别使用如下2种机制控制集群的资源使用:
PolarDB Resource Control功能能够在数据库、数据库用户以及数据库连接维度上限制所能使用的资源,更适配于云原生数据库。
MySQL官方Resource Group功能能够为不同资源组设置所能使用的CPU核以及线程的优先级。其功能试用可参考MySQL官方文档 Resource Groups,目前PolarDB MySQL版中暂不支持开启。
使用Resource control功能需开启Thread Pool功能。
只读(RO)节点异步从读写(RW)节点同步资源控制信息,因此可能会出现延迟。
测试环境
测试需要的ECS实例和PolarDB MySQL版集群需要在同一个Region和VPC下。
测试所用ECS实例规格:
ecs.g7.2xlarge(8 vCPU,32 GB内存)。
测试所用PolarDB MySQL版集群配置如下:
产品版本:企业版。
系列:集群版。
子系列:独享规格。
数据库引擎:MySQL 8.0.1。
规格:polar.mysql.x4.xlarge(8 vCPU,32 GB内存)。
测试准备
以下操作中的Sysbench测试相关内容均在ECS实例中执行。更多信息,请参见使用Sysbench工具进行测试。
创建数据库账号和数据库
执行如下SQL,创建2个数据库账号user_1
和user_2
,2个数据库database_1
和database_2
:
CREATE USER user_1 IDENTIFIED WITH mysql_native_password BY 'password';
CREATE USER user_2 IDENTIFIED WITH mysql_native_password BY 'password';
CREATE DATABASE database_1;
CREATE DATABASE database_2;
GRANT ALL ON database_1.* TO user_1;
GRANT ALL ON database_2.* TO user_1;
GRANT ALL ON database_1.* TO user_2;
GRANT ALL ON database_2.* TO user_2;
导入测试数据
执行如下命令,使用Sysbench工具分别为database_1
和database_2
导入测试数据:
sysbench oltp_read_write --threads=16 --mysql-host=<host> --mysql-user=user_1 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_1 --tables=10 --table-size=500000 --report-interval=1 --time=7200 prepare
sysbench oltp_read_write --threads=16 --mysql-host=<host> --mysql-user=user_1 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_2 --tables=10 --table-size=500000 --report-interval=1 --time=7200 prepare
创建资源管理(Resource Control)
执行如下SQL,创建多个Resource Control:
CREATE polar_resource_control rc_1 max_cpu 20;
CREATE polar_resource_control rc_2 max_cpu 50;
CREATE polar_resource_control rc_3 max_cpu 70;
CREATE polar_resource_control rc_4 max_cpu 100;
通过如下SQL,可以查询已创建的Resource Control信息:
SELECT * FROM mysql.polar_resource_control;
执行测试
以下操作中的Sysbench测试相关内容均在ECS实例中执行。
以下操作中的数据库内容均为高权限账号登录数据库后执行。
使用
user_1
账号对数据库database_1
和database_2
进行压力测试(Sysbench测试):sysbench oltp_read_only --threads=256 --mysql-host=<host> --mysql-user=user_1 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_1 --tables=10 --table-size=500000 --report-interval=1 --time=3600 run sysbench oltp_read_only --threads=256 --mysql-host=<host> --mysql-user=user_1 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_2 --tables=10 --table-size=500000 --report-interval=1 --time=3600 run
执行如下SQL,依次将
user_1
和rc_1
、rc_2
、rc_3
、rc_4
进行绑定和解绑:SET polar_resource_control rc_1 FOR USER user_1; -- 相隔3分钟再执行解绑rc_1并绑定rc_2,便于观察结果 RELEASE polar_resource_control rc_1 FOR USER user_1; SET polar_resource_control rc_2 FOR USER user_1; -- 相隔3分钟再执行解绑rc_2并绑定rc_3,便于观察结果 RELEASE polar_resource_control rc_2 FOR USER user_1; SET polar_resource_control rc_3 FOR USER user_1; -- 相隔3分钟再执行解绑rc_3并绑定rc_4,便于观察结果 RELEASE polar_resource_control rc_3 FOR USER user_1; SET polar_resource_control rc_4 FOR USER user_1;
控制台查看性能监控,观察以数据库用户维度限制CPU资源后CPU使用率和QPS的变化,具体操作,请参见性能监控:
RW节点和RO节点的CPU使用率:
RW节点和RO节点的QPS:
如上图所示CPU使用率以及QPS都随着
user_1
绑定的Resource Control的变化而变化(例如rc_1
的CPU最大为20%,rc_2
的CPU最大为50%)。通过绑定不同CPU资源的Resource Control可以对user_1
所能使用的CPU资源进行有效控制。
分别使用
user_1
与user_2
对database_1
进行压力测试(Sysbench测试):sysbench oltp_read_only --threads=256 --mysql-host=<host> --mysql-user=user_1 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_1 --tables=10 --table-size=500000 --report-interval=1 --time=3600 run sysbench oltp_read_only --threads=256 --mysql-host=<host> --mysql-user=user_2 --mysql-password=<password> --mysql-port=3306 --mysql-db=database_1 --tables=10 --table-size=500000 --report-interval=1 --time=3600 run
执行如下SQL,依次将
database_1
和rc_1
、rc_2
进行绑定和解绑:SET polar_resource_control rc_1 FOR DATABASE database_1; -- 相隔3分钟再执行解绑rc_1并绑定rc_2,便于观察结果 RELEASE polar_resource_control rc_1 FOR DATABASE database_1; SET polar_resource_control rc_2 FOR DATABASE database_1; -- 相隔3分钟再执行解除资源管理操作,便于观察结果 RELEASE polar_resource_control rc_2 FOR DATABASE database_1;
控制台查看性能监控,观察以数据库维度限制CPU资源后CPU使用率和QPS的变化,具体操作,请参见性能监控:
如上图所示CPU使用率以及QPS都随着
database_1
绑定的Resource Control的变化而变化(例如rc_1
的CPU最大为20%,rc_2
的CPU最大为50%)。通过绑定不同CPU资源的Resource Control可以对database_1
所能使用的CPU资源进行有效控制。
使用Resource Control可以对单条查询进行资源限制,当这个查询执行结束后,限制会自动结束,后续同一个连接(Connection)中的查询不受影响。
执行如下SQL,模拟大查询:
CREATE DATABASE rc_test; USE rc_test; CREATE TABLE t1(id INT NOT NULL auto_increment PRIMARY KEY, name VARCHAR(10)); INSERT INTO t1(name) VALUES('aaaaaaaaaa'); INSERT INTO t1(name) SELECT name FROM t1; -- 重复执行20次此SQL -- 在2个客户端分别同时执行,模拟产生2条大查询 SELECT COUNT(*) FROM t1 a JOIN t1 B ON a.name = B.name;
获取2个大查询的Connection ID:
SHOW processlist;
创建
rc_5
并分别绑定到两个大查询的Connection ID:CREATE polar_resource_control rc_5 max_cpu 5; -- 开始绑定资源管理 SET polar_resource_control rc_5 FOR query <connection_id_1>; SET polar_resource_control rc_5 FOR query <connection_id_2>; -- 间隔5分钟,对大查询解绑资源管理限制 RELEASE polar_resource_control rc_5 FOR query <connection_id_1>; RELEASE polar_resource_control rc_5 FOR query <connection_id_2>;
控制台查看性能监控,观察以单条查询维度限制CPU资源后CPU使用率的变化,具体操作,请参见性能监控:
在长会话场景过程中,可以使用Resource Control按照Connection维度限制所有查询可以使用的资源。
执行如下SQL,模拟大查询:
CREATE database rc_test; USE rc_test; CREATE TABLE t1(id INT NOT NULL auto_increment PRIMARY KEY, name VARCHAR(10)); INSERT INTO t1(name) VALUES('aaaaaaaaaa'); INSERT INTO t1(name) SELECT name FROM t1; -- 重复执行20次此SQL -- 在2个客户端分别同时执行,模拟产生2条大查询 SELECT COUNT(*) FROM t1 A JOIN t1 B ON a.name = B.name;
获取2个大查询的Connection ID:
SHOW processlist;
创建
rc_5
并分别绑定到2个大查询的Connection ID:CREATE polar_resource_control rc_5 max_cpu 5; SET polar_resource_control rc_5 FOR connection <connection_id_1>; SET polar_resource_control rc_5 FOR connection <connection_id_2>;
控制台查看性能监控,观察以连接维度限制CPU资源后CPU使用率的变化,具体操作,请参见性能监控:
如上图所示,对2个Connection进行资源限制后,集群整体的CPU占用率有明显下降(15:28:25之后)。手动中断2个大查询后(15:30:35之后),再次执行2个大查询(15:31:40之后),集群整体的CPU占用率仍然受到限制。
分别对2个大查询解除限制:
-- 对connection 解除resource control限制 RELEASE polar_resource_control rc_5 FOR connection <connection_id_1>; RELEASE polar_resource_control rc_5 FOR connection <connection_id_2>;
大查询解除限制之后,集群整体CPU上升至原来水平:
- 本页导读 (1)
- 版本限制
- 注意事项
- 测试环境
- 测试准备
- 创建数据库账号和数据库
- 导入测试数据
- 创建资源管理(Resource Control)
- 执行测试