当前位置: 首页 > news >正文

7.5.4 MVCC优化测试

作者: h5n1 原文来源: https://tidb.net/blog/4e02d900

1. 背景

由于MVCC 版本数量过多导致rocksdb扫描key数量过多影响SQL执行时间是tidb经常出现问的问题,tidb也一直在致力于优化该问题。 一些优化方式包括比:

(1) 从传统的集中式GC变为GC in compaction filter,在rocksdb compact时进行GC,降低GC时性能影响,同时能将GC后的数据直接清理。

(2) 引入region-compact-min-redundant-rows、region-compact-redundant-rows-percent参触发更多的compact 以清理冗余的mvcc版本

(3) 修复GC相关的bug ,如: https://asktug.com/t/topic/932932

(4) 7.5.4及该版本后的版本进一步通过mvcc.delete_rows方式解决region-compact-min-redundant-rows不能触发的场景。

 有小伙伴在7.5.1版本遇到了这个问题,有一张表目前只有40000多万数据,但全表扫描出来要6亿多total\_keys,GC设置为24小时,检查GC tso推进正常

image.png

image.png

但是检查该表的region 发下最小的tso时间还很早,很明显有些mvcc数据还没有被GC,也就没法清理。

image.png

image.png

  猜测是由于gc in compaction filter等特性导致历史数据没有被GC,而且region上没有多少冗余的mvcc版本导致region-compact-min-redundant-rows等未起作用。通过7.5.4 版本引入的MVCC优化特性:**优化存在大量 DELETE 版本时 RocksDB 的 compaction 触发机制,以加快磁盘空间回收 #17269**  issue描述,小伙伴很可能也是这种场景,目前暂未确认,也未进行版本升级尝试。

要解决上述问题,除了版本升级外还可以通过以下方式解决

(1) 修改参数enable-compaction-filter 关闭compaction filter使用传统GC模式

(2) 使用region compact 手工对表compact,可以通过threads设置并发度。

(3) 重建表表后清理原表,但影响业务

(4) 降低region-compact-min-redundant-rows、region-compact-redundant-rows-percent参数值以触发更多compact,但如果冗余mvcc极少的情况下可能没效果。

2. 测试内容
本测试是验证7.5.4版是否能够解决背景中描述的问题,测试时初始化一张表,然后分段删除表数据,只保留中间和末尾的极少部分数据。

(1) 在7.5.1版本按要求删除数据后,观察GC情况和全表扫描的total_keys数量。

(2) 重启7.5.1集群观察重启操作对compact/GC是否有影响,以排除升级重启后影响GC。

(3) 升级到7.5.4版本观察测试表的GC情况和全表扫描的total_keys数量。

(4) 在7.5.4版本按照步骤1重新测试和观察。

测试中相关参数保持默认值,如GC时间。

3. 版本7.5.1删除后测试
测试表插入了42578713条数据,按要求删除后剩余18754条。

刚删完(2025-01-14 14:22:53)后total_keys:84985676

image.png

2个多小时后total_keys:35037709

image.png

直到7个小时后key数量一直保持稳定未变化,total_keys:35037709

image.png

从监控可以看到17:00后GC几乎无活动。

image.png

4. 测试集群重启影响

  重启集群后经过20多分钟观察,keys降到以下数值后未变化,total keys从重启前的35037709降为34866180,减少171529,约0.4%

image.png

从GC监控上看有3次GC,但实际是从21:30的GC后 keys数量就一直未变化。

image.png

问题: 再重启后观察total keys:61222618数量比重启前的35037709还要高很多,直到最后稳定在34866180, 为什么这个会变高呢?

image.png

5. 升级7.5.4版本

使用offline方式升级到7.5.4版本后 观察GC情况,可以看到22:10分左右完成升级后-22:46 totalkeys降到了5295017

image.png

 从监控上可以看到明显GC活动比单纯的重启集群要更剧烈些

image.png

6. 新版本重复测试
在新的7.5.4集群重复前面的的测试观察delete数据后GC情况。初始 51611460条数据,删除后剩余8837条。9:48 首次检查total\_keys;100164327

image.png

10:22 再次检查total_keys;17446709,34分钟内totalkeys减少了82717618。

image.png

  监控上看GC/compact活动也很频繁。

image.png

7. 结论

7.5.4版本对于大量delete版本优化改进还是比较明显,建议升级到较新的版本。

相关文章:

7.5.4 MVCC优化测试

作者: h5n1 原文来源: https://tidb.net/blog/4e02d900 1. 背景 由于MVCC 版本数量过多导致rocksdb扫描key数量过多影响SQL执行时间是tidb经常出现问的问题,tidb也一直在致力于优化该问题。 一些优化方式包括比: (1) 从传统…...

