关于 3.0 和 2.0 的数据文件差异以及性能优化思路

news2024/11/18 0:33:58

如果需要对数据库性能优化,了解数据文件的存储方式和工作原理是必要的。

对于时序数据库(Time Series Database) TDengine 来说,在 2.x 版本中时序数据的保留策略是由keep和days这两个参数把控的。(详情可见:五分钟掌握TDengine时序数据的保留策略)我们通过 keep 和 days 来对时序数据进行分段保留,而每一段时间的数据就可以便对应着数据库中数据vnode目录下的一组数据文件,也就是我们这篇文章的主角。

在3.0 版本中,此处逻辑保持一致,只是为了更好的体现“每一段时间的数据”,我们把 "days" 参数更名为了“duration”。

而上文提到的一个数据文件组,在2.x 版本中是这个样子的,他们代表了 vnode24 中所有表在某10天(days默认参数值)内的所有数据,关于这些文件的具体含义可以参考官方文档和:五分钟掌握TDengine数据文件的工作原理

 

在 2.x 的后期版本中,为了提升预计算(sum、max、min)的性能,又把 .data/.last 文件中所有数据块的预计算结果抽离出来形成了 smad/smal 文件,于是文件组变成了如下5个文件:

 到了 3.0 版本中,这个数据文件组继续演变成了下图这样的形态。

那么,他们有哪些具体的变化呢?

 

1.数据文件(.data)

其中,.data类文件逻辑保持不变,存储的是实际入库的时序数据,为多个数据块构成。一个数据块只属于一张表,除此之外,每一个数据块也都记录着预计算中的行数数据,属于预计算中的count 函数计算结果。 

2.索引文件(.head)

.head 文件和此前逻辑保持不变,存储的是 .data 文件中数据块的索引信息。查询请求正是通过这些索引信息,来迅速定位表,定位时间范围,从而在 .data 文件中找到对应的数据返回给用户。

3.预计算文件(.sma)

.sma 文件:存储数据块中每列数据预计算数据的文件。文件中只存储了 .data 文件中数据块的预计算。预计算是为了加速查询,尽可能避免从硬盘中读取原始数据。.sma 等于 2.x 后期版本中的 smad 文件,而 smal 则被移除了。

4.碎片文件(.stt)

.stt 文件则是取代了 2.x 版本的 .last 文件,他们的大体功能保持一致,简单来说就是保存每一张表从内存落盘到磁盘时的碎片数据(小于 minrows),但是他们的运行机制有了一些区别:

在 2.x 版本中,当.last文件小于32k的时候,即便是当中某表的碎片数据已经满足行数(大于等于 minrows)要求合并到了.data文件,但是.last 文件仍然只是会被追加写入,而并不会清理掉这部分数据,该 32k 的限制是为了防止对文件频繁的操作影响性能。

而到了 3.0 的时候,在 .stt 文件中,属于同一个超级表的数据会存储在同一个数据块中,且数据块中的数据按照 (uid(表的唯一标识), timestamp, version)递增排列。每次落盘,数据文件组都会生成一个新的 stt 文件,用来放本次落盘中的散碎数据。当 .stt 文件个数超过一定的阈值 (由建库参数:stt_trigger 控制),则首先将多个 .stt 文件的碎片数据合并后,就会根据实际情况来决定写入 .data 文件,或写入新的 .stt 文件中。

5.性能影响:

在刨除函数本身的性能问题,和数据本身质量问题(如数据版本过多),硬件资源不足问题,数据建模不科学等因素之外。上述几个数据文件的配置对数据库性能的影响是根本性的。

整体的性能影响因素:

一. 关于 .data 文件,它的工作原理,整体上仍可以参考:五分钟掌握TDengine数据文件的工作原理

二. 关于 .head 文件,它记录的是.data 文件中数据块的索引,因此数据块的数量会直接影响索引块的数量,也就会直接影响到查询性能,细节可以参考这篇文章:文章:TDengine 3.0.2.5 查询再优化!揭秘索引文件的工作原理(已发布)

