自TiDB5.0发布以来,陆续在金融、互联网新经济、物流等行业用户的生产环境得到应用,收获不少用户的积极评价:
TiDB服务58金融、安居客等数仓报表的复杂读取与关联查询,在多表关联查询中,相比4.0版本性能最高提升达90%;经过网易互娱场景实测,与4.0相比TiDB5.0整体性能表现更加稳定,没有出现明显的抖动;TiDB5.0在汽车之家大数据join与聚合场景的应用中,MPP体现出明显的优势,与MySQL相比总体效能提升20-50倍。
“用户的反馈激励我们不断前行,我们的使命是持续提升开发者和DBA的体验,让用户用得省心,用得顺手。”PingCAP联合创始人兼CTO黄东旭说,“TiDB每一个版本的发布都立足于解决DBA的痛点。真实场景就是最好的架构师,从5.0版本开始TiDB缩短了发版周期,采用了更灵活、更敏捷的火车发版模型,每一个用户真实场景需求的输入,在两个月周期内就有可能成为下一个版本交付的功能。”
得益于大量用户真实应用场景的快速反馈,TiDB5.1提速发版,进一步打造更流畅的企业级数据库体验。TiDB5.1拥有更加稳定的响应延迟表现,更优的MPP性能与稳定性,更便捷的可运维性,开发者和DBA可以轻松地基于TiDB5.1构建任意规模的关键业务应用。
TiDB5.1功能亮点和用户价值
支持ANSISQL99标准的CommonTableExpression,用户可以写出更加简洁、更易维护的SQL代码,轻松应对复杂的业务逻辑,提高开发效率。进一步提升MPP性能和稳定性,帮助用户更快做出实时决策。5.1通过支持MPP模式下的分区表以及新增的多个函数表达式和算子优化,实时分析性能提升一个数量级以上;通过增强的内存管理和负载平衡机制,让分析查询变得更快、更稳。在突发的大流量写入、集群扩缩容以及在线数据导入和备份等场景下,5.1版本优化了数据库的长尾查询延迟的稳定性,应对不同的工作负载,延迟能够降低20%-70%。尤其对于金融行业延迟敏感类型的关键业务应用,大幅提升了在高压力负载下的查询稳定性。支持列类型变更,与MySQL兼容度更高。5.1新增StaleRead模式,在读写分离场景中通过打散读热点大幅提升读吞吐能力;引入新的系统表,实现在高并发事务场景中快速定位锁冲突;改进统计信息分析引擎,提升优化器选择索引的精准度,保障业务查询的效率和稳定性。面向大集群提供更加友好的运维体验,进一步降低DBA工作负荷。5.1版本集群扩缩容和数据迁移速度提升40%,改善了大规模集群运维的可靠性,降低大规模集群整体备份和恢复的耗时,通过优化CDC数据链路临时中断后的自动恢复机制,进一步提升数据同步链路的可靠性。
CommonTableExpression让SQL化繁为简
在金融交易类场景,由于业务的客观复杂性,有时候会写出长达行的单条SQL语句,其中包含大量的聚合和多层子查询嵌套,维护此类SQL堪称开发人员的噩梦。5.1版本支持ANSISQL99标准的CommonTableExpression(CTE)及递归的写法,极大提升开发人员和DBA编写复杂业务逻辑SQL的效率,增强代码的可维护性。
HTAP实时分析能力再升级
进一步提升MPP的性能和稳定性
5.1版本进一步增强TiFlashMPP计算引擎的综合能力,帮助用户提升业务决策速度:
MPP支持分区表,结合业务逻辑可优化海量数据分析查询所消耗的资源,提升查询速度;新增多个常用SQL函数支持,并优化算子使得查询能够更充分利用MPP来加速;提供便利的强制MPP模式开关,用户可自主决定是否开启MPP模式;通过优化集群负荷的分散与平衡机制,消除热点,提升系统“综合”承载能力;修复引擎内存使用问题,提供更加平稳流畅的使用体验。
提升高压力负载下查询分析的稳定性
在金融类业务场景下,技术人员每天会对数据进行高压力的跑批计算,生成最新的市场和营销分析报告,以辅助商业决策。跑批流程对连续性要求极高,无法容忍中间过程出错。针对该场景,5.1版本优化了TiDB的请求重试机制和TiKV的请求处理机制,显著降低了在高负载下由于TiFlash同步数据不及时导致的RegionUnavailable出错概率。
无缝集成TiSpark
TiSpark5.1版本实现了对含有聚簇索引表的读写支持,不带来任何额外的性能开销,对用户完全透明,用户可以立刻迁移到新版TiSpark来体验与TiDB5.1的无缝集成。
降低读写延迟抖动
在延迟敏感的应用场景下,当线上产生突发写流量、操作TiDB扩缩容、后台执行统计任务,以及在线数据导入和备份时,可能造成数据库的P99和P百分位的延迟抖动,对长尾查询产生一定影响
TiDB5.1加强了对磁盘读写链路的管理,限制后台任务对磁盘资源的使用,大幅降低上述场景对线上业务的干扰,改善读写链路的效率和稳定性。在AWSEC2r5b.4xlarge实例挂载EBSgp3盘的环境下,通过TPC-C基准测试(10kWH)的实测结果:
操作集群从6台TiKV缩到3台,P99响应时间降低20%,P响应时间降低15%;执行在线导入GB数据,P99响应时间降低71%,P响应时间降低70%。
增强业务开发灵活性
支持列类型变更
在典型的TiDB应用场景中,经常借助binlog将多个MySQL上游数据汇聚到一个TiDB集群。原先TiDB不支持变更列类型的操作,如果上游MySQL修改表的字段类型会导致与TiDB数据同步的中断。5.1版本新增对修改列类型DDL语句的支持,解决上述问题并进一步提升MySQL兼容性。
StaleRead(实验特性)
StaleRead适用于读多写少并且能够容忍读到旧数据的场景。例如Twitter用户发出一条消息后,系统会产生成千上万甚至上亿次读取,并且新发出的消息在一定时间后被读到是可以容忍的。该场景给数据库带来相当大的读并发压力,可能会产生读热点,导致节点的负载分布不均,整体吞吐成为瓶颈。借助StaleRead,用户可以指定一个过去的时间点从任意一个数据副本读取数据(不必从leader读取),从而显著分散节点的压力负载,使得整体读吞吐能力提升近一倍。
/*例如:可以通过设置当前事务为查询5秒之前的数据状态来开启StaleRead*/
SETTRANSACTIONREADONLYASOFTIMESTAMPNOW()-INTERVAL5SECOND;
SELECT*FROMT;
快速定位锁冲突(实验特性)
业务开发需要很谨慎地处理数据库并发事务,一旦发生锁表会给线上业务带来巨大影响,而DBA需要快速定位锁表原因以保证业务能够恢复正常。TiDB5.1中新增LockView系统表视图,可以快速定位到引起锁表的事务和相关SQL语句,从而提高锁冲突问题的处理效率。下面一个小例子展示如何使用LockView快速定位发生锁表的事务和SQL语句。
更快更准的统计信息分析
随着业务数据持续不断的变更,表的统计信息也会变得陈旧,进而导致优化器执行计划准确度降低,使得查询变慢。DBA通过执行ANALYZE操作,对表的统计信息进行重建。TiDB5.1对ANALYZE采样算法的性能进行了优化,生成统计信息的平均时间缩减为二分之一,同时新增一项新的统计数据类型,让优化器选择索引更加准确。
提升大集群运维和数据传输的可靠性
超多数量表的备份优化
优化超多数量表的备份,在50k张表的量级下,TiDB集群全量备份时间降低到之前的30~40%。此外,5.1版本优化了备份模块的元信息文件组织形式(简称v2),启动BR时可以通过指定参数“--backupmeta-version=2”来启用v2,从而减少单次写入量来降低内存消耗,有效避免低规格内存(≤8GB)环境下的异常退出。
提升大规模集群运维可靠性
TiDB集群规模越大对生产集群扩缩容、硬件升级以及节点搬迁等日常运维操作的耗时就越久。TiDB5.1显著提升了扩缩容时数据迁移的性能,以下是两组测试结果:
个节点规模下,完成集群所有数据跨数据中心迁移的耗时降低20%;下线节点或对某节点的数据进行迁移,耗时缩短约40%。
优化内存使用
内存溢出(OutOfMemory)一直是困扰数据库行业的典型问题,5.1版本针对TiDB的内存使用进行了一系列优化,从而降低OOM风险:
无论数据量大小,窗口函数row_number将只占用固定大小内存;优化分区表的读取,占用更少内存;为存储层加入可配置的内存限制,当限制触发时,系统将释放部分缓存以降低内存占用;TiFlash写入的内存占用比上一版本降低80%。
提升CDC同步链路可靠性
TiCDC5.1在无需人工干预的情况下提供同步链路的可靠性:当发生环境扰动或硬件故障时,TiCDC可以保证同步持续进行;即使发生同步中断,TiCDC也会根据实际情况自动进行重试。
最后,特别感谢小米、奇虎、知乎、爱奇艺、理想汽车、新浪、虎牙、小电、跨越速运、亿玛科技等公司和社区开发者们在TiDB5.1版本的设计、开发和测试过程中做出的贡献,是你们一如既往的支持,帮助TiDB在实际场景中持续提升开发者和DBA的使用体验,让TiDB变得更加简单易用。