# TiDBサーバーシステム変数の設定

### 概要
+ TiDBには、TiDBサーバーシステム変数とTiDBクラスタ設定パラメータがあり、TiDBクラスタの動作を制御することができます。これらの演習では、TiDBサーバーシステム変数の変更に関する経験を得ます。
+ 有効範囲に基づいて分類された4つのTiDBサーバーシステム変数カテゴリーがあります。

 | カテゴリー             | 変更方法      | 有効範囲                                                 |
 | :--------------------- | :------------ | :------------------------------------------------------- |
 | グローバルな永続性     | `SET GLOBAL`  | すべてのTiDBサーバーインスタンスとすべてのセッション     |
 | グローバルな非永続性   | `SET GLOBAL`  | 現在の TiDB サーバーインスタンスとその接続セッション     |
 | セッションのみ         | `SET SESSION` | 現在のセッション                                         |
 | セッションとグローバル | `SET SESSION` | 現在のセッション                                         |
 | セッションとグローバル | `SET GLOBAL`  | すべての TiDB サーバーインスタンスおよび新しいセッション |
 
### 注意
+ いくつかのステップでは、2つの異なるターミナルウィンドウでコマンドを入力する必要があります。2つのターミナルを起動し、演習の間ずっと開いておくと便利でしょう。
+ この演習で利用する、`IP`、`port`、`username`、`password`、`directory`などは、あなたの環境と異なる場合があります。
+ ターミナルウィンドウの"`$`"とはOSプロンプトです。
+ ターミナルウィンドウ内の "`tidb>`" または "`mysql>`" は、SQL コマンドプロンプトです。
+ これらの演習は、ノートパソコンなどの単一のマシン上で実行することができます。
+ これらの演習は、TiDB Playground クラスタおよび TiDB Cloud Serverless Tier 向けに設計されています。TiDB Playground クラスタは本番用途には設計されていないことに注意することが重要です。

### 前提条件
+ macOSまたはLinuxを使用していること。
+ [lab repository](https://github.com/pingcap/tidb-course-201-lab.git)をクローン済みであること。
+ 演習「テスト用にTiDBクラスタを作成する」を完了していること。

## 演習 1：永続的なグローバルシステム変数のみを変更する

### 概要
+ [`tidb_gc_enable`](https://docs.pingcap.com/ja/tidb/stable/system-variables#tidb-gc-enable-span-class-version-mark-new-in-v5-0-)は永続性なグローバルシステム変数の1つです。それを変更して結果を観察します。

### 所要時間
+ この演習は約10分程度かかります。

### タスク
+ TiDBシステム変数`tidb_gc_enable`を変更します。

### 手順
1. 新しいターミナルウィンドウ（ターミナル1として）を開き、スクリプト`connect-4000.sh`を実行して、TiDBサーバーに接続します。

  ```
  $ cd tidb-course-201-lab/scripts
  $ ./connect-4000.sh
  ...
  tidb:4000>
  ```

2. 新しいターミナルウィンドウ（ターミナル2として）を開き、`connect-4000.sh` を使用して TiDB サーバーに接続します。
 
  ```
  $ cd tidb-course-201-lab/scripts
  $ ./connect-4000.sh
  ...
  tidb:4000>
  ```

3. 新しいターミナルウィンドウを開いて、（ターミナル3として）`connect-4001.sh`を使用して異なるTiDBサーバーに接続します。

  ```
  $ cd tidb-course-201-lab/scripts
  $ ./connect-4001.sh
  ...
  tidb:4001>
  ```

4. ターミナル1で、`tidb_gc_enable`のデフォルト値を確認し、`ON`から`OFF`に値を変更します。

  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  SET GLOBAL tidb_gc_enable=OFF;
  ```

  ```
  tidb:4000> SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  --------------
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable'
  --------------

  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | ON    |
  +----------------+-------+
  1 row in set (0.00 sec)

  tidb:4000> SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  --------------
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable'
  --------------

  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | ON    |
  +----------------+-------+
  1 row in set (0.00 sec)

  tidb:4000> SET GLOBAL tidb_gc_enable=OFF;
  --------------
  SET GLOBAL tidb_gc_enable=OFF
  --------------

  Query OK, 0 rows affected (0.06 sec)
  ```

5. ターミナル3で変更が確認できます。変数値はセッションおよびグローバルレベルの両方で更新されました。
  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  ```
  ```
  tidb:4001> SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  --------------
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable'
  --------------

  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.00 sec)

  tidb:4001> SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  --------------
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable'
  --------------

  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.00 sec)
  ```

6. ターミナル2で変更を確認します。変数の値は、セッションレベルとグローバルレベルの両方で更新されました。
  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  ```
  ```
  tidb:4000> SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  --------------
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable'
  --------------

  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.01 sec)

  tidb:4000> SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  --------------
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable'
  --------------

  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.00 sec)
  ```

7. 変更を確認するためには、ターミナル3で確認します。変数の値はセッションレベルとグローバルレベルの両方で更新されました。
  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  ```
  ```
  tidb:4001> SHOW SESSION VARIABLES LIKE 'tidb_gc_enable';
  --------------
  SHOW SESSION VARIABLES LIKE 'tidb_gc_enable'
  --------------

  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.01 sec)

  tidb:4001> SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable';
  --------------
  SHOW GLOBAL VARIABLES LIKE 'tidb_gc_enable'
  --------------

  +----------------+-------+
  | Variable_name  | Value |
  +----------------+-------+
  | tidb_gc_enable | OFF   |
  +----------------+-------+
  1 row in set (0.00 sec)
  ```

