TiDB 和 MySQL 在性能优化上的区别主要体现在架构设计、扩展方式、优化手段和适用场景等方面。以下是主要区别的总结:
单机架构(或主从复制架构),存储和计算耦合。
-依赖本地磁盘或集中式存储(如 SAN/NAS)。
-优化集中在单机资源(CPU、内存、磁盘 I/O)的合理利用。
-分布式架构,存储(TiKV)、计算(TiDB Server)、调度(PD)分离。
-数据自动分片(Region)并分布式存储,支持水平扩展。
-优化需关注 **跨节点通信**、**负载均衡**、**热点数据分布** 等问题。
垂直扩展:通过升级单机硬件(CPU、内存、SSD)提升性能。
水平扩展:需手动分库分表(如 Sharding),复杂度高,且对业务侵入性强。
自动水平扩展:通过添加 TiKV/TiDB 节点实现存储和计算的线性扩展。
无需手动分片,优化重点在于 **Region 分布均匀性** 和 **调度策略**。
MySQL:
依赖 B+ 树索引,需合理设计索引(覆盖索引、最左前缀匹配等)。
通过 `EXPLAIN` 分析查询计划,优化慢查询。
TiDB:
支持类似 MySQL 的索引机制,但底层存储为 LSM-Tree(TiKV)。
-需注意 **索引热点问题**(如单调递增主键可能导致写入热点)。
-使用 `EXPLAIN ANALYZE` 分析分布式查询计划,关注算子是否下推到存储层(TiKV)。
MySQL:
通过调整事务隔离级别(如 `READ COMMITTED`)、减少锁竞争(行锁、间隙锁)优化事务性能。
TiDB:
使用 Percolator 模型实现分布式事务,需避免 **大事务**(默认单事务限制为 100MB)。
优化手段包括:减少事务范围、使用异步提交(Async Commit)或一阶段提交(1PC)。
MySQL:
调整 InnoDB 缓冲池(`innodb_buffer_pool_size`)、日志文件大小(`innodb_log_file_size`)等。
TiDB:
调整 TiKV 的 RocksDB 参数(Block Cache、Write Buffer 大小)。
优化 Region 大小(默认 96MB),避免频繁分裂或合并。
监控 PD 调度策略(如 Balance Region、Balance Leader)。
MySQL:
避免全表扫描,优化 JOIN 顺序,使用查询缓存(Query Cache,在 8.0 后弃用)。
TiDB:
利用 **MPP 架构**(TiFlash)加速分析型查询。
避免跨 Region 的分布式 JOIN,优先使用过滤条件缩小数据范围。
统计信息需定期更新(`ANALYZE TABLE`),优化器依赖统计信息生成分布式执行计划。
(1) 高并发写入
MySQL:
主从延迟、锁竞争(如自增主键竞争)。
TiDB:
写入热点(如单调递增主键集中在单个 Region)。
优化方法:使用 `SHARD_ROW_ID_BITS` 或随机散列主键。
(2) 复杂查询
MySQL:
单机资源瓶颈(CPU/内存不足)。
TiDB:
网络开销(跨节点数据传输)、计算下推不充分。
优化方法:使用 TiFlash 列存加速分析查询。
### **5. 工具与监控**
- **MySQL**:
- 慢查询日志、Performance Schema、`SHOW PROCESSLIST`。
- 工具:Percona Toolkit、pt-query-digest。
- **TiDB**:
- 内置监控(Prometheus/Grafana),关注 **Duration**、**Region 健康度**、**TiKV 线程 CPU**。
- 工具:TiDB Dashboard、TiUP、PingCAP Clinic。
6. 适用场景
MySQL:
中小规模 OLTP,单机或简单主从架构。
适合事务强一致、低延迟的读写场景。
TiDB:
海量数据(TB/PB 级)、高并发 OLTP + OLAP 混合负载。
适合需要弹性扩展、高可用、实时分析的场景。
MySQL的优化核心是单机资源最大化利用,通过索引、事务、配置调优实现。
TiDB的优化核心是分布式系统协同,需关注数据分布、调度策略、网络开销,并利用分布式计算能力(如 MPP)。
实际优化时,需结合业务场景(OLTP 或 OLAP)、数据规模、分布式特性综合权衡。