tidbv6.2发版(代码片段)

TiDB_PingCAP TiDB_PingCAP     2022-12-01     162

关键词:

TiDB v6.2 于 8 月 23 日发布了。在全新的版本中,TiDB 提供了诸多方面的提升,它们主要集中于:可观测性、性能、稳定性、数据生态加强以及 MySQL 兼容几个领域。

可观测性

在新版本中,TiDB Dashboard 支持了可视化执行计划。以往 TiDB 用只能借助观察文字输出的执行计划排查问题,这对于简单的交易类 SQL 而言问题并不大,但分析型 SQL 很可能会产生庞大的执行计划信息,造成用户难以观察分析。在新版本中,TiDB Dashboard 在 Statements 和 Slow Query 中提供可视化执行计划和基础问题诊断的能力。这是一种全新的查询计划的展示方式,目标是通过图形化的手段展示 Query 查询计划的每个步骤,从而使得用户能够更加直观方便地了解查询执行计划的细节。对于复杂的大型查询语句,可视化的展示方式对于深入理解其执行过程大有裨益。

在这个版本中,TiDB Dashboard 也新增的 Monitoring 页面,展示了在业务性能调优中所需的核心指标,使得用户大部分的日常运维监控需求可以在这里完成,无需在 Grafana 和 Dashboard 间跳转。

除此之外,新版本中 TiDB 锁视图支持乐观事务被阻塞的信息。大量锁冲突往往会造成严重的性能问题,而锁冲突定位是这类性能问题排查的必要手段之一。TiDB v6.2.0 之前版本支持通过系统视图 INFORMATION_SCHEMA.DATA_LOCK_WAITS 查看锁冲突关系,但是不支持乐观事务被悲观锁阻塞的情况。TiDB v6.2.0 扩展了 DATA_LOCK_WAITS 视图,提供乐观事务被悲观锁阻塞情况下的冲突关系,可以帮助用户快速定位锁冲突,同时为业务改进提供依据,从而减少这类锁冲突的发生频率,提升系统整体性能。

性能

在新版本中 TiDB HTAP 性能有进一步提升。

首先,TiFlash 在 6.2.0 中引入了新的存储格式 PageStore V3。该格式大幅减轻了在高并发、高负载场景下 GC 造成 CPU 占用高的问题,可以有效减少后台任务 IO 流量,提升高并发、高负载下的稳定性。6.2.0 版本默认以新版本存储格式保存数据。

在计算引擎方面,TiFlash 通过实现细粒度数据交换(shuffle)使窗口函数 (Window function) 可以利用多线程并行计算,成倍降低查询响应时间,使其在典型场景下可提速 4~5 倍。而在去重计算 COUNT(DISCINT) 中,分析引擎通过降低数据倾斜优化了计算效率。

除了分析场景,新版本中引入新的 DDL 并行执行框架,在不同表对象上的 DDL 可以并发执行,解决了之前不同表之间 DDL 相互阻塞的问题。同时在不同表对象的追加索引、列类型变更等场景下支持并行执行,大幅提升执行效率。

除了分析场景,新版本中引入新的 DDL 并行执行框架,在不同表对象上的 DDL 可以并发执行,解决了之前不同表之间 DDL 相互阻塞的问题。同时在不同表对象的追加索引、列类型变更等场景下支持并行执行,大幅提升执行效率。

稳定性

除了性能加强,V6.2 也包含了重要的稳定性加固。

TiKV 在新版本中支持自适应调整 CPU 使用率。数据库通常会使用后台进程来执行一些内部操作,通过采集各种统计信息,帮助用户定位性能问题,生成更优的执行计划,从而提升数据库的稳定性和性能。然而如何平衡后台操作和前台操作的资源开销,在不影响用户日常数据库使用的基础上如何更高效地采集信息,一直是数据库领域最为头疼的问题之一。从 v6.2.0 开始,TiDB 支持通过 TiKV 配置文件设置后台请求的 CPU 使用率, 进而限制自动统计信息收集等后台操作在 TiKV 的 CPU 使用比例,避免极端情况下后台操作抢占对用户操作的资源,确保数据库稳定高效运行。同时 TiDB 还支持 CPU 使用率自动调节的功能, 这时 TiKV 会根据实例的 CPU 占用情况, 自适应地对后台请求占用的 CPU 资源进行动态调整。该功能默认关闭。

