资源管理使用示例

更新时间:2025-02-10 07:58:40

本文将向您介绍如何以数据库账号、数据库、单条查询、数据库连接4种维度进行数据库资源管理。

版本限制

  • 仅支持企业版。

  • 产品系列为集群版时:

    • PolarDB MySQL8.0.1版本,且修订版本为8.0.1.1.48及以上。

    • PolarDB MySQL8.0.2版本,且修订版本为8.0.2.2.27及以上。

  • 当系列为多主集群(Limiless)时:

    • PolarDB MySQL8.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集群需要在同一个RegionVPC下。

  • 测试所用ECS实例规格:

    ecs.g7.2xlarge(8 vCPU,32 GB内存)。

  • 测试所用PolarDB MySQL集群配置如下:

    • 产品版本:企业版。

    • 系列:集群版。

    • 子系列:独享规格。

    • 数据库引擎:MySQL 8.0.1。

    • 规格:polar.mysql.x4.xlarge(8 vCPU,32 GB内存)。

测试准备

重要

创建数据库账号和数据库

执行如下SQL,创建2个数据库账号user_1user_2,2个数据库database_1database_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_1database_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实例中执行。

  • 以下操作中的数据库内容均为高权限账号登录数据库后执行。

以数据库账号维度限制CPU资源
以数据库维度限制CPU资源
以单条查询维度限制CPU资源
以连接维度限制CPU资源
  1. 使用user_1账号对数据库database_1database_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
  2. 执行如下SQL,依次将user_1rc_1rc_2rc_3rc_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;
  3. 控制台查看性能监控,观察以数据库用户维度限制CPU资源后CPU使用率和QPS的变化,具体操作,请参见性能监控

    • RW节点和RO节点的CPU使用率:

      image

    • RW节点和RO节点的QPS:

      image

    说明

    如上图所示CPU使用率以及QPS都随着user_1绑定的Resource Control的变化而变化(例如rc_1CPU最大为20%,rc_2CPU最大为50%)。通过绑定不同CPU资源的Resource Control可以对user_1所能使用的CPU资源进行有效控制。

  1. 分别使用user_1user_2database_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
  2. 执行如下SQL,依次将database_1rc_1rc_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; 
  3. 控制台查看性能监控,观察以数据库维度限制CPU资源后CPU使用率和QPS的变化,具体操作,请参见性能监控

    image

    image

    说明

    如上图所示CPU使用率以及QPS都随着database_1绑定的Resource Control的变化而变化(例如rc_1CPU最大为20%,rc_2CPU最大为50%)。通过绑定不同CPU资源的Resource Control可以对database_1所能使用的CPU资源进行有效控制。

说明

使用Resource Control可以对单条查询进行资源限制,当这个查询执行结束后,限制会自动结束,后续同一个连接(Connection)中的查询不受影响。

  1. 执行如下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. 获取2个大查询的Connection ID:

    SHOW processlist;
  3. 创建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>;
  4. 控制台查看性能监控,观察以单条查询维度限制CPU资源后CPU使用率的变化,具体操作,请参见性能监控

    image

说明

在长会话场景过程中,可以使用Resource Control按照Connection维度限制所有查询可以使用的资源。

  1. 执行如下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. 获取2个大查询的Connection ID:

    SHOW processlist;
  3. 创建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>;
  4. 控制台查看性能监控,观察以连接维度限制CPU资源后CPU使用率的变化,具体操作,请参见性能监控

    image

    说明

    如上图所示,对2Connection进行资源限制后,集群整体的CPU占用率有明显下降(15:28:25之后)。手动中断2个大查询后(15:30:35之后),再次执行2个大查询(15:31:40之后),集群整体的CPU占用率仍然受到限制。

  5. 分别对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上升至原来水平:

    image

  • 本页导读 (1)
  • 版本限制
  • 注意事项
  • 测试环境
  • 测试准备
  • 创建数据库账号和数据库
  • 导入测试数据
  • 创建资源管理(Resource Control)
  • 执行测试
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等