STM32 FreeRTOS 事件标志组

目录 事件标志组简介 基本概念 1、事件位(事件标志) 2、事件组 事件组和事件位数据类型 事件标志组和信号量的区别 事件标志组相关API函数介绍 事件标志组简介 基本概念 当在嵌入式系统中运行多个任务时,这些任务可能需要相互通信&am…...

生成树机制实验

1 实验内容 1、基于已有代码,实现生成树运行机制,对于给定拓扑(four_node_ring.py),计算输出相应状态下的生成树拓扑 2、构造一个不少于7个节点,冗余链路不少于2条的拓扑,节点和端口的命名规则可参考four_node_ring.py,使用stp程序计算输出生成树拓扑 2 实验原理 一、…...

企业分类相似度筛选实战:基于规则与向量方法的对比分析

文章目录 企业表相似类别筛选实战项目背景介绍效果展示基于规则的效果基于向量相似的效果 说明相关文章推荐 企业表相似类别筛选实战 项目背景 在当下RAG(检索增强生成)技术应用不断发展的背景下,掌握文本相似算法不仅能够助力信息检索&…...

2024年博客之星年度评选—创作影响力评审入围名单公布

2024年博客之星活动地址https://www.csdn.net/blogstar2024 TOP 300 榜单排名 用户昵称博客主页 身份 认证 评分 原创 博文 评分 平均 质量分评分 互动数据评分 总分排名三掌柜666三掌柜666-CSDN博客1001002001005001wkd_007wkd_007-CSDN博客1001002001005002栗筝ihttps:/…...

递归40题!再见递归

简介:40个问题,有难有易,均使用递归完成,需要C/C的指针、字符串、数组、链表等基础知识作为基础。 1、数字出现的次数 由键盘录入一个正整数,求该整数中每个数字出现的次数。 输入:19931003 输出&#xf…...

社区版Dify实现文生视频 LLM+ComfyUI+混元视频

社区版Dify实现文生视频 LLMComfyUI混元视频 一、 社区版Dify实现私有化混元视频效果二、为什么社区版Dify可以在对话框实现文生视频?LLMComfyUI混元视频 实现流程图(重点)1. 文生视频模型支持ComfyUI2. ComfyUI可以轻松导出API实现封装3. Di…...

【LLM】Openai-o1及o1类复现方法

note 可以从更为本质的方案出发,通过分析强化学习的方法,看看如何实现o1,但其中的核心就是在于,如何有效地初始化策略、设计奖励函数、实现高效的搜索算法以及利用强化学习进行学习和优化。 文章目录 note一、Imitate, Explore, …...

jlatexmath-android如何实现自定义渲染字符

使用jlatexmath-android的过程,如果出现个别字符渲染不了,会导致无法显示 常用的做法是新增自定义字体切换系统默认字体渲染,下面我们介绍第2种方法。 修改流程: 1、到jlatexmath-android的官网下载源码到本地,导入…...

dockerhub上一些镜像

K8s下网络排障工具 https://hub.docker.com/r/nicolaka/netshoot ex kubectl run tmp-shell --rm -i --tty --image nicolaka/netshoot -- /bin/bash # 主机的net ns下运行 kubectl run tmp-shell --rm -i --tty --overrides{"spec": {"hostNetwork": tru…...

Python 爬虫学习指南与资料分享

Python爬虫学习资料 Python爬虫学习资料 Python爬虫学习资料 在数字化浪潮中,Python 爬虫作为强大的数据获取工具,为众多领域提供关键支持。想要系统掌握这门技术,以下的学习指南与资料分享将为你照亮前行道路。 一、学习指南 入门奠基 …...

TypeScript特有运算符和操作符

文章目录 TypeScript 特有运算符1. keyof2. typeof3. in4. extends5. is6. as 和 <Type>7. never8. readonly9. ?10. []11. | 和 &12. !13. ?? 和 ?. 总结 TypeScript 特有运算符 1. keyof 作用&#xff1a;用于获取对象类型的所有键&#xff08;属性名&#x…...

介绍下常用的前端框架及时优缺点

以下是一些常用的前端框架及其优缺点介绍&#xff1a; React • 优点 • 组件化架构&#xff1a;可构建可复用的UI组件&#xff0c;提高开发效率和组件可维护性。 • 虚拟DOM&#xff1a;高效更新页面&#xff0c;减少直接操作DOM的性能开销。 • 灵活性和可扩展性&#xf…...

MATLAB算法实战应用案例精讲-【数模应用】图形变换和复杂图形组合(附python和MATLAB代码实现)

