多租户资源管理使用说明
操作场景
本文将向您介绍如何进行数据库资源管理。
测试环境
- 使用的ECS实例和TaurusDB版集群均位于同一地域和同一可用区。
- TaurusDB版集群节点规格8核32GB,节点数量为2(一个主节点和一个只读节点)。
- 使用默认参数模板,并开启多租户模式。
- ECS实例规格为32U,ECS的规格需大于集群规格,防止压测时ECS的性能达到瓶颈,影响多租户的资源隔离功能。
创建资源配置信息
使用高权限账号root连接数据库实例,创建资源配置信息,用于对租户资源进行限制。
create resource_config cfg_1 max_cpu 1;
创建租户
使用高权限账号连接数据库实例,创建tenant_1,且在创建租户时与指定的资源配置信息绑定。
create tenant tenant_1 resource_config cfg_1;
创建用户和数据库
租户创建成功后,创建租户tenant_1下的用户和数据库。
在租户tenant_1下创建用户user_1,并授予user_1在tenant_1租户下的所有执行权限。此处可以将user_1@tenant_1当作租户tenant_1下的一个高权限账号。
- 在高权限账户下创建'user_1@tenant_1'。
CREATE user 'user_1@tenant_1' IDENTIFIED WITH mysql_native_password BY {password}; - 在高权限账户下,为user_1@tenant_1授予租户tenant_1下的所有执行权限。
GRANT all privileges ON `%@tenant_1`.* to 'user_1@tenant_1'@'%' with grant option;
- 在高权限账户下创建数据库。
CREATE DATABASE `sbtest@tenant_1`;
测试场景
完成资源配置、租户、用户和数据库的创建后,通过以下两个场景验证多租户资源管理的效果。
场景一:租户级资源管理
使用user_1@tenant_1账号对数据库sbtest进行压力测试:
sysbench --db-driver=mysql --mysql-host=host --mysql-port=3306 --mysql-user=user_1@tenant_1 --mysql-password=password --mysql-db=sbtest --table_size=25000 --tables=250 --threads=64 --time=180 --percentile=95 --report-interval=1 oltp_read_only run
执行如下SQL,依次将cfg_1进行变配:
alter resource_config cfg_1 max_cpu 1 min_cpu 1; -- 相隔5分钟再执行变更 alter resource_config cfg_1 max_cpu 2 min_cpu 1; -- 相隔5分钟再执行变更 alter resource_config cfg_1 max_cpu 4 min_cpu 1;


场景二:用户级资源管理
通过租户tenant_1连接数据库实例,并创建资源消费组group1和group2,绑定消费组group1到用户user_1。创建资源计划plan1,配置资源计划指令plan_directive_for_user1,plan_directive_for_user1将plan1与group1关联,并且配置mgmt_p1为10,utilization_limit为40。
mysql --host=host -u user_1@tenant_1 -p password
CALL dbms_resource_manager.create_consumer_group('group1', 'comment');
CALL dbms_resource_manager.set_consumer_group_mapping('USER', 'user_1', 'group1');
CALL dbms_resource_manager.create_plan('plan1', 'comment');
CALL dbms_resource_manager.create_plan_directive('plan1', 'group1', 'plan_directive_for_user1', 20, 20); 通过租户tenant_1连接数据库实例,启用资源计划。

