## モジュール 1: グローバル永続システム変数の変更

[`tidb_gc_enable`](https://docs.pingcap.com/tidb/stable/system-variables#tidb_gc_enable-new-in-v50) はグローバル永続TiDBシステム変数の一つです。これを変更して結果を観察します。

### 手順 1. 3つのターミナルを開く

+ 以下のリンクをクリックして、演習用仮想マシンへの3つのSSH接続を開きます：
  + [ターミナル 1](ssh://monitor1-ssh#1)
  + [ターミナル 2](ssh://monitor1-ssh#2)
  + [ターミナル 3](ssh://monitor1-ssh#3)

+ これで3つのアクティブなターミナルセッションが利用可能になります。

### 手順 2. TiDB サーバー1 に接続する

- [ターミナル 1](ssh://monitor1-ssh#1)で、以下を実行します。

  ```bash
  ./connect-db1.sh
  ```

  ```output
  ...
  tidb:db1>
  ```

### 手順 3. TiDB サーバー1 への接続をもう1つ作成する

- [ターミナル 2](ssh://monitor1-ssh#2)で、以下を実行します。

  ```bash
  ./connect-db1.sh
  ```

  ```output
  ...
  tidb:db1>
  ```

### 手順 4. TiDB サーバー2 に接続する

- [ターミナル 3](ssh://monitor1-ssh#3)で、以下を実行します。

  ```bash
  ./connect-db2.sh
  ```

  ```output
  ...
  tidb:db2>
  ```

### 手順 5. ターミナル1で、`tidb_gc_enable` を `OFF` に変更します

+ [ターミナル 1](ssh://monitor1-ssh#1)で、`tidb_gc_enable` のデフォルト値を確認します。

  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  ```

  ```output
  tidb:db1> SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | ON    |
  +----------------+-------+
  1 row in set (0.00 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  ```

  ```output
  tidb:db1> SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | ON    |
  +----------------+-------+
  1 row in set (0.00 sec)
  ```

+ 値をグローバルで `ON` から `OFF` に変更します。

  ```sql
  SET GLOBAL tidb_gc_enable=OFF;
  ```

  ```output
  tidb:db1> SET GLOBAL tidb_gc_enable=OFF;
  Query OK, 0 rows affected (0.06 sec)
  ```

### 手順 6. 現在のセッションで変更結果を確認します

  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  ```

  ```output
  tidb:db1> SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.00 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  ```

  ```output
  tidb:db1> SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.00 sec)
  ```

### 手順 7. 別のセッションで変更結果を確認します

- [ターミナル 2](ssh://monitor1-ssh#2) に切り替えて、以下を実行します。

  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  ```

  ```output
  tidb:db1> SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.01 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  ```

  ```output
  tidb:db1> SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.00 sec)
  ```

### 手順 8. 別の TiDB サーバーで変更結果を確認します

- [ターミナル 3](ssh://monitor1-ssh#3) に切り替えて、以下を実行します。

  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  ```

  ```output
  tidb:db2> SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.01 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  ```

  ```output
  tidb:db2> SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.00 sec)
  ```

### 手順 9. セッションスコープで `tidb_gc_enable` の値を変更しようとする

+ 任意のターミナルで、セッションスコープで `tidb_gc_enable` の値を変更します。

  ```sql
  SET SESSION tidb_gc_enable=ON;
  ```

  ```output
  tidb:db2> SET SESSION tidb_gc_enable=ON;
  ERROR 1229 (HY000): Variable 'tidb_gc_enable' is a GLOBAL variable and should be set with SET GLOBAL
  ```

### 手順 10. すべてのターミナルで、MySQLクライアントから終了してください

  ```bash
  EXIT
  ```

### 手順 11. TiDB クラスタを再起動します

- [ターミナル 1](ssh://monitor1-ssh#1) に切り替えて、次のコマンドを実行します。

  ```bash
  tiup cluster restart tidb-test --yes
  ```

  ```output
  ...
  Restarted cluster `tidb-test` successfully
  ```

### 手順 12. すべてのターミナルで、`tidb_gc_enable` の値を確認します

+ [ターミナル 1](ssh://monitor1-ssh#1)、[ターミナル 2](ssh://monitor1-ssh#2)、および[ターミナル 3](ssh://monitor1-ssh#3)で、`tidb_gc_enable` の値が `OFF` であることを確認します。[ターミナル 1](ssh://monitor1-ssh#1)を例として使用します。前回の再起動でセッションが切断されたため、TiDBサーバーに再接続する必要があります。

  ```bash
  ./connect-db1.sh
  ```

  ```output
  ...
  tidb:db1>
  ```

  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  ```

  ```output
  tidb:db1> SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.01 sec)
  ```

  ```sql
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  ```

  ```output
  tidb:db1> SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.00 sec)
  ```

### 手順 13. 任意のターミナルで、`tidb_gc_enable` を `ON` に戻します

  ```sql
  SET GLOBAL tidb_gc_enable=ON;
  ```

  ```output
  tidb:db1> SET GLOBAL tidb_gc_enable=ON;
  Query OK, 0 rows affected (0.07 sec)
  ```

### 手順 14. すべてのターミナルを閉じます

### まとめ

グローバルな永続的なTiDBシステム変数は、グローバルレベルでのみ設定でき、その効果はクラスタ内のすべてのTiDBサーバーとセッションに即座に適用されます。