目录 前言 算法原理 变换 1二维变换 1.1缩放 1.2 翻转 1.3剪切 1.4 旋转 2齐次坐标 2.1引入齐次坐标的原因 2.2 二维齐次坐标 2.3二维仿射变换 2.4逆变换 4组合变换 5三维变换(由二维变换推理而来) 5.1三维齐次坐标 5.2 三维仿射变换 5.3 缩放和平移 5.4…...

SpringMVC 实战指南:打造高效 Web 应用的秘籍

第一章&#xff1a;三层架构和MVC 三层架构&#xff1a; 开发服务器端&#xff0c;一般基于两种形式&#xff0c;一种 C/S 架构程序&#xff0c;一种 B/S 架构程序使用 Java 语言基本上都是开发 B/S 架构的程序&#xff0c;B/S 架构又分成了三层架构三层架构&#xff1a; 表现…...

doris: Flink导入数据

使用 Flink Doris Connector 可以实时的将 Flink 产生的数据&#xff08;如&#xff1a;Flink 读取 Kafka&#xff0c;MySQL 中的数据&#xff09;导入到 Doris 中。 使用限制​ 需要依赖用户部署的 Flink 集群。 使用 Flink 导入数据​ 使用 Flink 导入数据&#xff0c;详…...

Nginx在Linux中的最小化安装方式

1. 安装依赖 需要安装的东西&#xff1a; wget​&#xff0c;方便我们下载Nginx的包。如果是在Windows下载&#xff0c;然后使用SFTP上传到服务器中&#xff0c;那么可以不安装这个软件包。gcc g​&#xff0c;Nginx是使用C/C开发的服务器&#xff0c;等一下安装会用到其中的…...

CSS布局新视角:BFC(块级格式化上下文)的作用与优势

在CSS布局的世界中&#xff0c;BFC&#xff08;Block Formatting Context&#xff0c;块级格式化上下文&#xff09;是一个既重要又神秘的概念。它不仅是解决复杂布局问题的关键工具&#xff0c;也是提升页面性能和用户体验的重要手段。本文将从新视角出发&#xff0c;深入探讨…...

PCL K4PCS算法实现点云粗配准【2025最新版】

目录 一、算法原理1、算法概述2、算法流程3、参考文献二、 代码实现1、原始版本2、2024新版三、 结果展示本文由CSDN点云侠原创,原文链接,首发于:2020年4月27日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 博客长期更新,本文最近一次更新时间为…...

02IO篇(D2_深入IO模型)

目录 本章目标 一、用户空间和内核空间 二、PIO与DMA 三、缓存IO和直接IO 1. 缓存IO 2. 直接IO 三、IO访问方式 1. 磁盘IO 2. 网络IO 3. 磁盘IO和网络IO对比 四、Socket网络编程 1. 客户端 2. 服务端 示例一 示例二 示例三 五、同步IO和异步IO 六、阻塞IO和非…...

记录一次微信小程序使用云能力开发的过程

对于开发微信小程序云开发不知从何起的同学们&#xff0c;可以当作一次参考。虽说官方有文档&#xff0c;有模板示例&#xff0c;但是这些都是片段或者完整的结果展示。对于初学或者开发经验较少的同学们&#xff0c;可能不知先从那里入手进行第一步的开发。下面解析下构建微信…...

Learning Prompt

说明&#xff1a;这是我的学习笔记&#xff0c;很多内容转自网络&#xff0c;请查阅文章末尾的参考资料。 目录 基本要求(C.R.E.A.T.E)总结文章(Summarise)改写文章(Rewrite)根据参考资料回答问题(Question & Answer)参考资料 基本要求(C.R.E.A.T.E) Character This is th…...

事务处理系统 (Transaction Processing System, TPS)

事务处理系统 (Transaction Processing System, TPS) 是一种专门用于自动化日常业务事务处理的计算机系统。这类系统通常处理大量的结构化数据,如订单处理、支付结算、库存管理等,以支持企业日常的运营和管理。TPS 的核心任务是确保高效、准确地记录和管理大量重复性的事务,…...

【PCIe 总线及设备入门学习专栏 5.3.2 -- PCIe 枚举与 PCIe PHY firmware 的区别与联系】

文章目录 OverviewPCIe 枚举与PCIe PHY固件的区别与联系1. PCIe 枚举2. PCIe PHY固件3. 区别4. 联系 举例说明实例场景 1&#xff1a;服务器启动 PCIe 网卡的过程实例场景 2&#xff1a;PCIe 热插拔设备的调试 Overview 本文将详细介绍 PCIe 枚举与 PCIe PHY firmware 的区别与…...

