## モジュール 2: TiDB クラスタに読み書き作業を適用する

### 手順 1. INSERT 作業のスクリプトを確認します

+ [ターミナル 2](ssh://monitor1-ssh#2) で、INSERT 作業のスクリプトを確認します。JDBC 例外が発生した場合にコンソールにメッセージを出力することができる Java プログラムが含まれています。最終的な出力には、`Work ? discards connection and try to get a new connection` といったメッセージが見られることがあります。デモの際にはこれらのメッセージに遭遇しないはずです。TiProxy はアップグレードプロセスが TiDB サーバーインスタンスをシャットダウンする前にデータベースクライアントセッションを移行でき、操作が中断されることがないからです。

  ```bash
  cat scripts/quick-demo-005-jdbc-endless-insert-dummy.sh
  ```

  ```output
  #!/bin/bash

  # Run ./quick-demo-005-jdbc-endless-insert-dummy.sh <LB_NAME>

  rm -f DemoJdbcEndlessInsertDummyCSPWithLBLongConn.class
  javac -cp .:misc/mysql-connector-java-5.1.36-bin.jar DemoJdbcEndlessInsertDummyCSPWithLBLongConn.java
  sleep 1
  java -cp .:misc/mysql-connector-java-5.1.36-bin.jar DemoJdbcEndlessInsertDummyCSPWithLBLongConn ${1}
  ```

  ```bash
  cat scripts/DemoJdbcEndlessInsertDummyCSPWithLBLongConn.java | grep -A10 catch | grep Work
  ```

  ```output
              System.out.println("Work 1 discards connection and try to get a new connection");
              System.out.println("Work 2 discards connection and try to get a new connection");
              System.out.println("Work 3 discards connection and try to get a new connection");
              System.out.println("Work 4 discards connection and try to get a new connection");
  ```

### 手順 2. INSERT 作業を適用するスクリプトを実行します

+ [ターミナル 2](ssh://monitor1-ssh#2) で、4つのワーカーでサンプル INSERT 作業を適用するスクリプトを実行します。作業を実行し続け、次のステップに進みます。

  ```bash
  mysql -h ${HOST_TIPROXY1_PRIVATE_IP} -P 6000 -uroot << EOF
  DROP TABLE IF EXISTS test.dummy;
  CREATE TABLE test.dummy (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(80), event JSON, tidb_instance VARCHAR(30));
  EOF
  cd scripts
  ./quick-demo-005-jdbc-endless-insert-dummy.sh ${HOST_TIPROXY1_PRIVATE_IP}
  ```

  ```output
  Worker 3 -> TiDB:Thu May 16 09:38:55 UTC 2024 at 10.90.1.153
  Worker 4 -> TiDB:Thu May 16 09:38:56 UTC 2024 at 10.90.1.153
  Worker 2 -> TiDB:Thu May 16 09:38:56 UTC 2024 at 10.90.1.153
  Worker 1 -> TiDB:Thu May 16 09:38:56 UTC 2024 at 10.90.1.153
  Worker 3 -> TiDB:Thu May 16 09:38:56 UTC 2024 at 10.90.1.153
  Worker 4 -> TiDB:Thu May 16 09:38:57 UTC 2024 at 10.90.1.153
  Worker 2 -> TiDB:Thu May 16 09:38:57 UTC 2024 at 10.90.1.153
  Worker 1 -> TiDB:Thu May 16 09:38:57 UTC 2024 at 10.90.1.153
  Worker 3 -> TiDB:Thu May 16 09:38:57 UTC 2024 at 10.90.1.153
  Worker 4 -> TiDB:Thu May 16 09:38:58 UTC 2024 at 10.90.1.153
  Worker 2 -> TiDB:Thu May 16 09:38:58 UTC 2024 at 10.90.1.153
  ...
  ```

### 手順 3. クエリ作業を実行するスクリプトを実行します

+ [ターミナル 3](ssh://monitor1-ssh#3) で、クエリ作業を実行するスクリプトを確認します。各 TiDB サーバーインスタンスが処理したリクエスト数を確認するためにスクリプトを実行します。作業を実行し続け、次のステップに進みます。

  ```bash
  qdb(){
  mysql -h ${HOST_TIPROXY1_PRIVATE_IP} -P 6000 -uroot --connect-timeout 1 2>/dev/null << EOF
   SELECT tidb_instance, COUNT(event) FROM test.dummy GROUP BY tidb_instance ORDER BY tidb_instance;
  EOF
  }

  query(){
   echo;
   date;
   qdb
   sleep 2;
  }

  while true; do
   query;
  done;
  ```

  ```output
  Thu May 16 09:42:20 UTC 2024
  tidb_instance	COUNT(event)
  10.90.1.124:10080	466
  10.90.2.122:10080	466

  Thu May 16 09:42:22 UTC 2024
  tidb_instance	COUNT(event)
  10.90.1.124:10080	470
  10.90.2.122:10080	470

  Thu May 16 09:42:24 UTC 2024
  tidb_instance	COUNT(event)
  10.90.1.124:10080	474
  10.90.2.122:10080	474

  ...
  ```
