星辰考古:TiDB v4.0 进化前夜
前情回顾
在前面的章节中,我们共同梳理了 TiDB v1/v2/v3 的相关内容。
本节将继续讨论 TiDB v4.0 大版本,在该版本中 TiDB 集群架构没有太大变化,不过 TiFlash 重要程度进一步提升,下图为 TiDB HTAP 形态架构,其中包含 TiFlash 节点。
TiDB v4 时间线
TiDB v3.x 的时间线是 2019.1–2020.12,TiDB v4.x 的时间线来到了 2020.1–2021.12。
2020-01-17,TiDB 4.0.0-beta 发布。
2020-05-28,TiDB 4.0 GA。TiDB v4.0 在稳定性、易用性、性能、安全和功能方面进行了大量的改进。
2020-12-21,TiDB 4.0.9 发布。
2021-01-15,TiDB 4.0.10 发布。
2021-12-17,TiDB 4.0.16 发布,这是 TiDB v4 系列的最后一个小版本。
20 年共发布 16 个小版本,21 年共发布 7 个小版本。
(TiDB v4.0 与 v3.0 的 TPC-C 性能测试对比图)
(TiDB v4.0 与 v3.0 的 TPC-H 性能测试对比图)
TiDB v4 新特性
TiDB v4 引入 70 余项重要新特性,以下是几项关键功能:
热点调度支持更多维度。热点调度在决策时,除了根据写入 / 读取流量作为调度依据外,新引入 key 的维度。可以很大程度改善原有单一维度决策造成的 CPU 资源利用率不均衡的问题。
TiFlash 是 TiDB 为完善 Realtime HTAP 形态引入的关键组件,TiFlash 通过 Multi-Raft Learner 协议实时从 TiKV 复制数据,确保行存储引擎 TiKV 和列存储引擎 TiFlash 之间的数据强一致。TiKV、TiFlash 可按需部署在不同的机器,解决 HTAP 资源隔离的问题。
注:TiFlash 是 TiDB 生态中的核心组件,从 TiDB 3.1 引入,于 22.04.01 正式开源,随 4.0 正式 GA。
TiDB Dashboard:DBA 通过 TiDB Dashboard UI 可以快速了解集群的集群拓扑、配置信息、日志信息、硬件信息、操作系统信息、慢查询信息、SQL 访问信息、诊断报告信息等,帮助 DBA 通过 SQL 快速了解、分析系统的各项指标。
TiDB 热力图,来源:https://asktug.com/t/topic/813071
TiUP 是 4.0 版本中新推出的包管理器的工具,主要用于管理 TiDB 生态内的所有的包,提供组件管理、本地部署、集群管理、镜像管理、离线部署、性能测试等功能,将安装、部署、运维 TiDB 工具化,提升 DBA 部署、运维 TiDB 的效率。
悲观事务正式 GA 并作为默认事务模式提供,支持 Read Committed 隔离级别以及 SELECT FOR UPDATE NOWAIT 语法。
支持大事务,最大事务限制由 100 MB 提升到了 10 GB,同时支持乐观事务和悲观事务。
TiCDC 从 v4.0.6 起成为正式功能,可用于生产环境。TiCDC 是一款通过拉取 TiKV 变更日志实现的 TiDB 增量数据同步工具,具有将数据还原到与上游任意 TSO 一致状态的能力,同时提供开放数据协议 (TiCDC Open Protocol),支持其他系统订阅数据变更。
图为 TiCDC 架构图
图为 TiCDC 集群及节点内部组件的设计图
下面按 TiDB, TiKV, PD, TiFlash, TiCDC 组件分别摘录了部分重要新特性,以供参考。
TiDB
新增 SQL Binding 的自动捕获和自动演进功能 #13199 #12434
information_schema.tables
表新增TIDB_ROW_ID_SHARDING_INFO
列,输出列的 RowID 打散相关的信息(例如:表 A 指定SHARD_ROW_ID_BITS
,该列的值为 “SHARD_BITS={bit_number}“) #13418支持在
CREATE TABLE
语句中指定 auto_random 选项 #16813AUTO RANDOM 被移出实验特性并正式 GA (TiDB 4.0.3)
支持将列属性 AUTO_INCREMENT 变更为 AUTO_RANDOM #24608
新增
DDLJobs
系统表,用于查询 DDL 任务详细信息 #14837新增 Sequence 功能 #14731 #14589 #14674 #14442
新增大小写不敏感的排序规则,用户可在新集群上启用 utf8mb4_general_ci 和 utf8_general_ci #33
支持 uft8_unicode_ci 和 utf8mb4_unicode_ci 排序规则 #22558
增强
RECOVER TABLE
语法,现在该语法支持恢复被 Truncate 的表 #15398新增
Flashback
命令,支持恢复被 Truncate 的表。新增 SQL 语法 BACKUP/RESTORE 来进行数据备份恢复 #15274 #16960
支持
show table partition regions
语法 #17294支持新增分区时自动分裂 Region 的功能 #17665
新增动态修改、更新配置项的功能,配置项由 PD 持久化存储 #14750 #14303 #14830
支持使用
SHOW CONFIG
语法显示 PD 和 TiKV 的配置 #16475支持
SET CONFIG
语句进行 PD/TiKV 节点配置修改 #16853新增系统自动根据负载均衡策略从不同角色上读取数据的功能,且新增
leader-and-follower
系统变量用于控制开启此功能 #14761默认打开
Coprocessor cache
#16710默认打开
tidb_allow_batch_cop
#18552默认打开执行信息的收集 #18518
支持会话和全局变量
sql_select_limit
#17604添加
txn-entry-size-limit
配置项,用于限制事务中单个 key-value 记录的大小 #21843在 v4.0 中将
tidb_multi_statement_mode
的默认值从 WARN 更改为 OFF。建议使用客户端库的多语句功能。#25749支持在 INSERT 语句中使用
MEMORY_QUOTA()
hint #18101支持在广播 Join 中使用外连接 #19664
对于自动提交语句的重试转换到悲观锁模式 #19796
使用标准错误替换 TiDB 中的错误码和错误信息 #19888
支持接受来自 MySQL 8.0 客户端的连接 #19959
Grafana 面板支持多集群 #22534
Grafana 升级到 v7.5.11 以解决安全漏洞
TiKV
升级 RocksDB 的版本到 6.4.6
新增从 Follower 副本读取数据的功能
支持将动态修改配置的结果持久化存储到硬盘 #6684
支持基于负载的 Region split #7623
为错误定义错误码 #8387
支持日志输出为 JSON 格式 #8382
注:TiDB 3.0.20 中内置 RocksDB v5.18.3,升级到 TiDB 4.0.16 后, RocksDB 版本升级到 v6.4.6。在作者的印象中,PingCAP 从不避讳使用了开源组件,如 RocksDB, etcd, ClickHouse 等。TiDB 源于开源,拥抱开源,贡献开源,海纳百川,与世界开发者协同科技创新。本文只讨论 TiDB 相关技术内容,就不提套壳、马甲、超过 100% 兼容之类的事情了。
PD
新增根据存储节点负载信息优化热点调度的功能
新增 Placement Rules 功能,通过组合不同的调度规则,精细控制任意一段数据的副本的数量、存放位置、存储主机类型、角色等信息
新增通过 UI 访问集群热点数据分布功能 #2086
member API 返回信息新增部署路径和组件版本信息 #2130
pd-ctl 新增 component 命令用于修改、查看组件配置信息 (experimental) #2092
支持将动态修改配置的结果持久化存储到硬盘 #2153
移除 config manager 以使其它组件自行控制它们的配置 #2349
支持 JSON 格式日志 #2565
PD 客户端中添加
GetAllMembers
函数,用于获取 PD 成员信息 #2980添加了配置项
enable-redact-log
,可以设置将日志中的用户数据脱敏 #3266
TiFlash
存储引擎中的粗糙索引默认开启
支持运行在 ARM 架构
在 TiFlash 中支持在广播 Join 中使用外连接
支持
CAST
函数下推添加了配置项
security.redact_info_log
,可以设置将日志中的用户数据脱敏新增工具用于检测当前
tiflash replica
的状态
TiCDC
自 v4.0.6 起,TiCDC 成为正式功能,可用于生产环境
支持通过
cdc cli
来管理同步任务 (changefeed) #546支持输出 maxwell 格式的数据 #869
为 maxwell 协议默认开启 old value 特性 #1144
支持快照级别一致性复制 #932
默认启用 unified sorter 特性 #1230
在 capture 元信息中添加版本信息和在 changefeed 元信息中创建该 changefeed 的 CLI 版本 #1342
若任务的暂停同步时间超过 1 天,再次启动该任务时需要二次确认 #1497
遇到无法恢复的 DML 错误立即退出,不进行重试 #1724
为 EtcdWorker 添加 tick 频率限制,防止 PD 的 etcd 写入次数过于频繁影响 PD 服务 #3112
TiDB v4 兼容性变化
TiDB
修改配置项
log.enable-slow-log
的类型,由整数型改为布尔类型 #14864调整修改系统表
mysql.user
中password
列名为authentication_string
,与 MySQL 5.7 保持一致(该变动会导致升级后不能回退) #14598txn-total-size-limit
配置项的默认值由 1GB 调整为 100MB #14522新增动态修改、更新配置项的功能,配置项由 PD 持久化存储 #14750 #14303 #14830
当
tidb-server
状态端口被占用时由原来打印一条告警日志改成拒绝启动 #15177去掉了特别为开启 Binlog 时定义的事务容量上限 (100 MB),现在事务的容量上限统一为 10 GB,但若开启 Binlog 且下游是 Kafka,由于 Kafka 消息大小的限制是 1 GB,请根据情况调整
txn-total-size-limit
配置参数 #16941移除慢查询日志和 statement summary 表中的敏感信息 #18130
禁止在 sequence 缓存中出现负数 #18103
CLUSTER_INFO
表中不再显示 tombstone 状态的 TiKV 和 TiFlash 节点 #17953诊断规则
current-load
变更为node-check
#17660修改
drop partition
和truncate partition
的参数 #18930为
add partition
操作添加状态检查 #18865废弃配置文件中
enable-streaming
配置项 #21055以下 Bug 修复涉及执行结果变化,可能引起兼容性变化:
修复了
greatest(datetime) union null
返回空字符串的问题 #26532修复了
having
可能执行错误的问题 #26496修复了当
between
表达式两边的 collation 不一致会导致查询结果错误的问题 #27146修复了
extract
函数的参数是负数时查询结果错误的问题 #27236修复了当
group_concat
函数包含非 bin 的 collation 时查询结果错误的问题 #27429修复将 Apply 算子转为 Join 时漏掉列信息的问题 #27233
修复将非法字符串转为 DATE 类型时的非预期行为 #26762
修复开启 New Collation 时多列的
count distinct
返回结果错误的问题 #27091
TiKV
新增
readpool.unify-read-pool
配置项,默认值为 True,用于控制点查是否共用 Coprocessor 的处理线程调整
unify-read-pool
配置项的方式,仅在新部署的集群时默认启用,旧集群保持原来的方式 #7059默认关闭 hibernate region #7618
将加密相关的配置移到 security 分类下,即调整配置项
[encryption]
为[security.encryption]
#7810减少开启加密时的 I/O 开销和锁冲突。该修改向下不兼容。如果需要降级至 v4.0.9 以下,需要将
security.encryption.enable-file-dictionary-log
配置为false
,并在降级前重启 #9195在 v4.0.16 以前,当把一个非法的 UTF-8 字符串转换为 Real 类型时会直接报错。自 v4.0.16 起,TiDB 会依照该字符串中的合法 UTF-8 前缀进行转换 #11466
注:关于 Unnify Read Pool 的内容,我们在上文 星辰考古:TiDB v3.x 忆水木 的文末有所提及,细心的小伙伴可能已经注意到了。这里再推荐一篇文章:TiDB 4.0 新 Feature 原理及实践:统一读线程池 https://tidb.net/blog/56f2a0cd
PD
持久化
store-limit
配置项,弃用store-balance-rate
配置 #2557
其他
oom-action
参数设置为 cancel 时,当查询语句触发 OOM 阈值后会被 kill 掉,升级到 4.0 版本后除了 select 语句,还可能 kill 掉 insert/update/delete 等 DML 语句。4.0 版本增加了 rename 时对表名长度的检查,长度限制为 64 个字符。升级后 rename 后的表名长度超过这个限制会报错,3.0 及之前的版本则不会报错。
4.0 版本增加了对分区表的分区名长度的检查,长度限制为 64 个字符。升级后,当你创建和修改分区表时,如果分区名长度超过这个限制会报错,3.0 及之前的版本则不会报错。
4.0 版本对 explain 执行计划的输出格式做了改进,需要注意是否有针对 explain 制订了自动化的分析程序。
4.0 版本支持 Read Committed 隔离级别。升级到 4.0 后,在悲观事务里隔离级别设置为 READ-COMMITTED 会生效,3.0 及之前的版本则不会生效。
4.0 版本执行
alter reorganize partition
会报错,之前的版本则不会报错,只是语法上支持没有实际效果。4.0 版本创建
linear hash partition
和 subpartition 分区表时实际不生效,会转换为普通表,之前的版本则转换为普通分区表。
TiDB 社区互助升级活动
好消息!!!
TiDB 升级互助活动,延续到 9 月 30 日!由 20 位社区版主、资深布道师及官方技术支持组成的升级导师天团为你升级保驾护航!
详情戳这里: https://asktug.com/t/topic/1025499
推荐阅读:
TiDB 3.0.20 升级到 4.0.16
在上文中我们搭建了 TiDB 3.0.20 作为 PoC 环境,本文基于此环境升级到 4.0.16 版本。
注意事项
从 TiDB 3.0 开始已经支持使用 TiUP 管理集群,如果你还在使用 TiDB Ansible,需先使用 TiUP 纳管集群,参考
tiup cluster import
。TiDB 目前暂不支持版本降级或升级后回退。如需将 3.0 之前的版本升级到最新 LTS 版本,需先升级到 TiDB 4.0,再进行后续升级操作。
升级前,需确认集群中没有正在运行的 DDL 操作,且升级过程中,也要避免 DDL 请求。
TiDB 4.0 新增了排序规则支持框架,由参数
new_collations_enabled_on_first_bootstrap
控制,该参数默认关闭,但需注意,从 TiDB v6 开始该参数默认开启,更多内容可参考: TiDB 6.x 新特性解读 | Collation 规则
升级速览
升级前,检查集群状态。
在中控节点执行升级。
升级完成后,检查集群状态。
这里可以看到新增的 UI Dashboard 运行在 83 节点上。
连接 tidb-server 查看版本信息。
直观变化
默认 Schema 新增
METRICS_SCHEMA
。
它是基于 Prometheus 中 TiDB 监控指标的一组视图。每个表的 PromQL(Prometheus 查询语言)的源均可在 INFORMATION_SCHEMA.METRICS_TABLES
表中找到。
TiDB 状态端口输出信息增加。
ROOT 用户权限增加。
TiDB v3.0.20 中 ROOT 用户默认权限 25 项,升级后,TiDB v4.0.16 中有 28 项,新增三个权限。
TiDB v4 系列的新功能、兼容性变化介绍,以及升级演示就到这里了。
总结
依惯例,我们再看下 TiDB v4 时期(2020-2021) 的几件重要事情:
2020.03,教大家从零到一写分布式数据库的 Talent Plan Courses 正式发布
2020.05,电子书《TiDB in Action 4.0》由 102 作者在 48 小时内完稿并上线,目录:https://book.tidb.io/SUMMARY.html
2020.09,PingCAP 团队的论文《TiDB: A Raft-based HTAP Database 》入选 VLDB 2020 ,成为业界第一篇 Real-time HTAP 分布式数据库工业实现的论文
2020.10,TiDB 培训认证项目两周年,TiDB 4.0 PCTA/PCTP 认证项目上线
2020.11,完成 2.7 亿美元的 D 轮融资
2020.12,TiDB 通过信通院分布式数据库性能与基础能力两项评测
2020.12,TiDB 社区 AskTUG 成员突破 5300 人,27 人获得 MVA 荣誉称号
2021.01,PingCAP 连续两年在 CNCF 全球贡献排行榜中位列中国企业第一位,全球排名第 6 位
2021.04,面向企业级核心场景的 TiDB 5.0 GA 发版
如果用一个词来总结 TiDB 1.0 到 4.0 的这 6 年,一定是“创业维艰”。国产基础软件领域,尤其是数据库赛道,国内长年使用国际领先的商业软件或国际通用的开源软件,在一片红海中从零全新打造国产数据库,推行商用,投产几百家客户的生产环境,并得到资本市场的认可,这是国产基础软件的骄傲。
【星辰考古】系列的四个章节就到这里。
下一期,我们开启新篇章,【星辰往事】,共同讨论 TiDB v5.x/v6.x 的内容。
素材来源
本文素材来自 PingCAP 官方网站及网络,包括但不局限于:
#tidb #pingcap #htap # 国产数据库
🌻 往期精彩 ▼
-- / END / –
👉 这里可以找到我
微信公众号:少安事务所
TiDB 专栏:@ShawnYan
如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!ღ( ´・ᴗ・` )~
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/c438cbd9e8624da1489119c8a】。文章转载请联系作者。
评论