## モジュール 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-lab-4-1.jpeg)

+ 次のステップに進む前に、両方のワークロードを<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)で、1分以内に安定するQPSを観察します。結果がステップ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>を押して、両方のワークロードを停止してください。