职场的三个阶段及其应对规划:以前端开发工程师为例

作为职场人士&#xff0c;特别是 IT 开发工程师&#xff0c;职业生涯的发展路径往往伴随着不同的挑战与机遇。一般而言&#xff0c;职场生涯可以划分为三个阶段&#xff1a;找工作阶段、有工作阶段以及职业转型阶段。每个阶段都有其特定的特征和应对策略&#xff0c;下面我将从…...

某讯一面,感觉问Redis的难度不是很大

前不久&#xff0c;有位朋友去某讯面试&#xff0c;他说被问到了很多关于 Redis 的问题&#xff0c;比如为什么用 Redis 作为 MySQL 的缓存&#xff1f;Redis 中大量 key 集中过期怎么办&#xff1f;如何保证缓存和数据库数据的一致性&#xff1f;我将它们整理出来&#xff0c;…...

RV1126+FFMPEG推流项目(9)AI和AENC模块绑定,并且开启线程采集

前面两篇已经交代AI和AENC模块的配置&#xff0c;这篇就让这两个模块绑定起来&#xff0c;绑定的原因是&#xff0c;Aenc从Ai模块拿到采集的原始数据进行编码。 使用 RK_MPI_SYS_Bind 把 AI 节点和 AENC 进行绑定&#xff0c;其中 enModId 是模块 ID 号选择的是 RK_ID_AI、s32C…...

excel实用工具

2. 命令 2.1 查找 vloopup...

基于.Net Core+Vue的文件加密系统

1系统架构图 2 用例图 管理员角色的用例&#xff1a; 文件分享大厅&#xff1a;管理员可以访问文件分享大厅&#xff0c;下载文件。个人信息管理&#xff1a;管理员可以更新自己的个人信息&#xff0c;修改密码。用户管理&#xff1a;管理员负责创建、更新或删除用户账户&…...

工业网口相机:如何通过调整网口参数设置,优化图像传输和网络性能,达到最大帧率

项目场景 工业相机是常用与工业视觉领域的常用专业视觉核心部件&#xff0c;拥有多种属性&#xff0c;是机器视觉系统中的核心部件&#xff0c;具有不可替代的重要功能。 工业相机已经被广泛应用于工业生产线在线检测、智能交通,机器视觉,科研,军事科学,航天航空等众多领域 …...

成人做视频在线观看网站/十种营销方式

用了IDLE, PythonWin等几个python编辑器&#xff0c;在代码补全、参数提示等功能上都非常不满意。 终于找到PyScripter并且试用了一下&#xff0c;代码补全、参数提示等功能非常强大。这个功能其实非常重要&#xff0c;可以大大提高开发效率&#xff0c;减少出错。很满意.PyScr…...

西宁哪家网络公司做网站/十大免费网站推广平台

这两天写程序中需要&#xff0c;查到了一个非常好用的函数&#xff0c;烂笔头比好记性好用&#xff0c;记录下&#xff1a; import torch x torch.tensor([1, 2, 3]) print(x.repeat(4)) print("###################################") print(x.repeat(4, 1))运行结…...

番禺做网站哪家强/百度推广四川成都地区服务中心

openfire以会话的方式描述通信过程&#xff0c;包括ClientSession上述继承类等。 ClientSession&#xff1a;Represents a session between the server and a client.&#xff08;客户端-服务器&#xff09; LocalSession&#xff1a;The session represents a connection betw…...

网站建设和连接器区公司名字/北京网站托管

题目&#xff1a;绝对值排序 输入 n(n≤100) 个整数&#xff0c;按照绝对值从大到小排序后输出。题目保证所有的数的绝对值都不相等。 输入格式&#xff1a; 第一个数字为 n接着是 n个整数。输出格式&#xff1a; 输出这 n个整数排序后的结果。Sample Input 3 3 -4 2Sampl…...

泰安九五兴昇网络科技/成都seo论坛

申明&#xff1a;此篇文章转载自&#xff1a;https://juejin.im/post/5c11d6376fb9a049e82b6253写的真的很棒&#xff0c;感谢老钱的分享。 打通 Java 任督二脉 —— 并发数据结构的基石 每一个 Java 的高级程序员在体验过多线程程序开发之后&#xff0c;都需要问自己一个问题&…...

公司做网站会计凭证怎么做/企业软文范例

1026 程序运行时间(15)&#xff08;15 分&#xff09; 要获得一个C语言程序的运行时间&#xff0c;常用的方法是调用头文件time.h&#xff0c;其中提供了clock()函数&#xff0c;可以捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick&#xff0c;即…...