# 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 服务器会解析和编译它。在编译过程中，它会优化并生成执行计划。这些任务由解析器和编译器模块完成。

关系型和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相关章节中解释。
