## モジュール 1︓既存の MySQL データベースボリュームに基づいて TiDB ストレージレイヤーのサイズを決定する

### 手順 1. Linux マシンにログインする

+ ここをクリック - [ターミナル1](ssh://monitor1-ssh#1) して演習マシンに接続された新しいターミナルを開き、MySQLサーバーに接続して`sbtest`データベースのデータサイズを取得するクエリを実行します。

### 手順 2. 既存の MySQL データベースのデータボリューム概要を取得する

+ MySQLサーバーノードに接続します。プロンプトが表示されたら、`yes`と答えます。

   ```bash
   ssh -i /home/ec2-user/.ssh/pe-class-key-${LAB:REGION_NAME}.pem rocky@${HOST_MYSQL1_PRIVATE_IP}
   ```

   ```output
   Last login: Thu Aug  1 11:58:47 2024 from 10.90.4.90
   [rocky@ip-10-90-1-235 ~]$
   ```

+ データベースユーザー`root`としてMySQLサーバーに接続します。

   ```bash
   mysql -h localhost -P 3306 -u root -pq1w2e3R4_ --connect-expired-password
   ```

   ```output
   mysql> 
   ```

+ `sbtest` データベース内のテーブルとデータを確認します。`sbtest` データベースは既に Sysbench によって初期化されています。

   ```sql
   SHOW DATABASES;
   ```

   ```output
   +--------------------+
   | Database           |
   +--------------------+
   | information_schema |
   | mysql              |
   | performance_schema |
   | sbtest             |
   | sys                |
   +--------------------+
   5 rows in set (0.01 sec)
   ```

   ```sql
   SHOW TABLES FROM sbtest;
   ```

   ```output
   +------------------+
   | Tables_in_sbtest |
   +------------------+
   | sbtest1          |
   | sbtest2          |
   | sbtest3          |
   | sbtest4          |
   | sbtest5          |
   | sbtest6          |
   +------------------+
   6 rows in set (0.00 sec)
   ```

+ テーブル `sbtest.sbtest1` のスキーマと行数を確認します。それは、`sbtest2`、`sbtest3`、`sbtest4`、`sbtest5`、および `sbtest6` と類似しています。これには約1分かかります。

   ```sql
   DESC sbtest.sbtest1;
   ```

   ```output
   +-------+-----------+------+-----+---------+----------------+
   | Field | Type      | Null | Key | Default | Extra          |
   +-------+-----------+------+-----+---------+----------------+
   | id    | int       | NO   | PRI | NULL    | auto_increment |
   | k     | int       | NO   | MUL | 0       |                |
   | c     | char(120) | NO   |     |         |                |
   | pad   | char(60)  | NO   |     |         |                |
   +-------+-----------+------+-----+---------+----------------+
   4 rows in set (0.00 sec)
   ```

   ```sql
   SELECT COUNT(id) FROM sbtest.sbtest1;
   ```

   ```output
   +-----------+
   | COUNT(id) |
   +-----------+
   |  10000000 |
   +-----------+
   1 row in set (32.49 sec)
   ```

+ データベース `sbtest` で `ANALYZE` コマンドを実行します。

   ```sql
   ANALYZE TABLE sbtest.sbtest1, sbtest.sbtest2, sbtest.sbtest3, sbtest.sbtest4, sbtest.sbtest5, sbtest.sbtest6;
   ```

   ```output
   +----------------+---------+----------+----------+
   | Table          | Op      | Msg_type | Msg_text |
   +----------------+---------+----------+----------+
   | sbtest.sbtest1 | analyze | status   | OK       |
   | sbtest.sbtest2 | analyze | status   | OK       |
   | sbtest.sbtest3 | analyze | status   | OK       |
   | sbtest.sbtest4 | analyze | status   | OK       |
   | sbtest.sbtest5 | analyze | status   | OK       |
   | sbtest.sbtest6 | analyze | status   | OK       |
   +----------------+---------+----------+----------+
   6 rows in set (40.95 sec)
   ```

+ データサイズを取得します。`sbtest`データベースのデータサイズは約`13.43GB`です。

   ```sql
   SELECT CONCAT(ROUND(SUM((data_length + index_length)/1024/1024/1024),2), 'GB') AS data
   FROM information_schema.tables
   WHERE table_schema='sbtest';
   ```

   ```output
   +---------+
   | data    |
   +---------+
   | 13.43GB |
   +---------+
   1 row in set (0.00 sec)
   ```

+ OSコマンドを使用してデータサイズを確認します。`sbtest`データベースの`datadir`パスを取得します。

   ```sql
   SHOW GLOBAL VARIABLES LIKE "%datadir%";
   ```

   ```output
   +---------------+-----------------+
   | Variable_name | Value           |
   +---------------+-----------------+
   | datadir       | /var/lib/mysql/ |
   +---------------+-----------------+
   1 row in set (0.00 sec)
   ```

+ OSプロンプトに戻ります。

   ```sql
   EXIT
   ```

   ```output
   bye
   ```

+ `sbtest` データベース内のテーブルのデータファイルを一覧表示します。データの総サイズは約 `14GB` であるはずです。

   ```bash
   sudo ls -lh /var/lib/mysql/sbtest
   ```

   ```output
   total 14G
   -rw-r-----. 1 mysql mysql 2.3G Jul 23 06:22 sbtest1.ibd
   -rw-r-----. 1 mysql mysql 2.3G Jul 23 06:22 sbtest2.ibd
   -rw-r-----. 1 mysql mysql 2.3G Jul 23 06:22 sbtest3.ibd
   -rw-r-----. 1 mysql mysql 2.3G Jul 23 06:22 sbtest4.ibd
   -rw-r-----. 1 mysql mysql 2.3G Jul 23 06:22 sbtest5.ibd
   -rw-r-----. 1 mysql mysql 2.3G Jul 23 06:22 sbtest6.ibd
   ```

### 手順 3. TiDB のストレージ容量を見積もる

+ MySQL データベース内の `sbtest` のサイズを SQL クエリの結果として使用します。これはサイズツールのデータ容量入力であり、`13.43GB` です。

+ サイズツールを使用して TiDB 内の `sbtest` データベースのストレージサイズを見積もります。

+ 次の公式を使用してデータサイズを計算します：`TiKV データ容量 = (既存データサイズ) x (圧縮率) x (TiKV内のレプリカ数)`。圧縮率は、異なるデータタイプやコンテンツによって変わります。圧縮率は事前に計算することはできず、データが実際に TiKV クラスタにインポートされた後にのみ決定されます。初めから 35% から 50% の範囲を考慮して使用することを忘れないでください。

  + 推定TiKVデータ容量 = `(既存データサイズ) x (圧縮率) x (TiKV内のレプリカ数)`
  + 推定TiKVデータ容量 = `(13.43 GB) x (35% ~ 50%) x (3)`
  + 推定TiKVデータ容量 = `14.10 GB ~ 20.15 GB`

+ TiKVに必要なデータストレージ容量は、14.10 GBから20.15 GBの間であると見積もられます。移行ステップの後で、この値を確認します。
