
# 多租户资源管理使用说明
#### 操作场景
本文将向您介绍如何进行数据库资源管理。
#### 测试环境
- 使用的ECS实例和TaurusDB版集群均位于同一地域和同一可用区。
- TaurusDB版集群节点规格8核32GB，节点数量为2（一个主节点和一个只读节点）。
- 使用默认参数模板，并[开启多租户模式](https://support.huaweicloud.com/kerneldesc-taurusdb/taurusdb_20_0065.html#ZH-CN_TOPIC_0000002285270684__section89807221218)。
- 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下的一个高权限账号。
1. 在高权限账户下创建'user_1@tenant_1'。
   ```
   CREATE user 'user_1@tenant_1' IDENTIFIED WITH mysql_native_password BY {password};
   ```
   
2. 在高权限账户下，为user_1@tenant_1授予租户tenant_1下的所有执行权限。
   ```
   GRANT all privileges ON `%@tenant_1`.* to 'user_1@tenant_1'@'%' with grant option;
   ```
   
3. 在高权限账户下创建数据库。
   ```
   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;
```
![](https://support.huaweicloud.com/kerneldesc-taurusdb/figure/zh-cn_image_0000002684123391.png "点击放大")
![](https://support.huaweicloud.com/kerneldesc-taurusdb/figure/zh-cn_image_0000002654123682.png "点击放大")
#### 场景二：用户级资源管理
通过租户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连接数据库实例，启用资源计划。
![](https://support.huaweicloud.com/kerneldesc-taurusdb/figure/zh-cn_image_0000002684123393.png "点击放大")
![](https://support.huaweicloud.com/kerneldesc-taurusdb/figure/zh-cn_image_0000002654123686.png "点击放大")
