# TiDB サーバー

+ クライアント接続の処理
+ SQL文の解析とコンパイル
+ リレーショナルデータとKVデータの変換
+ SQL文の実行
+ オンラインDDL実行
+ ガベージコレクション（GC）

```
ID                Role    Host        Ports        OS/Arch       Status   ~!@Data Dir@!~    Deploy Dir
--                ----    ----        -----        -------       ------   --------    ----------
...
10.0.0.158:4000   tidb    10.0.0.158  4000/10080   linux/x86_64  Up       ~!@-@!~           /tidb-deploy/tidb-4000
...
```

![`smart`](TiDBServerSimple_aa_001_20220506.png)

------------------------------------------------------------------------
TiDBサーバー自体は、SQLコンピューティングエンジンにのみ責任があり、データを保存しないため、TiDBサーバーはステートレスです。大量の同時接続に直面した場合、TiDBサーバーを追加して負荷分散を実現し、同時処理能力を向上させることができます。

クライアント接続の処理
- ユーザーはユーザー名とパスワードで認証され、接続されたユーザーは以降認可されます。これらのタスクは主にプロトコルレイヤーモジュールによって行われます。

SQL文の解析とコンパイル
- SQL文を受け取った後、TiDBサーバーはそれを解析してコンパイルします。コンパイルプロセスの間、それは最適化して実行計画を生成します。これらのタスクはParserとCompilerモジュールによって行われます。

リレーショナルデータとKVデータの変換
- データはキー・バリュー（KV）の形式でTiKVに格納されるため、リレーショナルデータ（テーブル、インデックス、行）とKV構造の間に大きな違いがあります。TiDBはリレーショナルデータとKVストレージの間の変換を担当します。

SQL文の実行
- コンパイルされた実行計画によると、TiKVでバッチ処理されます。データは`Executor`モジュールと`DistSQL`モジュールによって読み込まれ、トランザクション関連の操作は`Transaction`モジュールと`KV`モジュールによって完了されます。

オンラインDDLの実行
- TiDBでは、DDL操作はテーブルをロックしません。それらは`Schema Load`モジュール、`Worker`モジュール、および`Start Job`モジュールによって行われます。TiDBは、メタデータオブジェクトを変更するためにオンライン非同期スキーマ変更アルゴリズムを使用します。トランザクションが実行されると、トランザクション開始時に対応するメタデータスナップショットを取得します。メタデータがトランザクション中に変更された場合、データ一貫性を確保するために、TiDBは`Information schema is changed error`を返してトランザクションがコミットに失敗します。別のトレーニングコース：`TiDB SQL for Developers`では、オンラインDDLとどのようにこの状況を処理してDDLとDMLを同時にスムーズに実行するかについての詳細な情報を取得できます。または、`YouTube PingCAP Learning`チャンネル`https://www.youtube.com/watch?v=d8jAtSzI6GY`でこのビデオを見るだけでもかまいません。

ガベージコレクション
- `GC`モジュールは、期限切れになった古いバージョンからのスペースの回復を担当しており、この部分はTiKV関連の章で説明されます。
