资讯动态

TDengine 3.3.2.0 版本特性深度解析:列级压缩增强、supportVnodes 动态调整与稳定性修复

发布时间:2026/9/13 7:34:39 来源:尧图企业网站定制
TDengine 3.3.2.0 版本特性深度解析列级压缩增强、supportVnodes 动态调整与稳定性修复【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine导读本文围绕 TDengine 3.3.2.0发布日期 2024-06-28官方 Release Notes 展开系统梳理该版本在列级 ENCODE/COMPRESS 支持、supportVnodes 默认值调整与热更新、stt_trigger1 场景下 compact 对读写影响优化、参数清理与行为收紧等方面的改进并逐一解读社区版与企业版新增能力及 16 项 Bug 修复。文中将结合当前仓库源码source/common/src/tglobal.c、source/libs/parser/inc/sql.y、source/dnode/mnode/impl/src/mndStb.c、source/dnode/vnode/src/tsdb/等验证实现细节帮助读者理解每个变更背后的设计意图与适用场景。一、社区版新特性与优化7 项1.1alter table add column支持 ENCODE/COMPRESS在 3.3.2.0 之前列的编码ENCODE与压缩COMPRESS属性通常只能在建表或新增列时一次性指定。本版本起对已存在的普通表与超级表都可以通过alter table ... add column为新增列显式声明编码与压缩方式从而在不重建表的前提下为后续追加的列精细控制存储行为。从解析器源码看MODIFY COLUMN语法已与列选项column_options打通并被翻译为TSDB_ALTER_TABLE_UPDATE_COLUMN_COMPRESS变更类型见 sql.y-- 新增列并指定编码/压缩 alter table tb1 add column col3 int ENCODESIMPLE8B COMPRESSLZ4; -- 修改已有列的编码/压缩属性 alter table tb1 modify column col3 int ENCODESIMPLE8B COMPRESSLZ4;在管理节点mnode侧超级表变更处理已针对性地支持了两种新的变更类型见 mndStb.cTSDB_ALTER_TABLE_UPDATE_COLUMN_COMPRESS修改超级表既有列的压缩/编码属性交由mndUpdateSuperTableColumnCompress处理TSDB_ALTER_TABLE_ADD_COLUMN_WITH_COMPRESS_OPTION带压缩选项的新增列通过mndAddSuperTableColumn末位参数为 1表示携带压缩选项落库。这意味着对于列数持续增长、且不同列数据特征差异明显的 IIoT 场景如振动信号适合 LZ4、缓慢变化的配置量适合 SIMPLE8B可以在生产环境里按需为每一列选择最合适的压缩策略而无需重建整张表。1.2stt_trigger1时 compact 对读写影响显著改善stt_trigger是数据库级配置用于控制每次落盘提交时按文件数触发的合并merge行为。在 3.3.2.0 之前的版本中当stt_trigger1时由于合并触发过于频繁compact文件合并操作会明显挤占读写路径的资源导致写入延迟升高、查询变慢。本版本对stt_trigger1场景下的合并调度逻辑进行了专项优化。从存储引擎源码可以印证其触发模型tsdbMerge.c 中以merger-sttTrigger为底数计算合并层级pow(merger-sttTrigger, level)sttTrigger直接从 vnode 配置读取tsdb-pVnode-config.sttTriggertsdbFS2.c 中仅当sttTrigger 1时才在非后台任务场景下按文件数量阈值触发合并当sttTrigger 1时合并更多交由提交EVA_TASK_COMMIT等任务驱动tsdbCommit2.c 中committer-sttTrigger 1时走专用提交路径。优化后的效果是在stt_trigger1的高频合并模式下compact 对读写的影响被控制在更小的范围内适合对写入实时性要求高、希望数据尽快可见的小文件合并场景。1.3supportVnodes默认值调整为5 2 * CPU coressupportVnodes是 dnode 级别的核心配置表示单个数据节点dnode最多可承载的 vnode 数量直接决定该节点在集群中的 vgroup虚拟数据组分配容量也间接影响每个 vnode 可使用的内存、线程等资源额度。3.3.2.0 将该参数的默认值由固定值调整为随机器 CPU 核数动态计算5 2 * CPU cores。实现位于 tglobal.ctsNumOfSupportVnodes tsNumOfCores * 2 5; tsNumOfSupportVnodes TMAX(tsNumOfSupportVnodes, 2); // 下限保护至少为 2即CPU 核数默认 supportVnodes4138211637326964133之所以引入下限保护TMAX(..., 2)是为了防止极低核数机器如 1 核计算出过小甚至为 0 的值导致节点无法创建 vnode。该默认值同时也会在配置项缺失cfgGetItem返回空时被重新计算并写回见 tglobal.c。在多节点集群中mnode 正是基于每个 dnode 的numOfSupportVnodes与已用 vnode 数来判断是否还能在该节点上分配 vgroup见 mndVgroup.c 中if (pDnode-numOfVnodes pDnode-numOfSupportVnodes)的容量判断并在节点打分时把剩余容量作为重要因子mndVgroup.c。因此该默认值的上调意味着同等硬件条件下节点可承载的 vnode 数量更多更适合 vnode 数量偏小的海量小库场景。1.4 移除lossyColumns参数lossyColumns有损列配置项在 3.3.2.0 中被彻底移除。当前仓库的配置注册表中已不再包含该参数在 tglobal.c 的taosAddServerCfg配置项列表中无对应条目。升级注意事项如果您在旧版本taos.cfg中配置了lossyColumns升级到 3.3.2.0 后该配置项会被忽略不再生效相关能力如需保留请改用列级COMPRESS属性配合 1.1 节的alter table ... add column/modify column显式声明。1.5alter table修改多个参数时仅一个参数生效此前对同一张表通过一条alter table同时修改多个参数如同时修改 TTL、COMMENT、KEEP 等时各参数可能被逐个应用带来不一致风险。3.3.2.0 起一条alter table语句中即使携带多个参数修改也只会有一个参数真正生效其余参数被忽略。这意味着业务代码中需要把一次改多个属性的语句拆分为多条独立语句执行。从超级表变更处理逻辑看TSDB_ALTER_TABLE_UPDATE_OPTIONS分支见 mndStb.c只处理单一 option 集合也印证了单参数生效的行为。1.6supportVnodes支持热更新与默认值调整配套的另一项改进是supportVnodes现在支持热更新无需重启taosd。其配置定义见 tglobal.c可看出动态属性cfgAddInt32(pCfg, supportVnodes, tsNumOfSupportVnodes, 0, 1024, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER, CFG_CATEGORY_LOCAL, CFG_PRIV_SYSTEM);取值范围0 ~ 1024CFG_DYN_ENT_SERVER该参数属于企业版Enterprise可动态调整的服务器级配置修改后立即生效全局变量tsNumOfSupportVnodes通过配置回调tglobal.c同步更新。运维上可通过修改taos.cfg后执行alter system或在集群管理界面调整新值即刻影响后续 vgroup 的分配决策无需滚动重启。1.7 支持 CentOS Stream3.3.2.0 扩展了对CentOS Stream的支持。CentOS Stream 作为 RHEL 的上游滚动发行版与 CentOS Linux 的软件包生态存在差异。使用 CentOS Stream 部署时请使用本版本打包产物安装安装与启动方式与其他 RPM 系发行版一致参考 packaging/rpm/makerpm.sh 与 packaging/rpm/tdengine.spec。二、企业版新特性与优化22 项以下能力均属于 TDengine 企业版Enterprise Edition范畴代码中由#ifdef TD_ENTERPRISE等宏控制可参见 mndStb.c 中的企业版专属逻辑示例。2.1 集群管理增强Balance vgroup leader for specified db按库均衡 vgroup leader允许针对指定数据库执行 leader 均衡使热库的读写压力更均匀地分布在多个 dnode 上避免单节点成为热点。普通用户不再允许创建数据库收紧权限模型创建数据库create database仅限具备相应系统权限的用户如 root普通用户需由管理员授权后方可执行降低误建库带来的资源浪费与安全隐患。2.2 多级存储增强新增配置项disable_create_new_file在多级存储multi-tier storage中当某层级磁盘空间紧张或需要维护时可通过该配置禁止在该层级上创建新的数据文件配合既有迁移机制实现更可控的容量管理。跨层数据迁移限速多级存储中数据从热层向冷层迁移如从 NVMe SSD 迁移至 HDD/S3时新增速率限制避免迁移流量挤占正常读写带宽保障生产业务的 I/O 稳定性。2.3 安全与加密IP 白名单启停支持热更新IP 白名单IP whitelist的启用/停用无需重启服务修改后立即生效便于在遭受异常访问时快速收紧或放开访问控制。数据库加密关键配置优化改进数据库加密相关配置项的键管理与校验逻辑提升加密配置的可用性。支持 TDengine 2.0/3.0 数据压缩企业版数据接入/迁移能力扩展可对来自 TDengine 2.0 与 3.0 的数据执行压缩处理。2.4 数据接入与数据源扩展taosX支持 Oracle 数据源可通过 taosX 将 Oracle 中的数据实时同步至 TDengine。支持 Microsoft SQL Server 数据源新增 SQL Server 数据源接入补齐常见关系型数据库同步能力。OPC 类型任务可动态获取新数据点OPC UA/DA 类型的数据接入任务无需重启即可自动发现并同步数据源中新增的测点data point。PI 回填支持断点续传PIOSIsoft PI历史数据回填任务在中断后可从中断点继续无需全量重跑大幅降低大流量回填的运维成本。PI 回填任务支持 TransformerPI 回填链路中可插入 Transformer 对原始数据进行清洗、转换后再入库。PI 数据访问性能优化优化 PI 数据源的读取性能降低大吞吐同步时的延迟与资源消耗。PI 数据源可将新测点/数据元素属性同步至 TDengine数据源侧新增的测点及其数据元素属性元数据可自动同步为 TDengine 中的表结构实现测点即表的动态建模。taosX writer 支持原生连接taosX 写入端支持使用原生连接native connection写入 TDengine替代或补充 RESTful 写入方式。Kafka 支持 GSSAPIKafka 数据源接入支持 GSSAPIKerberos认证满足企业级安全合规的 Kafka 消费场景。MQTT 类型任务可拉取样本数据MQTT 接入任务支持从数据源拉取样本sample数据便于在配置阶段验证 topic 结构与解析规则是否正确。支持 Object 数组数据类型扩展数据类型支持可处理 Object 数组对象数组类型的消息负载。支持通过自定义脚本解析数据允许用户以自定义脚本对原始消息做预处理/解析再映射到 TDengine 表结构提升对复杂报文格式的适配能力。支持通过插件进行动态数据过滤数据接入链路中可挂载插件按业务规则动态过滤数据从源头减少无效数据入库。2.5 taos-explorer 增强支持 GEOMETRY / VARBINARY 数据类型taos-explorer可视化控制台可展示与编辑 GEOMETRY、VARBINARY 类型的数据便于查看轨迹、二进制等特殊类型字段。支持导入/导出用户与权限信息可在 taos-explorer 中批量导入、导出用户账号及权限配置方便多环境间权限模板复用与审计归档。三、Bug 修复16 项3.1 SQL 语句与元数据类补齐子表修改 TTL、COMMENT 的缺失命令此前子表subtable缺少修改 TTL 与 COMMENT 的命令入口本版本补齐使子表与超级表的属性管理能力对齐。insert ... select子查询带常量字段时插入失败修复insert into tb select ...中子查询包含常量字段如select 1, ts, val from ...时插入报错的问题。复合主键 VARCHAR 长度超过 125 时查询导致taosd崩溃修复复合主键中 VARCHAR 列长度超 125 字节时查询触发崩溃的问题同时意味着该场景下需注意复合主键的长度限制约束。3.2 查询引擎类first/last interval fill查询导致taosd崩溃修复聚合首/末值结合时间窗口与填充时偶发崩溃。cast函数查询导致taosd崩溃修复特定数据类型组合下cast转换导致的服务崩溃。event_window查询导致taosd崩溃修复事件窗口event window计算路径中的崩溃缺陷。interp partition by column fill查询导致taosd崩溃修复插值查询与按列分区、填充组合使用时的崩溃。event_window having过滤条件不生效修复事件窗口结果上having条件被忽略的问题。last查询返回结果不符合预期修复last最新一条查询在特定数据分布下返回值错误的问题。升级到 3.3.0.0 并开启cachemodel后last group by行数返回错误修复缓存模型开启时分组求最新值返回行数不准的问题涉及升级兼容性。3.3 消息队列与数据订阅类删除 topicA 的 consumer group 导致同 group 的 topicB 消费失败修复tmqTDengine Message Queue中删除某一 topic 的消费组后同一 group 名在另一 topic 上消费异常的问题。3.4 稳定性与资源类参数绑定列索引越界导致taosd崩溃修复 stmt 参数绑定parameter binding时列索引越界未被校验、进而触发崩溃的问题提示使用方应在绑定前严格校验列索引合法性。多次resetlog后taosdlog日志消失修复反复执行日志重置命令后日志文件异常消失的问题。taosX同步首列为 null 值导致taosd崩溃企业版修复企业版数据同步任务中首列空值引发的服务崩溃。taos-explorer 导航栏不显示全部超级表名称企业版修复大量超级表场景下导航栏列表缺失的问题。TDengine CLI 与 taosAdapter CPU 占用过高优化taosCLI 与taosAdapter在空闲/低负载状态下的 CPU 占用。四、升级与运维建议针对 3.3.2.0 的变更升级与运维时有以下几点值得关注配置兼容性lossyColumns已移除升级前请检查taos.cfg及各节点配置移除或忽略该参数supportVnodes默认值改为按核数计算若旧配置显式设置了较小值且未做调整升级后仍以旧值为准可结合新默认值重新评估。SQL 行为变更alter table一次仅一个参数生效涉及批量修改属性的脚本需要改写为逐条执行alter table ... add column现在可直接声明ENCODE/COMPRESS新建列时可充分利用。热更新能力supportVnodes支持企业版热更新扩缩容或调整 vnode 容量时无需重启IP 白名单启停同样支持热更新。崩溃类修复的升级价值多个taosd崩溃场景cast、event_window、interpfill、参数绑定越界、复合主键超长等已修复生产环境建议及时升级以避免线上事故。五、总结TDengine 3.3.2.0 是一个典型的稳定性优先 关键能力补强版本社区版通过列级 ENCODE/COMPRESS、supportVnodes动态默认值与热更新、stt_trigger1合并调度优化提升了存储管理的灵活性与集群容量配置的自动化程度企业版则围绕多级存储、安全管控、taosX 数据接入生态Oracle/SQL Server/Kafka GSSAPI/OPC/PI与 taos-explorer 体验进行了系统性增强16 项 Bug 修复覆盖查询引擎、消息队列、参数绑定等关键路径显著降低了线上运行风险。对于运行 3.3.x 早期版本的用户该版本具备较高的升级价值。【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价