而 TiFlash 则加固了在处理大量数据的场景。在新版本中,通过减少分布式事务处理的内存放大(memory amplification),TiFlash 大幅降低了内存消耗,相较于 v6.1 之前版本最好的情况下内存使用峰值可降低 50% 以上,从而减少了大规模分析场景下不同任务内存资源冲突问题出现的可能性。

数据生态加强

在新版本中,最重要的数据生态功能是支持 Point-in-Time Recovery (PiTR)。PiTR 指的是允许用户在新集群上恢复备份集群的历史任意时刻点的快照。从技术而言,PiTR 是基于变更日志和快照数据共同进行的数据备份和恢复。该功能可以满足以下的用户需求:

  • 降低备份恢复在灾备场景下的 RPO,如实现十几分钟的 RPO;
  • 用于处理业务数据写错的案例,如回滚业务数据到出错事件前;
  • 业务历史数据审计,满足行业合规的需求。

针对数据导入场景,TiDB Lightning 优化并减小了导入对集群带来的性能影响。TiDB Lightning 原有的物理导入模式 (backend=‘local’) 对目标集群影响较大,例如导入过程将停止 PD 调度等,因此仅适用于目标集群初次导入数据。新版本中,TiDB Lightning 在现有基础上做了改进,导入时影响范围由集群级别降低到表级别,即非导入的表仍可进行读写操作。

除此之外,BR 现在已支持恢复用户和权限数据,这使得备份恢复体验变得更平滑,用户不再需要在集群恢复之后单独处理用户和权限信息。

最后,TiCDC 加入了 DDL 过滤机制。自 v6.2 起,TiCDC 支持过滤指定类型的 DDL 事件,支持基于 SQL 表达式过滤 DML 事件,从而适应更多的数据同步场景。例如在一些特殊的场景下,用户可能希望对 TiDB 增量数据变更日志进行一定规则的过滤,例如过滤 Drop Table 等高风险 DDL。

MySQL 兼容

在 MySQL 兼容的道路上,TiDB 在 v6.2 加入了 SAVEPOINT 机制以及单 ALTER TABLE语句增删改多个列或索引。

先说说 SAVEPOINT。事务是数据库保证 ACID 特性的一系列连续操作的逻辑集合。在一些复杂业务场景下,你可能需要管理一个事务的大量操作,有时候需要在事务内实现部分操作的回退能力。SAVEPOINT 就是针对事务内部实现的可命名保存点机制,通过这个机制,你可以灵活地控制事务内的回退节点,从而实现更复杂的事务管理能力,实现更为多样的业务设计。

然后是 ALTER TABLE 操作多列和多索引。之前版本中,TiDB 仅支持单一 DDL 变更,导致用户在迁移异构数据库时经常会遇见 DDL 操作不兼容的情况,需要耗费额外的精力将复杂的 DDL 修改成 TiDB 支持的多个简单 DDL。同时还有一些用户依赖 ORM 框架,实现 SQL 组装,最终出现了 SQL 不兼容等问题。TiDB 从 v6.2.0 开始,支持使用 ALTER TABLE 语句修改一个表的多个模式对象,方便了用户 SQL 实现,也提升了产品易用性。

查看 TiDB 6.2.0 Release Notes ,立即 下载试用 ,开启 TiDB 6.2.0 企业级数据库之旅。

12节,完稿&发版(代码片段)

作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!😄一、前言💥为什么?写写快乐的热门文章不好吗!从开始准备成体系的编写IDEAPlugin知识内容前,我就知... 查看详情

记一次生产发版时springboot服务停用启用的问题(代码片段)

...接做成linux服务来启动和停用。然而,每次通过jenkins构建发版,项目构建完毕,还要手动再去重启服务。听交接的同事说,可能是有一个钩子阻止服务停用了。但是,我还是有点纳闷的,既然阻止了服务停用,按道理服务是还能... 查看详情

tidb6.5lts发版(代码片段)

...们很高兴向大家宣布,TiDB6.5LTS版本已经发布了。这是TiDBV6的第二个长期支持版(上一个是TiDB6.1),除了携带了诸多备受期待的新特性,同时也将得到TiDB开发社区的长期维护,是推荐企业级用户采用的最新... 查看详情

tidb6.1发版:lts版本来了(代码片段)