三. 关于 .stt 文件,记录的是碎片化数据,对于性能的影响因素大致如下:

  1. 数据库级别 buffer 参数 (2.x 中,cache 和 block 的乘积) 的设置是否合理,如果buffer过小,导致落盘数据行数少,便会形成大量碎片影响性能。相对的,如果表过宽,导致单行数据过大,同样会导致落盘行数变少,同样影响性能,两者原理相同。
  2. minrows 设置过大,符合标准的数据块变少,导致碎片增多。
     
  3. 关于上文的 STT_TRIGGER 这个参数 数据库 | TDengine 文档 | 涛思数据:它代表触发 .stt 文件合并时的个数。默认为 1,范围 1 到 16。对于少表高频写入频繁触发落盘的场景,此参数建议使用默认配置,或较小的值;而对于多表场景,此参数建议配置较大的值。核心思想是会经常合并size较大的 .stt 会比较浪费磁盘io影响写入。

四.关于 .sma 文件,预计算的聚合查询性能主要受 .sma 文件大小所影响。所以表宽/buffer/minRows/maxRows 参数都会影响,具体优化逻辑可以结合上述内容反复调试。

性能调优是十分复杂的工作,尤其是对于场景特殊,比如宽列、多表、并发、大字段等情况,各有不同的优化思路。开源版用户可以结合文章与文档进行调试,企业版用户可以直接由TDengine 团队协助定制部署、以及后面持续的运维和性能优化工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/705549.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云原生——Kubenetes基础

❄️作者介绍:奇妙的大歪❄️ 🎀个人名言:但行前路,不负韶华!🎀 🐽个人简介:云计算网络运维专业人员🐽 目录 一.什么是Kubernetes? 二.为什么你需要 Kubern…

markdown数学公式总结

行内与独行 行内公式:将公式插入到本行内,符号: 公式内容 公式内容 公式内容,如: x y z xyz xyz 独行公式:将公式插入到新的一行内,并且居中,符号: 公式内容 公式内容 公…

RISC-V IDE MRS使用笔记(十):嵌入式编程开发技巧汇总

RISC-V IDE MRS使用笔记(十):嵌入式编程开发技巧汇总 MRS常见嵌入式开发技巧: Q1:如何修改程序编译生成库? A1:在工具栏中点击活动工程的编译配置按钮,在Build Artifact的Tab页面指定目标类型,选中为Stat…

uniapp仿浙北惠生活微信小程序

最近给公司写了一个内部微信小程序,功能比较简单,之前是用微信小程序原声写的,一遍看文档一边写,js,wxml,wxcc,json分在不同文件的写法很不习惯,于是花了两天用uniapp重写了一遍&…

思维导图对我生活以及工作的帮助(用户投稿)

作为一名白领,我每天都面临着各种各样的工作和生活压力。 为了更好地应对这些挑战,我开始尝试使用思维导图来帮助自己更好地组织和管理各种信息和任务。其中一款非常优秀的软件就是ProcessOn思维导图,它为我的工作和生活带来了很多便利和帮助…

Spring Boot|启动图案修改ASCII字符画

效果图 实现 在项目目录的resources文件夹中新建一个banner.txt,将内容放入即可: // _ooOoo_ // // o8888888o // // …

华为ENSP配置无线AC-网关模式

1、配置交换机以及AC的接口为trunk 交换机 vlan b 10 20 # interface GigabitEthernet0/0/1port link-type trunkport trunk allow-pass vlan 10 20 # # interface GigabitEthernet0/0/2port link-type trunkport trunk pvid vlan 10port trunk allow-pass vlan 10 20 # …

Linux系统安装QQ最新版 2023-06-30

腾讯在2023-05-30更新了linux版的qq,这次界面终于不再复古,好看多了。 安装步骤: 1.进入官网,寻找合适的安装包下载 https://im.qq.com/linuxqq/index.shtml 选择跟自己计算机匹配的版本,一般都是X86,如…

JAVA-编程基础-05-方法的定义、调用、重载

Lison <dreamlison163.com>, v1.0.0, 2023.03.22 JAVA-编程基础-05-方法的定义、调用、重载 文章目录 JAVA-编程基础-05-方法的定义、调用、重载方法的概念什么是方法 方法的定义和调用无参数方法定义和调用方法调用过程图解 带参数方法的定义和调用带返回值方法的定义和…

Ureport 多数据集合关联显示

