## モジュール 4: セッションおよびグローバルシステム変数の変更

+ [`auto_increment_offset`](https://docs.pingcap.com/tidb/stable/system-variables#auto_increment_offset)はセッションおよびグローバルシステム変数の1つであり、セッションレベルとグローバルレベルでそれを変更し、結果を観察します。

### 手順 1. ターミナル接続を確認する

+ データベース接続がある3つのターミナルを持っていることを確認します。2つのターミナル（[ターミナル 1](ssh://monitor1-ssh#1)と[ターミナル 3](ssh://monitor1-ssh#3)）はTiDBサーバー2に接続されており、1つのターミナル（[ターミナル 2](ssh://monitor1-ssh#2)）はTiDBサーバー1に接続されています。

### 手順 2. ターミナル1で `auto_increment_offset` を`1`から`99`に更新する

- [ターミナル 1](ssh://monitor1-ssh#1)に切り替えます。

+ [ターミナル 1](ssh://monitor1-ssh#1)でセッションレベルでシステム変数`auto_increment_offset`を`1`から`99`に確認および変更します。この変数がセッションレベルでのみ更新されたことを確認してください。

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

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

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

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

  ```sql
  SET SESSION auto_increment_offset=99;
  ```

  ```output
  tidb:db2> SET SESSION auto_increment_offset=99;
  Query OK, 0 rows affected (0.00 sec)
  ```

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

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

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

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

### 手順 3. ターミナル2および3で、`auto_increment_offset` の値を確認します

+ セッションレベルとグローバルレベルの両方で、[ターミナル 2](ssh://monitor1-ssh#2)および[ターミナル 3](ssh://monitor1-ssh#3)の変数値を確認してください。どちらも変更されずに、`1`のままである必要があります。ここでは、[ターミナル 2](ssh://monitor1-ssh#2)を例として使用します。

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

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

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

  ```output
  tidb:db1> 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`に戻します

- [ターミナル 1](ssh://monitor1-ssh#1) に切り替えます。

  ```sql
  SET SESSION auto_increment_offset=1;
  ```

### 手順 5. ターミナル1で、`auto_increment_offset` をグローバルレベルで更新します

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

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

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

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

  ```sql
  SET GLOBAL auto_increment_offset=99;
  ```

  ```output
  tidb:db2> SET GLOBAL auto_increment_offset=99;
  Query OK, 0 rows affected (0.05 sec)
  ```

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

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

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

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

### 手順 6. ターミナル2と3で `auto_increment_offset` を確認

+ セッションレベルとグローバルレベルの両方で、[ターミナル 2](ssh://monitor1-ssh#2)と[ターミナル 3](ssh://monitor1-ssh#3)の`auto_increment_offset`の値を確認します。グローバルレベルのみで変数が更新されていることを確認します。[ターミナル 2](ssh://monitor1-ssh#2)の結果を例として使用します。

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

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

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

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

### 手順 7. TiDB クラスタを再起動する

+ 任意のターミナルでTiDBとの接続を終了し、その後、TiDB クラスタを再起動します。

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

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

### 手順 8. ターミナル1、2、3で、`auto_increment_offset` の値を確認

+ [ターミナル 1](ssh://monitor1-ssh#1)、[ターミナル 2](ssh://monitor1-ssh#2)、[ターミナル 3](ssh://monitor1-ssh#3)に接続し、セッションレベルおよびグローバルレベルの両方で`auto_increment_offset`の値を確認します。変数がセッションとグローバルレベルの両方で更新されていることを確認します。ここでは、[ターミナル 1](ssh://monitor1-ssh#1)を例として使用します。

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

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

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

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

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

### 手順 9. どのターミナルでも、`auto_increment_offset` を`1`に戻して変更します

  ```sql
  SET GLOBAL auto_increment_offset=1;
  ```

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

### 手順 10. すべてのターミナルを終了し閉じます

### まとめ

`SET SESSION` を使用してセッションおよびグローバル変数を変更した場合、その影響範囲は現在のセッションのみになります。

`SET GLOBAL` を使用してセッションおよびグローバル変数を変更した場合、その影響範囲はすべての TiDB サーバーインスタンスおよび新しいセッションになります。
