作者: ShawnYan 原文来源:https://tidb.net/blog/533da389
前情回顾
在前两节中,我们共同“回忆”了 TiDB v1/v2 的相关内容,包括如何手动搭建 TiDB 和使用 TiDB Ansible 搭建 TiDB。
本节将继续讨论 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 的版本:
curl -s http://localhost:2379/version
复制代码
# TiDB v3.0.20
{"etcdserver":"3.4.3","etcdcluster":"3.4.0"}
# TiDB v8.1.0
{"etcdserver":"3.4.31","etcdcluster":"3.4.0"}
复制代码
TiKV
TiFlash
参数、配置项
新增 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
批注:
对于生产环境的操作系统的版本选择,推荐 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 相关内容,详情戳这里:
这里我们使用 TiUP 来部署 TiDB v3.0.20。
[shawnyan@centos7 ~]$ tiup cluster list
Name User Version ...
---- ---- ------- ...
mytidb tidb v3.0.20 ...
复制代码
查看基础信息。
[shawnyan@centos7 ~]$ mysql -uroot -h127.0.0.1 -P4000
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25-TiDB-v3.0.20 MySQL Community Server (Apache License 2.0)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> select version(), tidb_version()\G
*************************** 1. row ***************************
version(): 5.7.25-TiDB-v3.0.20
tidb_version(): Release Version: v3.0.20
Git Commit Hash: 9ab0bbf9a012aaf8ae2d3e1eee2a321e03a0d5c1
Git Branch: heads/refs/tags/v3.0.20
UTC Build Time: 2020-12-25 04:33:21
GoVersion: go version go1.13 linux/amd64
Race Enabled: false
TiKV Min Version: v3.0.0-60965b006877ca7234adaced7890d7b029ed1306
Check Table Before Drop: false
1 row in set (0.001 sec)
复制代码
(皮一下,这里用了系统自带的 MariaDB 客户端连接了兼容 MySQL 的 TiDB 数据库)
$ curl -s localhost:10080/info | jq
{
"is_owner": true,
"version": "5.7.25-TiDB-v3.0.20",
"git_hash": "9ab0bbf9a012aaf8ae2d3e1eee2a321e03a0d5c1",
"ddl_id": "eba21fb1-4c74-4043-be6d-f082ed730794",
"ip": "127.0.0.1",
"listening_port": 4000,
"status_port": 10080,
"lease": "45s",
"binlog_status": "Off"
}
复制代码
TiDB 社区互助升级活动
本系列文章是为 TiDB 版本升级材料包的一部分,如果你对 TiDB 社区升级互助活动感兴趣,欢迎点击下面的链接报名。
https://asktug.com/t/topic/1025499
推荐阅读: 【收藏】TiDB 版本升级最全材料包 & 升级指南
部分差异
TiDB 每个版本都包含了大量的新特性和优化点,这里无法面面俱到,只分享一些重要的差异,抛砖引玉。
ROOT 权限
TiDB v3.0.20 默认 root 用户的权限有 25 项,而 v8.1.0 中 root 用户的权限有 31 项。
SELECT PRIVILEGE_TYPE
FROM information_schema.USER_PRIVILEGES
WHERE GRANTEE = "'root'@'%'";
复制代码
-- TiDB 3.0.20
Select
Insert
Update
Delete
Create
Drop
Process
References
Alter
Show Databases
Super
Execute
Index
Create User
Trigger
Create View
Show View
Create Role
Drop Role
CREATE TEMPORARY TABLES
LOCK TABLES
CREATE ROUTINE
ALTER ROUTINE
EVENT
SHUTDOWN
-- TiDB 8.1.0
CREATE TABLESPACE
RELOAD
FILE
CONFIG
REPLICATION CLIENT
REPLICATION SLAVE
复制代码
I_S.processlist 表结构
TiDB v3 支持在 processlist
表显示内存使用情况。而在 TiDB v8 中我们可以看到更多信息,增加了 DIGEST
,DISK
,RESOURCE_GROUP
,SESSION_ALIAS
等字段。
-- TiDB 3.0.20
MySQL [(none)]> select * from information_schema.processlist;
+------+------+-----------+------+---------+------+-------+----------------------------------------------+------+----------+
| ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO | MEM | TxnStart |
+------+------+-----------+------+---------+------+-------+----------------------------------------------+------+----------+
| 15 | root | 127.0.0.1 | NULL | Query | 0 | 2 | select * from information_schema.processlist | 0 | |
+------+------+-----------+------+---------+------+-------+----------------------------------------------+------+----------+
1 row in set (0.003 sec)
-- TiDB 8.1.0
MySQL [(none)]> select * from information_schema.processlist;
+------------+------+-----------------+------+---------+------+------------+--------...+----------...+------+------+----------+----------------+---------------+
| ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO ...| DIGEST ...| MEM | DISK | TxnStart | RESOURCE_GROUP | SESSION_ALIAS |
+------------+------+-----------------+------+---------+------+------------+--------...+----------...+------+------+----------+----------------+---------------+
| 3305111560 | root | 127.0.0.1:19364 | NULL | Query | 0 | autocommit | select ...| 4b5e7cdd5...| 0 | 0 | | default | |
+------------+------+-----------------+------+---------+------+------------+--------...+----------...+------+------+----------+----------------+---------------+
1 row in set (0.001 sec)
复制代码
全局变量
TiDB v3.0.20 共有 531 个全局变量,其中以 tidb_
开头的变量 42 个。
而 TiDB v8.1.0 中,共有 655 个全局变量,其中以 tidb_
开头的变量 271 个,以 pd_
开头的变量 1 个,以 tikv_
开头的变量 1 个,以 tiflash_%
开头的变量 7 个。
-- TiDB 3.0.20
MySQL [mysql]> select count(*) from mysql.GLOBAL_VARIABLES;
+----------+
| count(*) |
+----------+
| 531 |
+----------+
1 row in set (0.002 sec)
MySQL [(none)]> select * from mysql.GLOBAL_VARIABLES where VARIABLE_NAME like 'tidb_%';
+------------------------------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+------------------------------------+----------------+
| tidb_hash_join_concurrency | 5 |
| tidb_stmt_summary_history_size | 24 |
| tidb_txn_mode | pessimistic |
| tidb_stmt_summary_refresh_interval | 1800 |
| tidb_union_concurrency | 4 |
| tidb_hashagg_final_concurrency | 4 |
| tidb_build_stats_concurrency | 4 |
| tidb_opt_correlation_exp_factor | 1 |
| tidb_index_lookup_join_concurrency | 4 |
| tidb_enable_table_partition | auto |
| tidb_index_join_batch_size | 25000 |
| tidb_store_limit | 0 |
| tidb_init_chunk_size | 32 |
| tidb_opt_join_reorder_threshold | 0 |
| tidb_opt_correlation_threshold | 0.9 |
| tidb_hashagg_partial_concurrency | 4 |
| tidb_ddl_reorg_worker_cnt | 4 |
| tidb_max_delta_schema_count | 1024 |
| tidb_max_chunk_size | 1024 |
| tidb_projection_concurrency | 4 |
| tidb_disable_txn_auto_retry | 1 |
| tidb_constraint_check_in_place | 0 |
| tidb_auto_analyze_start_time | 00:00 +0000 |
| tidb_enable_cascades_planner | 0 |
| tidb_backoff_lock_fast | 100 |
| tidb_index_lookup_concurrency | 4 |
| tidb_enable_stmt_summary | 0 |
| tidb_auto_analyze_end_time | 23:59 +0000 |
| tidb_opt_insubq_to_join_and_agg | 1 |
| tidb_skip_isolation_level_check | 0 |
| tidb_enable_window_function | 1 |
| tidb_retry_limit | 10 |
| tidb_scatter_region | 0 |
| tidb_index_serial_scan_concurrency | 1 |
| tidb_index_lookup_size | 20000 |
| tidb_auto_analyze_ratio | 0.5 |
| tidb_distsql_scan_concurrency | 15 |
| tidb_enable_fast_analyze | 0 |
| tidb_backoff_weight | 2 |
| tidb_skip_utf8_check | 0 |
| tidb_ddl_reorg_batch_size | 256 |
| tidb_ddl_error_count_limit | 512 |
+------------------------------------+----------------+
42 rows in set (0.002 sec)
复制代码
配置项
对比 TiDB v3.0.20 和 v2.1.19 配置项的差异变化如下。
> "cors": "",
> "disable-error-stack": true,
> "record-plan-in-slow-log": 1
> "require-secure-transport": false,
> "cluster-verify-cn": null
> "status-host": "0.0.0.0",
> "record-db-qps": false
> "max-memory": 0,
< "enable-update-stats": true,
> "bind-info-lease": "3s",
> "memory-guard-ratio": 0.1
> "max-batch-size": 128,
> "overload-threshold": 200,
> "max-batch-wait-time": 0,
> "batch-wait-size": 8,
> "region-cache-ttl": 600,
> "store-limit": 0
> "strategy": "range"
> "pessimistic-txn": {
> "enable": true,
> "max-retry-count": 256
> "max-index-length": 3072,
> "alter-primary-key": false,
> "stmt-summary": {
> "enable": false,
> "max-stmt-count": 200,
> "max-sql-length": 4096,
> "refresh-interval": 1800,
> "history-size": 24
> "enable-table-lock": false,
> "delay-clean-table-lock": 0
复制代码
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)还有几件重要的事情:
(1st place of TiDB Hackathon 2019, project: Unified Thread Pool)
(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 个国家和地区,是全球基础架构领域的顶级开源项目。
下期,我们继续讨论 TiDB v4。
🌻 往期精彩 ▼
-- / END / –
👉 这里可以找到我
如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!(๑˃̵ᴗ˂̵)
评论