《分布式数据库TiDB:原理、优化与架构设计》深入解析TiDB的设计理念及其背后的技术架构,无论是希望掌握TiDB技术的开发者,还是希望了解云原生数据库发展趋势的管理者,都能在本书中找到有价值的知识与见解。黄东旭、杜小勇、周傲英作序推荐。
在互联网、大数据与人工智能技术飞速发展的时代,数据的规模呈指数级增长,数据应用场景愈加复杂多样。面对挑战,数据库技术也在不断演进,呈现出新范式、新架构、新技术。云原生分布式数据库就是其中之一。TiDB数据库充分发挥了云基础设施的虚拟化、高可用性和弹性伸缩等优点,为用户提供了更为灵活与强大的数据管理能力,是云原生分布式数据库的杰出代表之一。
《分布式数据库TiDB:原理、优化与架构设计》结合TiDB数据库技术,深入浅出地探讨了分布式云原生数据库的基础理论,涵盖了存算分离、HTAP(混合事务和分析处理)、Serverless架构、多租户管理以及资源隔离与管控等新兴数据库应用场景。
阅读本书,读者将能够全面理解TiDB的设计理念及其背后的技术架构。特别是在第一部分运行原理中,作者深入剖析了TiDB的分布式系统设计理念和云原生技术的特点。通过对这部分内容的学习,读者不仅能够掌握TiDB的基本操作,还能进一步理解云原生数据库的优化艺术和架构特征。
一、分布式数据库TiDB运行原理深度剖析
1. TiDB架构全景图
TiDB Server:无状态SQL层,负责SQL解析、分布式执行计划生成,支持MySQL协议
TiKV:基于Raft的分布式KV存储引擎,实现数据强一致性与水平扩展
PD集群:全局元数据管理大脑,负责TSO分配、负载均衡调度
TiFlash:列存引擎支持实时HTAP,通过异步复制与智能路由实现OLAP加速
2. 关键技术解密
Raft协议:Multi-Raft机制实现Region级数据分片与故障自愈
分布式事务:Percolator模型保障跨节点ACID,采用乐观锁与两阶段提交
MVCC机制:混合逻辑时钟(HLC)实现多版本并发控制
Coprocessor:计算下推技术减少网络传输,提升复杂查询性能
二、性能优化实战方法论
1. 表结构设计黄金法则
聚簇索引表 vs 非聚簇索引表:写入热点与查询性能的平衡艺术
热点问题解决方案:
预分裂Region配合SHARD_ROW_ID_BITS分散写入
时间序列数据采用AUTO_RANDOM主键设计
利用PD监控面板定位Region读写压力
2. SQL优化四步法
-- 示例:索引合并优化
EXPLAIN SELECT * FROM orders
WHERE customer_id=1001 AND order_date>'2023-01-01';
/* 使用INDEX_MERGE(cust_idx, date_idx) */
执行计划解读:识别TableReader、IndexLookUp、HashJoin等关键算子
统计信息管理:动态采集+手动补全,解决数据倾斜导致的估算偏差
执行计划绑定:通过SQL Binding固化最优执行路径
3. 系统级调优关键指标
组件
|
核心监控项
|
优化方向
|
TiKV
|
grpc_avg > 50ms
|
调整raftstore.apply-pool-size
|
PD
|
region_heartbeat 延迟
|
提升region-schedule-limit
|
TiDB
|
expensive_query 告警
|
优化tidb_mem_quota_query配置
|
三、高可用架构设计指南
1. 多中心部署模式对比
同城三中心:Raft 5副本+Label调度,容忍单数据中心故障
两地三中心:异步复制+同步集群,实现跨地域容灾
混合云架构:TiCDC实现跨云实时同步,支持多云容灾
2. HTAP场景实践
列存加速:TiFlash通过DeltaTree引擎实现实时数据同步
MPP计算:利用tidb_enforce_mpp强制分布式并行执行
资源隔离:通过Resource Control限制OLAP查询资源占用
3. Serverless演进之路
动态资源池化:按负载自动扩缩计算节点
存储自动分层:热数据存TiKV,冷数据归档至对象存储
成本优化:基于请求单元(RU)的精细化计费模型
四、本书的结构与内容
本书以TiDB数据库为基础介绍分布式数据库的运行原理、性能优化和应用场景架构设计。首先,剖析分布式数据库的运行原理与架构;然后,阐述分布式数据库TiDB在表与索引的设计优化、SQL优化、系统级优化方面的方法论,通过融入多个有代表性的案例,帮助读者将方法论对应到生产实践中;最后,梳理场景选型和架构设计过程中读者应该掌握的主要知识点,并对一些分布式数据库的优势场景进行了详细介绍。
本书共15章,分为三部分,即运行原理、性能优化和应用场景架构设计。
第一部分(第1~5章)主要以TiDB数据库为基础,介绍分布式数据库的运行原理与设计思路。这部分内容是后续内容的基础,如果读者希望未来从事与分布式数据库相关的工作,则需要理解和掌握这部分内容。在这部分中读者会学习分布式计算引擎TiDB Server的架构与运行原理、最核心的分布式存储引擎TiKV集群的运行原理,以及有着TiDB数据库“大脑”之称的PD集群的核心架构与设计思想。这部分的核心知识包括:SQL解析流程、数据持久化、分布式数据库一致性协议Raft、MVCC、分布式事务、协同计算、列存储(简称为列存)等。只有掌握了这些内容,才能在后面的学习或工作中做到知其然知其所以然。
第二部分(第6~9章)介绍分布式数据库的性能优化,这是一个方法论与实战案例相结合的部分,读者可以再细分成两个方向来学习。首先是分布式数据库SQL的优化,我们将介绍如何在分布式数据库上写出避免读写热点并能够利用分布式数据库并行、MPP等优势的具有良好性能的SQL语句。其次我们重点介绍基于系统参数和性能监控的系统级别优化,讲解各个性能监控图与指标的含义和判断方法,并根据运行原理对相关参数进行解读,再以实战案例为切入点,总结出多套常用的系统优化方法论。
第三部分(第10~15章)介绍如何进行数据库架构设计和场景选型。针对架构设计中最为重要的高可用架构设计,我们详尽分析各种场景下TiDB分布式数据库的高可用特性和设计要点,包括同城三中心、同城两中心、同中心、两地三中心和异步复制等架构的优缺点等。针对场景选型,我们会从原理和应用两个层面对TiDB数据库的HTAP场景设计、Online DDL、资源管控、多租户和Serverless特性进行阐述。
上下滑动阅览
目 录
丛书序 中国工程院院士 郑纬民
推荐序一 PingCAP联合创始人兼CTO 黄东旭
推荐序二 CCF数据库专委原主任 杜小勇
推荐序三 CCF数据库专委主任 周傲英
前言
第一部分 运行原理
第1章 数据库架构概述 003
1.1 集中式数据库的特点 003
1.2 集中式数据库的典型架构 004
1.2.1 单体数据库架构 004
1.2.2 配合缓存机制的数据库架构 005
1.2.3 主从数据库架构 005
1.2.4 Shared-Nothing与Shared-Everything架构 006
1.2.5 交易型数据库+数据仓库 008
1.2.6 基于分表分库中间件的数据库集群架构 008
1.3 分布式数据库的特点 010
第2章 计算引擎TiDB Server的架构与原理 015
2.1 TiDB Server的架构 015
2.2 TiDB Server的主要功能 016
2.3 关系型数据与键值的转换 017
2.4 SQL读写相关模块 022
2.5 Online DDL相关模块 027
2.6 GC机制与相关模块 028
2.7 TiDB Server的缓存 030
2.7.1 TiDB Server缓存的组成结构 030
2.7.2 TiDB Server缓存管理 030
第3章 数据存储引擎TiKV的架构与原理 031
3.1 TiKV的特征 031
3.2 TiKV的架构和作用 032
3.3 RocksDB 033
3.3.1 RocksDB的作用与特点 033
3.3.2 RocksDB的写入与文件组织 034
3.3.3 RocksDB的查询 037
3.3.4 RocksDB的列族 038
3.4 Raft与Multi Raft 039
3.4.1 Raft—日志复制 041
3.4.2 Raft—leader选举 047
3.5 数据的写入 050
3.6 数据的读取—ReadIndex Read 051
3.7 数据的读取—Follower Read 055
3.8 MVCC 056
3.9 分布式事务 061
3.10 Coprocessor 069
第4章 TiDB的“大脑”——PD的架构与原理 073
4.1 PD的架构 073
4.2 PD的主要功能 074
4.3 路由功能 075
4.4 TSO分配 076
4.5 调度 080
4.5.1 为什么要调度 080
4.5.2 信息收集 081
4.5.3 生成调度 082
4.5.4 执行调度 082
第5章 列存与MPP计算引擎TiFlash的架构与原理 083
5.1 TiFlash的架构 083
5.2 TiFlash的关键特性 084
5.3 异步复制 085
5.4 一致性读取 086
5.5 智能选择 091
第二部分 性能优化
第6章 表与索引的设计优化 095
6.1 TiDB数据库中的两种表结构 095
6.1.1 聚簇索引表结构 095
6.1.2 非聚簇索引表结构 096
6.2 表与键值的映射方式 099
6.2.1 聚簇索引表中键值的映射方式 099
6.2.2 非聚簇索引表中键值的映射方式 100
6.3 TiDB中的索引结构 101
6.4 两种表结构的写入对比 103
6.4.1 非聚簇索引表的写入 103
6.4.2 聚簇索引表的写入 105
6.5 两种表结构的读取对比 107
6.5.1 非聚簇索引表的读取 107
6.5.2 聚簇索引表的读取 108
6.6 分布式数据库的热点问题 109
6.6.1 热点问题的形成原因 110
6.6.2 不同表结构的热点问题 111
6.6.3 热点的监控 113
6.6.4 热点的解决 116
6.7 表与索引的设计优化总结 127
第7章 SQL优化 129
7.1 TiDB数据库优化器的工作原理 129
7.1.1 TiDB数据库优化器的工作流程 129
7.1.2 预处理阶段之点查 130
7.1.3 预处理阶段中的构造初始逻辑执行计划 131
7.1.4 逻辑优化 132
7.1.5 物理优化 133
7.2 查看执行计划 136
7.3 数据查询优化之索引优化 138
7.3.1 点查Point_Get & Batch_Point_Get 139
7.3.2 IndexReader(索引读)+ IndexRangeScan(索引范围扫描) 140
7.3.3 IndexLookUp(回表索引读)+ IndexRangeScan(索引范围扫描)+
TableRowIDScan(根据键读取表数据) 141
7.3.4 IndexFullScan(索引全扫描) 144
7.3.5 TableReader(表扫描)+ TableFullScan(全表扫描) 146
7.3.6 IndexMerge(索引合并) 147
7.4 数据查询优化之聚合优化 150
7.4.1 HashAgg算子 150
7.4.2 StreamAgg算子 154
7.5 数据查询优化之表连接优化 157
7.5.1 Hash Join算子 157
7.5.2 Merge Join算子 160
7.5.3 Index Join算子 163
7.6 统计信息管理 166
7.6.1 统计信息的工作原理 167
7.6.2 统计信息的组成 172
7.6.3 统计信息监控 181
7.6.4 收集统计信息 183
7.6.5 统计信息的导入与导出 189
7.7 执行计划管理 190
7.7.1 Optimizer Hints 190
7.7.2 执行计划绑定 193
7.8 SQL优化最佳实践 197
第8章 性能监控与诊断 199
8.1 性能监控概述 199
8.2 TiDB数据库的监控体系 199
8.2.1 Prometheus + Grafana + Alertmanager 199
8.2.2 TiDB Dashboard 201
8.3 常见的性能诊断方法 202
8.3.1 定位慢查询 202
8.3.2 定位有问题的SQL 204
8.3.3 定位TiDB Server或TiKV上最耗时的SQL 206
8.3.4 定位热点问题 207
8.3.5 锁与事务的诊断 207
8.3.6 如何诊断整体读写性能问题 217
8.3.7 如何诊断问题出现在哪个组件 219
8.3.8 写入性能的诊断方法 224
8.3.9 大量查询超时的诊断方法 232
8.3.10 PD调度慢的诊断方法 238
8.3.11 PD频繁调度的诊断方法 239
第9章 系统变量与配置参数的优化 242
9.1 硬件与操作系统的配置优化 242
9.1.1 CPU配置 242
9.1.2 内存配置 243
9.1.3 NUMA绑定 244
9.1.4 IO配置 244
9.1.5 网络配置 245
9.1.6 操作系统配置 246
9.1.7 TiDB数据库部署检测 247
9.1.8 TiDB数据库的推荐硬件配置 248
9.1.9 TiDB数据库的混合部署 248
9.2 TiDB数据库的系统变量优化 249
9.2.1 并发控制 249
9.2.2 批处理 253
9.2.3 Backoff 254
9.2.4 执行计划缓存 254
9.3 TiDB Server的配置参数优化 256
9.3.1 资源分配 256
9.3.2 并行处理 258
9.4 TiKV集群的配置参数优化 259
9.4.1 TiKV写入配置参数的优化 259
9.4.2 TiKV读取配置参数的优化 263
9.4.3 RocksDB相关配置参数的优化 266
9.5 PD的配置参数优化 268
9.5.1 TiKV消费速度控制 270
9.5.2 存储空间阈值配置参数 270
9.5.3 leader-schedule-limit / region-schedule-limit 271
9.5.4 replica-schedule-limit 274
9.5.5 hot-region-schedule-limit 275
9.5.6 merge-schedule-limit 277
第三部分 应用场景架构设计
第10章 高可用架构设计 283
10.1 分布式数据库的高可用概述 283
10.2 TiDB数据库的高可用能力 284
10.2.1 数据的高可用性与一致性 284
10.2.2 自动故障转移能力 286
10.3 TiDB数据库常用的高可用架构 293
10.3.1 同城三中心架构 294
10.3.2 同城两中心架构 295
10.3.3 同中心架构 301
10.3.4 两地三中心架构 302
第11章 异步复制架构设计 309
11.1 TiDB数据库的异步复制 309
11.2 基于TiDB Binlog的异步复制架构 310
11.2.1 原理 310
11.2.2 Pump集群 311
11.2.3 Drainer 311
11.3 基于TiCDC的异步复制架构 312
11.3.1 原理 312
11.3.2 Changefeed与Task 313
11.3.3 适用场景 314
11.4 如何保证主从一致性读取和校验 315
第12章 HTAP场景架构设计 318
12.1 HTAP场景概述 318
12.2 TiDB数据库的HTAP场景架构 319
12.3 MPP架构 320
12.3.1 MPP架构的原理 321
12.3.2 MPP架构的相关算子 326
第13章 Online DDL 329
13.1 Online DDL概述 329
13.2 Online DDL状态 331
13.3 从Absent到Delete only 334
13.4 从Delete only到Write only 338
13.5 从Write only到Write Reorganization 344
13.6 从Write Reorganization到Public 348
13.7 如果没有Delete only状态 351
13.8 如果没有Write only状态 354
13.9 Online DDL真的不影响事务吗 358
13.10 事务不报错的解决方案 365
第14章 数据库整合与资源管控 369
14.1 数据库整合场景概述 369
14.2 传统多租户数据库架构 371
14.3 TiDB数据库的资源管控 372
14.4 TiDB数据库的差异化高可用等级 377
14.5 TiDB数据库的冷热分离实现 379
14.6 存算一体和存算分离架构在数据库整合中的差异 381
第15章 TiDB Serverless 384
15.1 数据库负载变化案例 384
15.2 数据量差异案例 386
15.3 TiDB Serverless的架构 388
15.4 TiDB Serverless的最佳适用场景 391
拓展阅读 393
五、本书特色
权威性:作者为TiDB数据库原厂系列课程与考试的开发者
系统性:包含原理篇、性能优化篇和应用场景架构设计篇三个篇章
专业性:详细分布式数据库的运行原理、SQL优化、系统优化和应用场景架构设计
可读性:内含大量插图、示例、伪代码,便于阅读理解
六、适读人群
高校学生和科研人员
技术开发人员
数据库行业从业人员
七、编写团队
董菲
包光磊
王岩广
黄偲韡
八、专家推荐
点击“阅读原文”,加入CCF。

