写点什么

星辰考古:TiDB v3.x 忆水木

  • 2024-07-05
    北京
  • 本文字数:7333 字

    阅读完需:约 24 分钟

作者: 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)(实验特性)


批注


  1. 关于 RBAC 的相关内容,请访问官方文档:https://docs.pingcap.com/zh/tidb/stable/role-based-access-control

  2. 为提升系统安全性,企业版新增特性: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

  • 引入了新的存储引擎 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 相关内容,详情戳这里:



这里我们使用 TiUP 来部署 TiDB v3.0.20。


[shawnyan@centos7 ~]$ tiup cluster listName    User  Version  ...----    ----  -------  ...mytidb  tidb  v3.0.20  ...
复制代码


查看基础信息。


[shawnyan@centos7 ~]$ mysql -uroot -h127.0.0.1 -P4000Welcome to the MariaDB monitor.  Commands end with ; or \g.Your MySQL connection id is 2Server 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.20tidb_version(): Release Version: v3.0.20Git Commit Hash: 9ab0bbf9a012aaf8ae2d3e1eee2a321e03a0d5c1Git Branch: heads/refs/tags/v3.0.20UTC Build Time: 2020-12-25 04:33:21GoVersion: go version go1.13 linux/amd64Race Enabled: falseTiKV Min Version: v3.0.0-60965b006877ca7234adaced7890d7b029ed1306Check Table Before Drop: false1 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.20SelectInsertUpdateDeleteCreateDropProcessReferencesAlterShow DatabasesSuperExecuteIndexCreate UserTriggerCreate ViewShow ViewCreate RoleDrop RoleCREATE TEMPORARY TABLESLOCK TABLESCREATE ROUTINEALTER ROUTINEEVENTSHUTDOWN
-- TiDB 8.1.0CREATE TABLESPACERELOADFILECONFIGREPLICATION CLIENTREPLICATION SLAVE
复制代码

I_S.processlist 表结构

TiDB v3 支持在 processlist 表显示内存使用情况。而在 TiDB v8 中我们可以看到更多信息,增加了 DIGEST,DISK,RESOURCE_GROUP,SESSION_ALIAS 等字段。


-- TiDB 3.0.20MySQL [(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.0MySQL [(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.20MySQL [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 时期的精品文章分享给大家。


未完待续

在 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 / –


👉 这里可以找到我



如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!(๑˃̵ᴗ˂̵)


发布于: 刚刚阅读数: 3
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
星辰考古:TiDB v3.x 忆水木_版本升级_TiDB 社区干货传送门_InfoQ写作社区