ureport 使用较少&#xff0c;目前单位这边有项目正好使用到了&#xff0c;也遇到不少坑&#xff0c;和其他报表稍微有些不同&#xff0c;在这里记录一下&#xff0c;为大家排一下坑 目前需求是要求数据以这样显示 1、创建数据源 1.1 B2、C1、D2 、C4、C2 各使用了不同的数据…

chatGPT流式回复是怎么实现的

chatGPT流式回复是怎么实现的 先说结论&#xff1a; chatGPT的流式回复用的就是HTTP请求方案中的server-send-event流式接口&#xff0c;也就是服务端向客户端推流数据。 那eventStream流式接口怎么实现呢&#xff0c;下面就进入正题&#xff01; 文章目录 chatGPT流式回复…

UE5ControlRig脚部IK匹配地面(FootIK)的简易实现

UE的Foot IK可以有多套方案&#xff0c;老的有动画蓝图中用TwoBoneIK&#xff0c;新的做法有ControlRig的BasicIK、FullBodyIK。博主针对FootIK做一个简单的验证&#xff0c;因此使用ControlRigTwoBoneIK的做法&#xff0c;并做一下记录&#xff0c;之前做过UE FootIK的大佬可以…

小白到运维工程师自学之路 第四十四集 (mariadb高可用集群故障转移)

一、概述 故障转移是指在集群中某个节点发生故障时&#xff0c;自动将服务转移到其他正常节点上的 过程。在MariaDB高可用集群中&#xff0c;通常使用主从复制的方式来实现故障转移。其中一个 节点被指定为主节点&#xff0c;负责处理所有的写操作和部分读操作&#xff0c;其…

通过无模型多代理强化学习掌握Stratego游戏

Stratego是一款流行的双人不完美信息棋盘游戏。由于其复杂性源于其巨大的游戏树、在不完善的信息下进行决策以及一开始的分段部署阶段&#xff0c;Stratego对人工智能&#xff08;AI&#xff09;构成了挑战。以前的计算机程序充其量只在业余水平上运行。 Perolat等人引入了一种…

Crontab的sendmail邮件发送引发磁盘问题

一.背景 大清早的收到一台服务器的内存占用高达98%的钉钉告警。 回想了一下&#xff0c;这台服务器没跑什么业务啊&#xff0c;咋从凌晨1点就开始告警呢? 赶紧登录服务器&#xff0c;top 按照内存倒序一下&#xff0c;没发现占用特别大的进程。内存监控图如下: 但是发现了很…

Windows环境本地部署Oracle11g r2实操手册

前言&#xff1a;一直在做其他测试&#xff0c;貌似都忘了Windows环境oracle安装&#xff0c;这是一个很早很早的安装记录了&#xff0c;放上来做个备录给到大家参考。 环境&#xff1a; &#xff08;都是常规系统及工具&#xff0c;官网度娘搜索即可下载测试学习&#xff09;…

通过无代码CDC工具实现Oracle实时同步到Mysql

Oracle数据实时同步需求 现代企业对于数据实时同步的需求日益迫切&#xff0c;特别是在涉及Oracle数据库的情况下。实时同步数据对企业来说至关重要&#xff0c;因为它可以确保不同系统之间的数据始终保持一致性和最新性&#xff0c;提供准确的决策支持和及时的业务反应。 针…

Leetcode-每日一题【725.分隔链表】

题目 给你一个头结点为 head 的单链表和一个整数 k &#xff0c;请你设计一个算法将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等&#xff1a;任意两部分的长度差距不能超过 1 。这可能会导致有些部分为 null 。这 k 个部分应该按照在链表中出现的顺序排列&#…

在 JavaScript 中获取选中或突出显示的文本

本文将展示我们如何使用 DOM API 来让用户在屏幕上突出显示或选择文本。 DOM API 为我们提供了 getSelection() 方法&#xff0c;该方法允许我们获取用户选择的文本。 窗口对象可以直接访问这个方法。 让我们看看如何实际实现此功能。 使用 JavaScript 中的 window.getSelecti…

Vscode快速对比两个文件的不同部分

文件对比第一种方法&#xff1a; 打开vscode&#xff0c;打开文件或者文件夹 选中需要对比的文件 按住ctrl选择要对比的另一个文件&#xff0c;鼠标右键选择将已选项进行比较 结果如下&#xff1a; 文件对比第二种方法&#xff1a; 打开文件&#xff0c;点击鼠标右键 命…