升级就是最好的调优:TiDB 用户收益与实践总结报告
作者: Lucien- 卢西恩原文来源:https://tidb.net/blog/59300cbe
导读
随着 TiDB 社区升级互助活动的圆满结束,许多用户在官方的支持下成功升级到了 TiDB 的最新版本。这一过程不仅验证了 TiDB 在稳定性和性能上的显著提升,还让用户亲身体验到了新版本带来的实际收益。
本文根据 TiDB 社区架构师李仲舒在 9 月 21 日 Infra Meetup - 用户实践场中的分享整理,介绍了 TiDB 升级的价值,以及用户在升级过程中的实践和收益。通过这篇文章,读者可以了解到 TiDB 的 LTS 版本策略、产品更新历程,以及新版本在性能和稳定性方面的提升。同时,通过真实的用户案例,文章展示了 TiDB 升级后如何帮助企业提升业务性能和降低运营成本。
TiDB 新版本:持续在性能和稳定性等方面下功夫
TiDB 的 LTS(长期支持)版本策略确保了用户可以享受到更高效技术支持服务和更优质优质产品能力。TiDB 从 v4.0 到最新的 v8.1 ,每个版本都带来了跨越性的改进。TiDB 产品敏捷发版策略趋于稳定且线性。在主干、分支、补丁三个维度完备 TiDB 发版策略以及流程化,使其在版本产品能力定位清晰,产品的版本方向准确,提升用户对产品版本认知。另外在产品的性能以及稳定性方面提供很多突破性的特性能力,例如,v7.1.5 引入了资源管控和多值索引,v8.1.1 则提升了 BR 快照恢复和全局排序的性能,在稳定性和性能方面对 TiDB 做了非常多提升和优化。
TiDB 在 v7 版本已经完成产品稳定性的改善,增强缓存池、内存限制等内核优化,降低热点数据、低效 SQL 对整个 TiDB 集群影响,同时为了提升 TiDB 各行各业业务场景的覆盖能力,发布资源管控、行级别 TTL 的关键特性,可以满足大集群多业务融合,提升产品稳定的同时达到降本增效目的。在 v7.5 版本正式引入分布式执行框架和全局排序等分布式产品特性,提升 DML、DDL 以及逻辑 / 物理 数据交互能力性能提升,加快分布式架构的并发处理效率。
TiDB 从 v5 到 v8 版本迭代演进过程中,从 5 个维度增强 TiDB 稳定性以及性能,同时在未来多模发展方向中提升产品多维能力。
1.SQL 生态的高度兼容
TiDB 在 v7.0-v7.5 版本中,实现了与 MySQL v8.0 的高度兼容,这不仅包括 SQL 语法的兼容,还涵盖了全局日志、执行优化器的缓存等高级特性。这种兼容性的增强使得原有的 MySQL DBA 能够无缝迁移到 TiDB 平台,同时保证了应用程序的平滑过渡。对于 MySQL 技术栈的业务研发、数据库运维工程师实现低门槛使用分布式数据库产品,结合业务迅猛发展提供强有力数据库产品支撑。
2. 性能的持续提升
在 OLTP(在线事务处理)方面,TiDB 通过缓存优化、内存使用提升以及减少 IO 和网络影响,实现了性能的飞跃。例如,TiDB 在 v7 以后版本已经将 schema、统计信息、执行计划等关键元信息实现缓存化处理,减少对磁盘、网络的依赖,另外在 v8.5 以后版本会迭代提升 TiKV in-memory 特性增强,持续提升查询场景性能。未来也会在 v9 版本中重构 cascades 优化器框架,使 SQL 优化器底层算子的执行计划更符合实际 CBO 设计,改写后的 SQL 执行效率更加高效。此外在分区表引入了二级分区全局索引,以及对大量 DDL 任务的增强处理,这些都大大提升了 TiDB 在处理在线事务处理方面的能力。
对于 OLAP(在线分析处理),TiDB 通过保证实时分析的性能,满足了部分 T+0 场景的需求。TiFlash 的引入,为 TiDB 带来了强大的 HTAP(混合事务 / 分析处理)能力,使得用户能够在同一个数据库上同时处理事务和分析查询。在 OLAP 场景支撑有 3 个特性具有代表性:
a. 从 v6.5.0 起,TiDB 支持将 TiFlash 查询结果保存到数据表中,即物化了 TiFlash 的查询结果。执行 INSERT INTO SELECT 语句时,如果 TiDB 将 SELECT 子查询下推到了 TiFlash,TiFlash 的查询结果可以保存到 INSERT INTO 指定的 TiDB 表中。v6.5.0 之前的 TiDB 版本不允许此类行为,即通过 TiFlash 执行的查询必须是只读的,你需要从应用程序层面接收 TiFlash 返回的结果,然后另行在其它事务或处理中保存结果。
b. Stale Read 是一种读取历史数据版本的机制,读取 TiDB 中存储的历史数据版本。通过 Stale Read 功能,你能从指定时间点或时间范围内读取对应的历史数据,从而避免数据同步带来延迟。当使用 Stale Read 时,TiDB 默认会随机选择一个副本来读取数据,因此能利用所有副本。如果你的应用程序不能容忍读到非实时的数据,请勿使用 Stale Read,否则读到的数据可能不是最新成功写入的数据。
c. 非事务 DML 语句是将一个普通 DML 语句拆成多个 SQL 语句(即多个 batch)执行,以牺牲事务的原子性和隔离性为代价,增强批量数据处理场景下的性能和易用性。通常,对于消耗内存过多的大事务,你需要在应用中拆分 SQL 语句以绕过事务大小限制。非事务 DML 语句将这一过程集成到 TiDB 内核中,实现等价的效果。非事务 DML 语句的执行效果可以通过拆分 SQL 语句的结果来理解,DRY RUN 语法提供了预览拆分后语句的功能。
3. 稳定性的不断增强
稳定性始终是 TiDB 关注的重点。从 v5.0-v5.3 的版本开始,TiDB 通过引入 Raft Engine 日志、优化 TSO 优化和 Cop Task 并发机制等,进一步提升了系统的稳定性。而在 v6.1-v6.4 的版本开始,TiDB 引入了多项稳定性提升的措施,如元数据锁、完善行级别的 TTL 等产品能力。
4. 高可用性和安全性的全面提升
TiDB 在高可用性、运维和安全性方面也做了大量的工作。v5.4-v6.0 版本中,TiDB 引入了对物理备份影响的优化、集群部署和升级的稳定性提升,以及全新的成本估算模型和 TiDB Dashboard 的引入,这些都极大地增强了 TiDB 的运维和管理能力。在 v7 版本以上版本 TiCDC 支持在两个 TiDB 集群之间进行双向复制 (Bidirectional replication, BDR)。基于该功能,可以使用 TiCDC 来构建 TiDB 集群的多写多活解决方案。两个 TiDB 集群之间部署两套 TiCDC 集群,集群的拓扑如下图所示,图中箭头所指的方向即为该 TiCDC 集群同步数据的流向。
5. 向量化查询的探索
最令人兴奋的是,TiDB 在 v8.5 版本中计划引入 VectorDB 支持,这是一个面向向量化查询的数据库功能,它将进一步提升 TiDB 在处理大量数据时的性能。TiDB 不限制数据的存量,你想存多少存多少不用分库分表,同时 TiDB 提供分析型的数据库能力且具备高可用性,那么 TiDB 存算分离的分布式数据库架构,即将支持 RDBMS 和 VectorDB、GraphDB 能力缩减技术栈堆积。
升级是最好的调优
升级到新版本的 TiDB ,你就可以享受到一系列显著的好处,这些好处不仅涉及成本效益的提升,还关乎易用性、易维护性以及整体性能的增强:
1. 稳定性增强
TiDB 升级最大收益就是稳定性,稳定性也是在升级目标中无论是使用 TiDB 业务开发,还是运维 TiDB 的 DBA 最看重的。所以通过修复旧版本的问题和错误,新版本的 TiDB 提供了更高的稳定性和可靠性,确保了业务的连续性和数据的安全性。当前的用户反馈来判断,升级以后稳定性增强收益非常具有普适性。
2. 性能提升
对于业务来说,除了稳定性外,性能也是大家比较关注的一点。升级如果对业务的整体性能提升高,对终端用户体验有很明显改善,这里 TiDB 从产品架构层面优化做了很多特性来提升产品能力。
数据缓存:在 TiDB、TiKV 层实现部分结果数据缓存和数据缓存能力,TiDB 在 v6.0.0 版本中引入了缓存表功能。该功能适用于频繁被访问且很少被修改的热点小表,即把整张表的数据加载到 TiDB 服务器的内存中,直接从内存中获取表数据,避免从 TiKV 获取表数据,从而提升读性能。TiKV 的很多性能相关的参数实现数据缓存,另外在 v8 版本增加 TiKV 缓存数据的设计增强查询结果性能。
分布式框架:TiDB 采用计算存储分离架构,具有出色的扩展性和弹性的扩缩容能力。从 v7.1.0 开始,TiDB 引入了一个分布式执行框架,以进一步发挥分布式架构的资源优势。该框架的目标是对基于该框架的任务进行统一调度与分布式执行,并提供整体和单个任务两个维度的资源管理能力,更好地满足用户对于资源使用的预期。
全局排序:TiDB 全局排序功能增强了数据导入和 DDL(数据定义语言)操作的稳定性和执行效率。全局排序作为分布式执行框架中的通用算子,通过分布式执行框架,在云上提供全局排序服务。全局排序目前支持使用 Amazon S3 作为云存储。
3. 高可用可维护性
高可用和可维护性是核心场景重要的产品能力,TiDB 高可用方面提供 6 种高可用容灾方案,TiDB 通常采用多 AZ 部署方案保证集群高可用和容灾能力。多 AZ 部署方案包括单区域多 AZ 部署模式、双区域多 AZ 部署模式等多种部署模式。单区域双 AZ 部署方案,即在同一区域部署两个 AZ,成本更低,同样能满足高可用和容灾要求。该部署方案采用自适应同步模式,即 Data Replication Auto Synchronous,简称 DR Auto-Sync。
TiDB Dashboard 提供了集群运行概况、组件及主机状态、读写流量分析、SQL 语句执行信息、慢查询分析、集群诊断、日志查询、资源管控预估、性能数据分析等多种功能,以帮助用户全面监控和管理 TiDB 集群的性能和健康状态。新版本通常会带来更加直观的用户界面和简化的操作流程,使得数据库管理更加便捷。引入的智能工具可以帮助用户快速识别和解决问题,提高了数据库的易用性。即使遇到问题,用户也可以通过社区获得及时的帮助和解决方案,降低了维护难度。
4. 成本降低
TiDB 通过引入资源管理(Resource Control)和性能增强功能,帮助用户更高效地利用计算资源,有效减少运营开支。一体化的 TiDB 集群管理方案,提供用户、会话、SQL 细粒度级别的资源管理方案,适合微服务、SaaS、PaaS 类场景的业务整合,降低硬件资源冗余情况。同时资源管理产品能力可以大大提升 TiDB 集群稳定性,完美解决成本问题。TiDB 资源管控特性提供了两层资源管理能力,包括在 TiDB 层的流控能力和 TiKV 层的优先级调度的能力。将用户绑定到某个资源组后,TiDB 层会根据用户所绑定资源组设定的配额对用户的读写请求做流控,TiKV、TiFlash 层会根据配额映射的优先级来对请求做调度。通过流控和调度这两层控制,可以实现应用的资源隔离,满足服务质量 (QoS) 要求。
TiDB 社区用户升级收益分享
在实际应用中,许多用户通过升级 TiDB 版本获得了显著的收益。同程通过从 v5 升级到 v7,成功支撑了五一假期的流量高峰。个推从 v6 升级到 v8 后,解决了分钟级别的慢查询问题。新东方和携程的升级案例也证明了升级可以带来明显的性能提升和成本的优化。
同程:从 v5 本地升级到 v7,40% 的集群已完成升级,v7 版本成功支撑了五一假期的流量高峰。
个推:从 v6 本地升级到 v8,100% 的集群已完成升级,v8 版本解决了分钟级别的慢查询问题。
新东方:从 v4 迁移升级到 v6,10% 的集群已完成升级,v6 版本核心场景正在升级中。
携程:从 v6 本地升级到 v7,50% 的集群已完成升级,实现了平滑升级且稳定运行。
理想:从 v5 本地升级到 v6,核心集群已完成升级,存储空间优化了 70% 。
TiDB 升级,社区与你同行
TiDB 社区的升级互助活动专为有升级需求的小伙伴量身定制,汇聚了社区版主、经验丰富的布道师以及官方技术支持团队,为大家的升级之路提供了专业的指导和即时的支持。经过 5 个月的持续努力,该活动已助力多家企业顺利完成了 TiDB 新版本升级,显著提升了 TiDB 用户在性能和稳定性方面的体验。
衷心感谢所有在本次升级互助活动中无私奉献、为用户升级提供指导和帮助的升级导师们。同时,我们也鼓励大家持续关注 TiDB 的最新版本动态。如果升级遇到技术上难题,可以发布到论坛寻求支持:https://asktug.com/c/tidb/30022
Q&A 环节
Q:当前 TiDB v8 版本大家使用情况如何?核心业务是否推荐升级到 v8 版本?
A:TiDB 的 v8 版本已经在市场上获得了广泛的使用,尤其是在 TiDB Cloud 云服务以及社区用户中。因为 v8 版本的内核开源,这使得用户可以自由地探索和灵活使用。产研团队和开发团队也对 v8 版本抱有很高的信心,也即将到来的 v8.5 版本中,进行了大量性能优化,以提升分布式架构的性能。
对于是否推荐将核心业务升级到 v8 版本:在 v6 版本中,TiDB 已经在稳定性方面取得了显著的成果,v7 版本又进行了性能提升的改进,v8 版本预计将为用户提供更明确和清晰的收益。我们推荐用户根据自身需求,考虑将核心升级到 v8 版本。
评论