作者: ShawnYan
前情回顾
在前两节中,我们共同“回忆”了 TiDB v1/v2 的相关内容,包括如何手动搭建 TiDB 和使用 TiDB Ansible 搭建 TiDB。
- 星辰考古:TiDB v1.0 再回首
- 星辰考古:TiDB v2.x 回忆杀
本节将继续讨论 TiDB v3,在 TiDB 3.x 中处理 AP 业务的主力仍然是 TiSpark,不过 TiFlash 已经初现。
TiDB 3.x 整体架构图再“升级”。
TiDB v3 时代,TiDB 已在 500+ 用户的生产环境中长期稳定运行,涵盖金融、保险、制造,互联网,游戏等领域,涉及交易、数据中台、历史库等多个业务场景。
如今,TiDB 现已被 3000 多家不同行业的领先企业应用在实际生产环境。
TiDB 3.x 时间线
TiDB 2.x 的时间线是 2018.4--2019.12,TiDB 3.x 的时间线是 2019.1--2020.12。
- 2019-01-19,TiDB 发布 3.0 Beta 版。相比 v2.1 版本,该版本对系统稳定性、优化器、统计信息以及执行引擎做了很多改进。
- 2019-06-28,TiDB 发布 3.0 GA 版本。相比于 v2.1,v3.0 版本在以下方面有重要改进:
- 稳定性方面,显著提升了大规模集群的稳定性,集群支持 150+ 存储节点,300+TB 存储容量长期稳定运行。
- 优化 Raft 副本之间的心跳机制,按照 Region 的活跃程度调整心跳频率,减小冷数据对集群的负担。
- 热点调度策略支持更多参数配置,采用更高优先级,并提升热点调度的准确性。
- 优化 PD 调度流程,提供调度限流机制,提升系统稳定性。
- 新增分布式 GC 功能,提升 GC 的性能,降低大集群 GC 时间,提升系统稳定性。
- 易用性方面有显著的提升,降低用户运维成本,例如:标准化慢查询日志,制定日志文件输出规范,新增
EXPLAIN ANALYZE
,SQL Trace 功能方便排查问题等。 - 性能方面,与 2.1 相比,TPC-C 性能提升约 4.5 倍,Sysbench 性能提升约 1.5 倍。因支持 View,TPC-H 50G Q15 可正常运行。
- 新功能方面增加了窗口函数、视图(实验特性)、分区表、插件系统、悲观锁(实验特性)、SQL Plan Management 等特性。
- 2019-12-31,TiDB 3.0.8 发布,2019 年 TiDB 3.0 系列共发版 14 次。
- 2020-04-16,TiDB 3.1 GA。
- 2020-06-04,TiDB 3.1.2 发布,这是 TiDB 3.1 系列的最后一个小版本。
- 2020-12-25,TiDB 3.0.20 发布,这是 TiDB 3.0 系列的最后一个小版本。
(TiDB 3.0 与 2.1 的性能测试对比图)
TiDB 3.x 新特性
TiDB 3.x 历经两年打磨,产品性能和质量都改进很多,不过由于篇幅原因,这里不再列举优化项和修复项。
下面只摘录了部分重要的新特性,以供参考。
TiDB
- 支持 View #8757
- 支持 Window Function,支持所有 MySQL 8.0 中的窗口函数 #8630
- 支持 RANGE/HASH PARTITION
- 新增
SPLIT PARTITION TABLE
语法,支持分区表切分 Region 功能 #13929 - 新增分区表自动更新统计信息的功能 #14566
- 支持字符集从 utf8 转换到 utf8mb4 的功能
- 默认字符集从 utf8 变为 utf8mb4 #7965
- 新增
server-version
配置项来控制修改 TiDB server 版本的功能 #13906 - 支持
admin show next_row_id
,方便获取下一行 ID #8242 - 支持用
_tidb_rowid
做点查 #13416 - 在
information_schema.processlist
表中支持显示内存使用信息 #12801 - 支持悲观事务模式(实验特性) #10297
- 提高在悲观事务和乐观事务冲突情况下的性能 #10881
- 新增基于角色的权限访问控制功能(RBAC)(实验特性)
批注
- 关于 RBAC 的相关内容,请访问官方文档: https://docs.pingcap.com/zh/tidb/stable/role-based-access-control
- 为提升系统安全性,企业版新增特性:IP 白名单功能;Audit log 功能;加密存储。
PD
- 新增从单个节点重建集群的功能
- 将 Region 元信息从 etcd 移到 go-leveldb 存储引擎,解决大规模集群 etcd 存储瓶颈问题 #1237
- 将 etcd 版本升级到 3.4.3 稳定版本,注意升级后只能通过 pd-recover 工具降级 #2058
- 更改 PD 的 copyright 信息 PingCAP, Inc 为 TiKV Project Authors #2777
批注:
查询 etcd 的版本:
TiKV
- 引入了新的存储引擎 Titan #3985
- 统计信息中新增对 Blob 文件大小的统计 #5060
- 将内存分配库的默认值由
tikv_alloc/default
改成 jemalloc #6206
TiFlash
- 初始版本 (3.1.0-beta.2)
参数、配置项
- 新增 Database 维度的 QPS 监控项, 可以通过配置项
record-db-qps
开启 #9151 - 新增变量
tidb_allow_remove_auto_inc
,默认禁止删除列AUTO INCREMENT
属性 #12145
监控
- 新增
/debug/zip
HTTP 接口,获取 TiDB 实例的信息,方便排查问题 - 为
/mvcc/key/{db}/{table}/{handle}
API 的返回结果添加 Region ID 信息 #11557 - 支持通过
/info/all
接口获取所有 TiDB 节点的 binlog 状态 #13187 - 新增 TiKV summary 监控面板,方便查看集群状态
- 新增 TiKV trouble_shooting 监控面板,删除重复项,方便排查问题
- 新增 TiKV details 监控面板,方便调试排查问题
- 新增 BR 组件的 Grafana 监控 #1093
TiDB Ansible
- 修改操作系统版本限制,仅支持 CentOS 7.0 及以上,Red Hat 7.0 及以上版本的操作系统 #733
- 优化
table-regions.py
脚本,按表显示 leader 分布 #739
批注:
对于生产环境的操作系统的版本选择,推荐 RHEL / CentOS 7.9 或者 RHEL / Rocky Linux 8.10。 测试环境可以选择 RHEL / Rocky Linux 9.4, TiDB 都是支持的。
对于 TiDB v3 系列,当时仍可以用相对“成熟”的 TiDB Ansible 来进行部署,然鹅,TiDB Ansible v3.0.20 也是最后一个版本,后面就归档弃用了。
TiDB 3.x 安装部署
同一时期,TiUP 神器“横空出世”,之前介绍过 TiUP 相关内容,详情戳这里:
- 震惊!数据库小白装国产数据库只需10分钟!
- TiDB 7.x 源码编译之 TiUP 篇
- TiUP:TiDBAer 必备利器
这里我们使用 TiUP 来部署 TiDB v3.0.20。
查看基础信息。
(皮一下,这里用了系统自带的 MariaDB 客户端连接了兼容 MySQL 的 TiDB 数据库)
部分差异
TiDB 每个版本都包含了大量的新特性和优化点,这里无法面面俱到,只分享一些重要的差异,抛砖引玉。
ROOT 权限
TiDB v3.0.20 默认 root 用户的权限有 25 项,而 v8.1.0 中 root 用户的权限有 31 项。
I_S.processlist 表结构
TiDB v3 支持在 processlist
表显示内存使用情况。而在 TiDB v8 中我们可以看到更多信息,增加了 DIGEST
,DISK
,RESOURCE_GROUP
,SESSION_ALIAS
等字段。
全局变量
TiDB v3.0.20 共有 531 个全局变量,其中以 tidb_
开头的变量 42 个。
而 TiDB v8.1.0 中,共有 655 个全局变量,其中以 tidb_
开头的变量 271 个,以 pd_
开头的变量 1 个,以 tikv_
开头的变量 1 个,以 tiflash_%
开头的变量 7 个。
配置项
对比 TiDB v3.0.20 和 v2.1.19 配置项的差异变化如下。
TiDB 3.x 专栏文章
19年6月,TUG 正式成立。
19年7月,TiDB 社区论坛上线。
22年2月,TiDB 社区专栏板块上线。
我从 TiDB 专栏的 1300 余篇文章中找出了几篇 TiDB 3.x 时期的精品文章分享给大家。
- 19.5.30, PingCAP 故事|势高,则围广:TiDB 的架构演进哲学 (https://tidb.net/blog/80c688a5)
- 20.4.14, 知乎已读服务的前世今生与未来 (https://tidb.net/blog/6efdbb9f)
- 20.4.14, TiDB 3.0:窗口函数初体验 (https://tidb.net/blog/a523b8ec)
- 20.4.14, TiDB 3.0.5 性能压测 (https://tidb.net/blog/cb1c5ea3)
- 21.1.18, 继续,来看看 TiDB 3.0 在 AP 方面的进步 (https://tidb.net/blog/fcde3ba6)
- 21.8.25, 数据总量 40 亿+,报表分析数据 10 亿+,TiDB 在中通的落地与进化 (https://tidb.net/blog/3da1aed9)
- 21.9.16, 贝壳金服 TiDB 在线跨机房迁移实践 (https://tidb.net/blog/7c3878a1)
- 21.9.22, TiDB 分区表优化实践 (https://tidb.net/blog/0279fbc9)
- 21.11.19, TiDB和MySQL的锁一些分析比对 (https://tidb.net/blog/1c1a2ab7)
- 22.12.28, 为什么我们要从MySQL迁移到TiDB? (https://tidb.net/blog/1577d0b0)
- 23.12.26, 一个 39.3T 的集群从TiDB v3.1.0迁移升级到 TiDB v7.1.2 的实践 (https://tidb.net/blog/0629c299)
未完待续
在 TiDB 3.x 时期(2019~2020)还有几件重要的事情:
- 19年9月,一体化数据同步平台 TiDB Data Migration 1.0 GA 发版
- 19年10月,第三届 TiDB Hackathon 成功举办。
(1st place of TiDB Hackathon 2019, project: Unified Thread Pool)
- 20年3月,TiDB 源码贡献者突破 400 人。
(TiDB contributor growth)
“In open source, we feel strongly that to really do something well, you have to get a lot of people involved.”
如今,TiDB 及其生态项目累计超过 2267 位开源贡献者,覆盖 49 个国家和地区,是全球基础架构领域的顶级开源项目。
- 20年5月,TiDB 4.0 GA 发版。
下期,我们继续讨论 TiDB v4。
-- / END / --
👉 这里可以找到我
- 微信公众号:@少安事务所 (mysqloffice)
- ITPUB 博客:@少安事务所
- 墨天轮:@严少安
- PGFans: @严少安
- TiDB 专栏:@ShawnYan
如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『转发』吧,感谢!(๑˃̵ᴗ˂̵)