8. 任意のターミナルで、セッションスコープ上の`tidb_gc_enable`の値を変更しようとして、失敗した結果を観察します。例えば、ターミナル3で実行します。
  ```sql
  SET SESSION tidb_gc_enable=ON;
  ```
  ```
  tidb:4001> SET SESSION tidb_gc_enable=ON;
  --------------
  SET SESSION tidb_gc_enable=ON
  --------------

  ERROR 1229 (HY000): Variable 'tidb_gc_enable' is a GLOBAL variable and should be set with SET GLOBAL
  ```

9. いずれかのターミナルで、`tidb_gc_enable`を`ON`に戻します。
  ```sql
  SET GLOBAL tidb_gc_enable=ON;
  ```
  ```
  tidb:4000> SET GLOBAL tidb_gc_enable=ON;
  --------------
  SET GLOBAL tidb_gc_enable=ON
  --------------

  Query OK, 0 rows affected (0.07 sec)
  ```

10. ３つのターミナルとデータベースセッションをすべて開いたままにします。

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

## 演習 2：非永続的なグローバルシステム変数のみを変更する
### 概要
+ [`max_connections`](https://docs.pingcap.com/ja/tidb/stable/system-variables#max_connections)は非永続性なグローバルシステム変数の1つです。それを変更して結果を観察します。

### 所要時間
+ この演習は約10分程度かかります。

### タスク
+ TiDBシステム変数`max_connections`を変更します。

### 手順
1. ターミナル1で、`max_connections`のデフォルト値を確認します。そして、`0`(無制限の接続)の値を`1`(一つの接続)に変更して、変更を確認します。
  ```sql
  SHOW SESSION VARIABLES LIKE 'max_connections';
  SHOW GLOBAL VARIABLES LIKE 'max_connections';
  SET GLOBAL max_connections=1;
  SHOW SESSION VARIABLES LIKE 'max_connections';
  SHOW GLOBAL VARIABLES LIKE 'max_connections';
  ```
  ```
  tidb:4000> SHOW SESSION VARIABLES LIKE 'max_connections';
  --------------
  SHOW SESSION VARIABLES LIKE 'max_connections'
  --------------

  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 0     |
  +-----------------+-------+
  1 row in set (0.00 sec)

  tidb:4000> SHOW GLOBAL VARIABLES LIKE 'max_connections';
  --------------
  SHOW GLOBAL VARIABLES LIKE 'max_connections'
  --------------

  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 0     |
  +-----------------+-------+
  1 row in set (0.00 sec)

  tidb:4000> SET GLOBAL max_connections=1;
  --------------
  SET GLOBAL max_connections=1
  --------------

  Query OK, 0 rows affected (0.00 sec)

  tidb:4000> SHOW SESSION VARIABLES LIKE 'max_connections';
  --------------
  SHOW SESSION VARIABLES LIKE 'max_connections'
  --------------

  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 1     |
  +-----------------+-------+
  1 row in set (0.00 sec)

  tidb:4000> SHOW GLOBAL VARIABLES LIKE 'max_connections';
  --------------
  SHOW GLOBAL VARIABLES LIKE 'max_connections'
  --------------

  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 1     |
  +-----------------+-------+
  1 row in set (0.01 sec)
  ```

2. ターミナル2で変更を確認し、値が`1`であり、ターミナル1からの観測と矛盾しないことを確認します。
  ```sql
  SHOW SESSION VARIABLES LIKE 'max_connections';
  SHOW GLOBAL VARIABLES LIKE 'max_connections';
  ```
  ```
  tidb:4000> SHOW SESSION VARIABLES LIKE 'max_connections';
  --------------
  SHOW SESSION VARIABLES LIKE 'max_connections'
  --------------

  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 1     |
  +-----------------+-------+
  1 row in set (0.00 sec)

  tidb:4000> SHOW GLOBAL VARIABLES LIKE 'max_connections';
  --------------
  SHOW GLOBAL VARIABLES LIKE 'max_connections'
  --------------

  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 1     |
  +-----------------+-------+
  1 row in set (0.00 sec)
  ```

3. ターミナル3上で値を確認します。値が変更されていないことを確認して、`0`のままであることを確認します。
  ```sql
  SHOW SESSION VARIABLES LIKE 'max_connections';
  SHOW GLOBAL VARIABLES LIKE 'max_connections';
  ```
  ```
  tidb:4001> SHOW SESSION VARIABLES LIKE 'max_connections';
  --------------
  SHOW SESSION VARIABLES LIKE 'max_connections'
  --------------

  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 0     |
  +-----------------+-------+
  1 row in set (0.00 sec)

  tidb:4001> SHOW GLOBAL VARIABLES LIKE 'max_connections';
  --------------
  SHOW GLOBAL VARIABLES LIKE 'max_connections'
  --------------

  +-----------------+-------+
  | Variable_name   | Value |
  +-----------------+-------+
  | max_connections | 0     |
  +-----------------+-------+
  1 row in set (0.01 sec)
  ```

4. ターミナル1でデータベースセッションを終了し、再度`connect-4000.sh`を実行してログインしようとします。ただし、これにより、オペレーションポート4000を持つTiDBサーバーインスタンス上の`max_connections`設定のため、今回のログイン試行は失敗します。
  ```
  $ ./connect-4000.sh
  ERROR 1040 (HY000): Too many connections
  ```

5. ターミナル1で、`connect-4001.sh`と入力してログインを試みます。オペレーションポートが4001であるTiDBサーバーインスタンスは、`max_connections`システム変数を`0`に設定されているため、接続を複数確立できることを意味しています。ログイン試行は成功するはずです。
  ```
  $ ./connect-4001.sh
  ...
  tidb:4001>
  ```

6. ターミナル2で、`max_connections`を`0`に変更します。
  ```sql
  SET GLOBAL max_connections=0;
  ```
  ```
  tidb:4000> SET GLOBAL max_connections=0;
  --------------
  SET GLOBAL max_connections=0
  --------------

  Query OK, 0 rows affected (0.01 sec)
  ```

7. すべての3つのターミナルとデータベースセッションを開いたままにします。

### まとめ
非永続的なグローバルTiDBシステム変数は、グローバルレベルでのみ設定でき、その効果は`SET GLOBAL`ステートメントを発行したTiDBインスタンスに適用されます。

## 演習 3: セッション変数のみを変更する
### 概要
+ [`tidb_allow_remove_auto_inc`](https://docs.pingcap.com/ja/tidb/stable/system-variables#tidb-allow-remove-auto-inc-span-class-version-mark-new-in-v2-1-18-and-v3-0-4-)はセッション変数の1つです。それを変更して結果を観察します。

### 所要時間
+ この演習は約10分程度かかります。

### タスク
+ TiDBシステム変数`tidb_allow_remove_auto_inc`を変更します。

### 手順
1. TiDBサーバーのポート4001に接続された2つのターミナル（ターミナル1とターミナル3）と、TiDBサーバーのポート4000に接続された1つのターミナル（ターミナル2）があることを確認します。

2. ターミナル1で、システム変数`tidb_allow_remove_auto_inc`を`OFF`から`ON`に変更し、再度確認します。
  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc';
  SET SESSION tidb_allow_remove_auto_inc=ON;
  SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc';
  ```
  ```
  tidb:4001> SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc';
  --------------
  SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc'
  --------------

  +----------------------------+-------+
  | Variable_name              | Value |
  +----------------------------+-------+
  | tidb_allow_remove_auto_inc | OFF   |
  +----------------------------+-------+
  1 row in set (0.00 sec)

  tidb:4001> SET SESSION tidb_allow_remove_auto_inc=ON;
  --------------
  SET SESSION tidb_allow_remove_auto_inc=ON
  --------------

  Query OK, 0 rows affected (0.00 sec)

  tidb:4001> SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc';
  --------------
  SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc'
  --------------

  +----------------------------+-------+
  | Variable_name              | Value |
  +----------------------------+-------+
  | tidb_allow_remove_auto_inc | ON    |
  +----------------------------+-------+
  1 row in set (0.00 sec)
  ```

3. ターミナル2の別のセッションから、`tidb_allow_remove_auto_inc`の値をチェックします。それが`OFF`であることを確認します。
  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc';
  ```
  ```
  tidb:4000> SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc';
  --------------
  SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc'
  --------------

  +----------------------------+-------+
  | Variable_name              | Value |
  +----------------------------+-------+
  | tidb_allow_remove_auto_inc | OFF   |
  +----------------------------+-------+
  1 row in set (0.01 sec)
  ```

4. ターミナル3の別のセッションから、`tidb_allow_remove_auto_inc`の値を確認します。`OFF`の値であることを確認します。
  ```sql
  SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc';
  ```
  ```
  tidb:4001> SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc';
  --------------
  SHOW SESSION VARIABLES LIKE 'tidb_allow_remove_auto_inc'
  --------------

  +----------------------------+-------+
  | Variable_name              | Value |
  +----------------------------+-------+
  | tidb_allow_remove_auto_inc | OFF   |
  +----------------------------+-------+
  1 row in set (0.00 sec)
  ```

5. 任意のターミナルで、グローバルスコープの`tidb_allow_remove_auto_inc`の値を変更しようとしてみて、失敗した結果を観察します。例えば、ターミナル3で行う場合。
  ```sql
  SET GLOBAL tidb_allow_remove_auto_inc=ON;
  ```
  ```
  tidb:4001> SET GLOBAL tidb_allow_remove_auto_inc=ON;
  --------------
  SET GLOBAL tidb_allow_remove_auto_inc=ON
  --------------

  ERROR 1228 (HY000): Variable 'tidb_allow_remove_auto_inc' is a SESSION variable and can't be used with SET GLOBAL
  ```

6. ターミナル1で、`tidb_allow_remove_auto_inc`を`OFF`に戻します。
  ```sql
  SET SESSION tidb_allow_remove_auto_inc=OFF;
  ```
  ```
  tidb:4001> SET SESSION tidb_allow_remove_auto_inc=ON;
  --------------
  SET SESSION tidb_allow_remove_auto_inc=ON
  --------------

  Query OK, 0 rows affected (0.00 sec)
  ```

7. 3つのターミナルとデータベースセッションをすべて開いたままにします。


### まとめ
セッションのみ有効な TiDB システム変数は、セッションレベルでのみ設定でき、`SET SESSION` ステートメントを発行した現在のセッションに適用されます。

## 演習 4：セッションおよびグローバルシステム変数のみを変更する
### 概要
+ [`auto_increment_offset`](https://docs.pingcap.com/ja/tidb/stable/system-variables#auto-increment-offset)はセッションおよびグローバルシステム変数の1つです。それを変更して結果を観察します。

### 所要時間
+ この演習は約10分程度かかります。

### タスク
+ セッションレベルで TiDB システム変数`auto_increment_offset`を変更します。
+ グローバルレベルで、TiDBシステム変数`auto_increment_offset`を変更します。

### 手順
1. 3つのデータベース接続があることを確認します。2つのターミナル（ターミナル1とターミナル3）がポート4001でTiDBサーバーに、1つのターミナル（ターミナル2）がポート4000でTiDBサーバーに接続されていることを確認します。

2. ターミナル1のセッションレベルで、`1`から`99`にシステム変数`auto_increment_offset`をチェックして修正します。変数がセッションレベルでのみ更新されたことを確認します。
  ```sql
  SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  SET SESSION auto_increment_offset=99;
  SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  ```
  ```
  tidb:4001> SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  --------------
  SHOW SESSION VARIABLES LIKE 'auto_increment_offset'
  --------------

  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 1     |
  +-----------------------+-------+
  1 row in set (0.00 sec)

  tidb:4001> SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  --------------
  SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset'
  --------------

  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 1     |
  +-----------------------+-------+
  1 row in set (0.00 sec)

  tidb:4001> SET SESSION auto_increment_offset=99;
  --------------
  SET SESSION auto_increment_offset=99
  --------------

  Query OK, 0 rows affected (0.00 sec)

  tidb:4001> SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  --------------
  SHOW SESSION VARIABLES LIKE 'auto_increment_offset'
  --------------

  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 99    |
  +-----------------------+-------+
  1 row in set (0.00 sec)

  tidb:4001> SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  --------------
  SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset'
  --------------

  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 1     |
  +-----------------------+-------+
  1 row in set (0.00 sec)
  ```

3. 両方のセッションとグローバルレベルから、ターミナル2とターミナル3で変数の値を確認します。 両方とも変更されず、`1`になっているはずです。
  ```sql
  SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  ```

  ターミナル2にて。
     ```
     tidb:4000> SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
     --------------
     SHOW SESSION VARIABLES LIKE 'auto_increment_offset'
     --------------

     +-----------------------+-------+
     | Variable_name         | Value |
     +-----------------------+-------+
     | auto_increment_offset | 1     |
     +-----------------------+-------+
     1 row in set (0.01 sec)

     tidb:4000> SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
     --------------
     SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset'
     --------------

     +-----------------------+-------+
     | Variable_name         | Value |
     +-----------------------+-------+
     | auto_increment_offset | 1     |
     +-----------------------+-------+
     1 row in set (0.00 sec)
     ```

  ターミナル3にて。
     ```
     tidb:4001> SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
     --------------
     SHOW SESSION VARIABLES LIKE 'auto_increment_offset'
     --------------

     +-----------------------+-------+
     | Variable_name         | Value |
     +-----------------------+-------+
     | auto_increment_offset | 1     |
     +-----------------------+-------+
     1 row in set (0.01 sec)

     tidb:4001> SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
     --------------
     SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset'
     --------------

     +-----------------------+-------+
     | Variable_name         | Value |
     +-----------------------+-------+
     | auto_increment_offset | 1     |
     +-----------------------+-------+
     1 row in set (0.00 sec)
     ```

4. ターミナル1で、`auto_increment_offset`を`1`に戻します。
  ```sql
  SET SESSION auto_increment_offset=1;
  ```

5. ターミナル1で、グローバルレベルで`1`を`99`に変更します。変数がグローバルレベルのみで更新されたことを確認します。
  ```sql
  SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  SET GLOBAL auto_increment_offset=99;
  SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  ```
  ```
  tidb:4001> SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  --------------
  SHOW SESSION VARIABLES LIKE 'auto_increment_offset'
  --------------

  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 1     |
  +-----------------------+-------+
  1 row in set (0.00 sec)

  tidb:4001> SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  --------------
  SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset'
  --------------

  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 1     |
  +-----------------------+-------+
  1 row in set (0.00 sec)

  tidb:4001> SET GLOBAL auto_increment_offset=99;
  --------------
  SET GLOBAL auto_increment_offset=99
  --------------

  Query OK, 0 rows affected (0.05 sec)

  tidb:4001> SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  --------------
  SHOW SESSION VARIABLES LIKE 'auto_increment_offset'
  --------------

  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 1     |
  +-----------------------+-------+
  1 row in set (0.00 sec)

  tidb:4001> SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  --------------
  SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset'
  --------------

  +-----------------------+-------+
  | Variable_name         | Value |
  +-----------------------+-------+
  | auto_increment_offset | 99    |
  +-----------------------+-------+
  1 row in set (0.00 sec)
  ```

6. ターミナル2とターミナル3の変数の値を、セッションレベルとグローバルレベルの両方から確認します。変数がグローバルレベルでのみ更新されていることを確認します。
  ```sql
  SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
  SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
  ```

  ターミナル2で。
     ```
     tidb:4000> SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
     --------------
     SHOW SESSION VARIABLES LIKE 'auto_increment_offset'
     --------------

     +-----------------------+-------+
     | Variable_name         | Value |
     +-----------------------+-------+
     | auto_increment_offset | 1     |
     +-----------------------+-------+
     1 row in set (0.00 sec)

     tidb:4000> SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
     --------------
     SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset'
     --------------

     +-----------------------+-------+
     | Variable_name         | Value |
     +-----------------------+-------+
     | auto_increment_offset | 99    |
     +-----------------------+-------+
     1 row in set (0.00 sec)
     ```

  ターミナル3で。
     ```
     tidb:4001> SHOW SESSION VARIABLES LIKE 'auto_increment_offset';
     --------------
     SHOW SESSION VARIABLES LIKE 'auto_increment_offset'
     --------------

     +-----------------------+-------+
     | Variable_name         | Value |
     +-----------------------+-------+
     | auto_increment_offset | 1     |
     +-----------------------+-------+
     1 row in set (0.01 sec)

     tidb:4001> SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset';
     --------------
     SHOW GLOBAL VARIABLES LIKE 'auto_increment_offset'
     --------------

     +-----------------------+-------+
     | Variable_name         | Value |
     +-----------------------+-------+
     | auto_increment_offset | 99    |
     +-----------------------+-------+
     1 row in set (0.00 sec)
     ```

7. どのターミナルでも、`auto_increment_offset`を`1`に変更します。
  ```sql
  SET GLOBAL auto_increment_offset=1;
  ```
  ```
  tidb:4000> SET GLOBAL auto_increment_offset=1;
  --------------
  SET GLOBAL auto_increment_offset=1
  --------------

  Query OK, 0 rows affected (0.07 sec)
  ```

## まとめ
 | カテゴリー             | 変更方法      | 有効範囲                                                 |
 | :--------------------- | :------------ | :------------------------------------------------------- |
 | グローバルな永続       | `SET GLOBAL`  | すべてのTiDBサーバーインスタンスとすべてのセッション     |
 | グローバルな非永続性   | `SET GLOBAL`  | 現在の TiDB サーバーインスタンスとその接続セッション     |
 | セッションのみ         | `SET SESSION` | 現在のセッション                                         |
 | セッションとグローバル | `SET SESSION` | 現在のセッション                                         |
 | セッションとグローバル | `SET GLOBAL`  | すべての TiDB サーバーインスタンスおよび新しいセッション |

[TiDBの運用](https://pingcap.co.jp/education/)という講師主導のトレーニングコースに登録して、実際のTiDBクラスタでの実践的な手順を学びましょう。

## 演習終わり
