## 模块 5：使用资源控制的混合工作负载性能控制

  ![40%](https://lab-static.pingcap.com/quick-demo/demo-006-4-en.png)

### 步骤 1. 重置为用户的默认资源组设置

+ 在 [终端 1](ssh://monitor1-ssh#1) 上查看并运行脚本，将 `userA` 和 `userB` 重置为默认资源组。

  ```bash
  cat lab4-rc-default.sh
  ```

  ```output
  #!/bin/bash

  source ./hosts-env.sh

  # For cluster
  export MYSQL_PS1="tidb:db1> "
  mysql -h ${HOST_DB1_PRIVATE_IP} -P 4000 -u root --verbose << 'EOFX'
  ALTER USER userA RESOURCE GROUP default;
  ALTER USER userB RESOURCE GROUP default;
  DROP RESOURCE GROUP IF EXISTS rg1;
  DROP RESOURCE GROUP IF EXISTS rg2;
  SELECT * FROM information_schema.resource_groups;
  SELECT Host,user, User_attributes FROM mysql.user WHERE user IN ('userA','userB');
  EOFX
  ```

  ```bash
  ./lab4-rc-default.sh
  ```

  ```output
  ...
  --------------
  SELECT * FROM information_schema.resource_groups
  --------------

  NAME	RU_PER_SEC	PRIORITY	BURSTABLE	QUERY_LIMIT	BACKGROUND
  default	UNLIMITED	MEDIUM	YES	NULL	NULL
  --------------
  SELECT Host,user, User_attributes FROM mysql.user WHERE user IN ('userA','userB')
  --------------

  Host	user	User_attributes
  %	userA	{"resource_group": "default"}
  %	userB	{"resource_group": "default"}
  ```

### 步骤 2. 在默认资源组设置下启动混合工作负载

+ 在 [终端 1](ssh://monitor1-ssh#1) 上运行脚本，重新启动 `userA` 的示例 OLTP 工作负载。让脚本运行并继续下一步。

  ```bash
  ./lab4-workload-userA.sh
  ```

+ 在 [终端 2](ssh://monitor1-ssh#2) 上运行脚本，重新启动 `userB` 的示例批量工作负载（无输出）。让脚本运行并继续下一步。

  ```bash
  ./lab4-workload-userB.sh
  ```

### 步骤 3. 在默认资源组设置下观察结果

+ 在 [终端 1](ssh://monitor1-ssh#1) 上，观察 userA 的 OLTP 工作负载的 QPS。注意 userB 的批量工作负载对性能的负面影响。

  ![60%](https://lab-static.pingcap.com/quick-demo/demo-006-M4-burstable-grafana-v2-20250331.png)

+ 在继续下一步之前，按 <kbd>Ctrl</kbd>+<kbd>C</kbd> 停止两个工作负载。

### 步骤 4. 使用资源组设置优先处理选定的工作负载

+ 在 [终端 1](ssh://monitor1-ssh#1) 上，运行脚本，为 `userA` 设置资源组为 `(RU_PER_SEC=50000 PRIORITY=HIGH BURSTABLE)`，为 `userB` 设置资源组为 `(RU_PER_SEC=500 PRIORITY=MEDIUM)`。

  ```bash
  cat lab4-rc-setup.sh
  ```

  ```output
  #!/bin/bash

  source ./hosts-env.sh

  # For cluster
  export MYSQL_PS1="tidb:db1> "
  mysql -h ${HOST_DB1_PRIVATE_IP} -P 4000 -u root --verbose << 'EOFX'
  ALTER USER userA RESOURCE GROUP default;
  ALTER USER userB RESOURCE GROUP default;
  DROP RESOURCE GROUP IF EXISTS rg1;
  DROP RESOURCE GROUP IF EXISTS rg2;
  CREATE RESOURCE GROUP rg1 RU_PER_SEC=50000 PRIORITY=HIGH BURSTABLE;
  CREATE RESOURCE GROUP rg2 RU_PER_SEC=500 PRIORITY=MEDIUM;
  ALTER USER userA RESOURCE GROUP rg1;
  ALTER USER userB RESOURCE GROUP rg2;
  SELECT * FROM information_schema.resource_groups;
  SELECT Host,user, User_attributes FROM mysql.user WHERE user IN ('userA','userB');
  EOFX
  ```

  ```bash
  ./lab4-rc-setup.sh
  ```

  ```output
  ...
  --------------
  SELECT * FROM information_schema.resource_groups
  --------------

  NAME	RU_PER_SEC	PRIORITY	BURSTABLE	QUERY_LIMIT	BACKGROUND
  default	UNLIMITED	MEDIUM	YES	NULL	NULL
  rg1	50000	HIGH	YES	NULL	NULL
  rg2	500	MEDIUM	NO	NULL	NULL
  --------------
  SELECT Host,user, User_attributes FROM mysql.user WHERE user IN ('userA','userB')
  --------------

  Host	user	User_attributes
  %	userA	{"resource_group": "rg1"}
  %	userB	{"resource_group": "rg2"}
  ```

### 步骤 5. 重新启动混合工作负载

+ 在 [终端 1](ssh://monitor1-ssh#1) 上运行脚本，重新启动 `userA` 的示例 OLTP 工作负载，保持脚本运行。

  ```bash
  ./lab4-workload-userA.sh
  ```

+ 在 [终端 2](ssh://monitor1-ssh#2) 上运行脚本，重新启动 `userB` 的示例批量工作负载（无输出），保持脚本运行。

  ```bash
  ./lab4-workload-userB.sh
  ```

### 步骤 6. 观察结果

+ 在 [终端 1](ssh://monitor1-ssh#1) 上，观察 userA 的 OLTP 工作负载的 QPS，直到 QPS 稳定，这可能需要长达 1 分钟。注意性能比步骤 4 的结果要好得多。

  ![60%](https://lab-static.pingcap.com/quick-demo/demo-006-M5-mixed-workloads-with-RC-v3-20250331.png)

+ 在 [终端 1](ssh://monitor1-ssh#1) 和 [终端 2](ssh://monitor1-ssh#2) 上按 <kbd>Ctrl</kbd>+<kbd>C</kbd> 停止两个工作负载。