...期支持版在两个月前发布TiDB6.0版本时,我们提过在新发版流程中,我们引入了LTS版本的概念,与之相对的是开发里程碑版本(DevelopmentMiles 查看详情

完美解决-前端发版后浏览器缓存问题(发版后及时拉取最新版本代码)(代码片段)

一、简介开发完发布新版本后,在有些电脑上总需要强刷才能获取到最新版本的内容,太恶心了。浏览器缓存(BrowserCaching)是为了节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储... 查看详情

❤️android应用崩溃?嗯?莫慌,稳住!❤️(代码片段)

前言        从刚开始接触Android开发,第一次发版,遇到程序崩溃,那就一个慌张。好几年过去了,现在的听到程序崩溃?嗯,稍等我看看什么问题,然后该锁定该锁定该解决解决。        发... 查看详情

gitlab发版ssh连接超时

...时时间。GitLab是一个用于仓库管理系统的开源项目,gitlab发版ssh连接超时可以设置超时时间即可解决,Gitlab是被广泛使用的基于git的开源代码管理平台,基于RubyonRails构建,主要针对软件开发过程中产生的代码和文档进行管理。 查看详情

maven学习总结(54)——使用git-commit-id-plugin插件来管理项目发版(代码片段)

插件git-commit-id-plugin可以很方便将打包时的git信息生成文件在包中,可以很方便的查看,官方文档地址:git-commit-id-plugin。<plugin> <groupId>pl.project13.maven</groupId> <artifactId>git-commit-id-plugin</artifactId> <version>2.... 查看详情

maven学习总结(54)——使用git-commit-id-plugin插件来管理项目发版(代码片段)

插件git-commit-id-plugin可以很方便将打包时的git信息生成文件在包中,可以很方便的查看,官方文档地址:git-commit-id-plugin。<plugin> <groupId>pl.project13.maven</groupId> <artifactId>git-commit-id-plugin</artifactId> <version>2.... 查看详情

上次发版我就改了一行代码!

动态更换应用Icon产品:我们可以动态更换App在Launcher里面的Icon吗开发:不可以产品:我们可以动态更换App在Launcher里面的Icon吗开发:不可以产品:我们可以动态更换App在Launcher里面的Icon吗开发:不可以产品:我们可以动态更换Ap... 查看详情

tidb6.5lts发版(代码片段)

...们很高兴向大家宣布,TiDB6.5LTS版本已经发布了。这是TiDBV6的第二个长期支持版(上一个是TiDB6.1),除了携带了诸多备受期待的新特性,同时也将得到TiDB开发社区的长期维护,是推荐企业级用户采用的最新... 查看详情

tidb5.4发版丨新功能解读(代码片段)

TiDB5.4作为2022年开山之作,包含了许多有用有益的新功能和持续性的性能/稳定性提升。本文着重介绍重要新增功能和特性所带给用户的新体验和价值,按照以下章节来组织:基础性能优化和提升面向云环境的功能拓展... 查看详情

pdf在线预览解决方案——pdf.js使用(代码片段)

...,就需要前端修改对应的规则页面的文案,重新发版。为了避免这种因为规则文案修改而频繁发版的情况,现改用pdf方式来渲染,只需要在后台上传、配置需要展示的 查看详情

最新:log4j2.x再发版,正式解决核弹级漏洞,又要熬夜了。。。(代码片段)

背景这几天为了应对《突发!ApacheLog4j2报核弹级漏洞。。赶紧修复!!》,Log4j2连续发布了两个RC(ReleaseCandidate)候选版本。在第一次的RC1候选版本中,Log4j2还存在漏洞绕过风险,官方随后又发布... 查看详情

golangmodules初探(代码片段)

今天天色刚刚亮起,起床看到golang1.11正式发版了,有着两个重要的特性:modules和WebAssembly。本博文只要说的是modules,congJava转golang的同学肯定是对golang的包管理充满了无奈之情,我也曾在博客中介绍过glide,也介绍过dep,现在我... 查看详情

使用composedesktop开发一款桌面端多功能apk工具(代码片段)

...着,而且还有几个马甲包也要维护,不知道大家发版的时候复杂不复杂,反正我们每次发版的时候都需要经历–打包、加固、对齐、重签名、打渠道 查看详情

对几次通宵加班发版的复盘和思考

导航将帅无能,累死三军不懂拒绝临时增加的需求不可调试的代码伪信息共享技术债务项目时间评估随意不明确的发布清单团队成员忙闲不均bug处理不分级联调不充分结语参考每一次版本的上线都应该像火箭发射一样严肃。在过... 查看详情

react-native集成tfs自动发版问题

...业账号,用mac本地打包成ipa是没有问题的,提交到tfs自动发版就有问题,这两个库没有导入进来,原因是路径不对了。解决方法:  找的本地库的位置,拷贝到自动发版的目录下,就能自动发版。应该还有其他解决方案,只是... 查看详情