TDengine 3.3.3.0 版本详解:新增函数、多级存储、慢查询日志与 62 项修复全解读

📅 发布时间:2026/9/22 9:38:02
TDengine 3.3.3.0 版本详解:新增函数、多级存储、慢查询日志与 62 项修复全解读
TDengine 3.3.3.0 版本详解新增函数、多级存储、慢查询日志与 62 项修复全解读【免费下载链接】tdengineTDengine is an open source, high-performance, cloud native time-series database optimized for Internet of Things (IoT), Connected Cars, Industrial IoT and DevOps.项目地址: https://gitcode.com/taosdata/tdengineTDengine 3.3.3.0 是于 2024-10-07 发布的社区版本部分企业版能力随版本一并推出其核心增量集中在函数体系的显著扩充新增 22 个数学/字符串/统计/日期函数、多级存储与数据源接入的扩展Azure Blob 对象存储、MongoDB 数据源以及服务端可观测性的统一慢查询统一写入 log 库。本文将围绕版本说明 3.3.3.0 的脉络结合仓库源码逐一解读新特性的实现原理、参数默认值与使用方式并完整梳理本版本的 62 项问题修复帮助读者在升级与使用时做到心中有数。一、新特性与优化一次看懂 20 项更新1.1 函数体系大扩充22 个新函数正式可用本版本一次性新增了 22 个函数覆盖数学运算、字符串处理、日期时间与统计聚合四类场景。在源码中这些函数统一注册于 builtins.c 的函数注册表例如stddev_pop、var_pop属于FUNCTION_TYPE_STDDEV / FUNCTION_TYPE_STDVAR聚合函数注册时同时打上了FUNC_MGT_AGG_FUNC | FUNC_MGT_TSMA_FUNC分类标记说明它们不仅可用于普通聚合查询也支持 TSMA时间序列内存加速场景其输入限定为数值类型输出为 DOUBLE见 builtins.c 注册段。新增函数完整清单及用途分类如下分类函数数学函数pi、exp、ln、mod、rand、sign、degrees、radians、truncate/tunc字符串函数char、ascii、position、trim、replace、repeat、substring、substr、substring_index日期时间函数week、weekday、weekofyear、dayofweek统计聚合函数stddev_pop、var_pop这些函数在 builtins.c 中均能找到对应的FUNCTION_TYPE注册项如pi、degrees、radians、truncate、substring_index、dayofweek、weekofyear等均在注册表中使用时注意与既有同名或近义函数区分例如新增的truncate别名tunc用于截断与四舍五入的round语义不同。1.2 多级存储支持微软 Azure Blob [企业版]本版本将多级存储分级存储的后端对象存储扩展到微软 Azure Blob。多级存储允许将冷数据从本地磁盘自动迁移到对象存储中以降低存储成本。此前社区/企业版已支持 S3 等对象存储本次新增 Azure Blob 后用户在配置多级存储时可将冷数据层指向 Azure 账号下的存储容器。相关配置与使用方式沿用多级存储的既有框架存储层级定义见 cos.h 等对象存储抽象头文件仅后端适配对象增加。注意Azure Blob 支持为企业版能力社区版不包含。1.3 支持 MongoDB 数据源 [企业版]taosX企业版数据同步工具新增 MongoDB 数据源DataIn可以将 MongoDB 中的数据实时同步到 TDengine。本次同时优化了 MongoDB DataIn 任务的日志输出信息见下文修复项 6便于用户定位同步过程中的问题。1.4 TDengine 支持 macOS 企业版客户端 [企业版]企业版客户端新增 macOS 平台支持macOS 用户可以安装企业版客户端连接 TDengine 服务端便于在 macOS 上进行开发调试与运维。1.5 taosX 日志默认不写入 syslog [企业版]taosX 的日志输出策略调整默认不再向系统 syslog 写入日志避免污染系统日志降低对系统日志文件的影响如需保留 syslog 输出可通过 taosX 配置显式开启。1.6 服务端记录所有慢查询信息到 log 库这是本版本可观测性方面的重要改进服务端将所有慢查询信息统一写入系统的 log 库即log数据库而不再仅依赖普通日志文件输出。配合下方 1.14「统一慢查询和普通日志的保存策略」用户可以通过 SQL 直接查询历史慢查询记录例如按时间、耗时等条件检索定位业务侧的性能瓶颈比翻查日志文件更高效。慢查询的判定阈值由服务端既有慢查询参数如slowqueryLogThreshold控制超出阈值的查询即会被记录到 log 库。1.7 show cluster machines 查询结果中添加服务端版本号 [企业版]SHOW CLUSTER MACHINES的输出结果中新增服务端版本号字段便于在集群中快速核对各节点的版本一致性排查多版本混跑带来的兼容性风险。1.8 删除保留关键字 LEVEL/ENCODE/COMPRESSLEVEL、ENCODE、COMPRESS三个词不再作为 SQL 保留关键字保留可以直接用作列名、表名、数据库名等标识符。这意味着此前必须加反引号backtick才能使用的名称现在可以裸写。与之一致的是修复项 52可以使用 SQL 保留字作为列名创建超级表、使用保留字作为标签名——注意虽然这两个保留字被移除但 SQL 标准中真正的保留字如select、from等仍不可直接作为标识符请以实际解析行为为准。1.9 禁止动态修改临时目录临时目录tempDir不再支持动态修改。在源码 tglobal.c 中tempDir配置项注册时的动态属性为CFG_DYN_NONE即静态配置修改后必须重启taosd才能生效运行时热更配置会被拒绝。这一收紧是为了避免在运行中切换临时目录导致文件句柄、中间文件归属错乱从而引发数据读写异常。tempDir既可用于服务端CFG_SCOPE_BOTH同时作用于客户端与服务端其目录在启动时会被创建校验见 tglobal.c 相关逻辑。1.10 round 函数支持四舍五入的精度round函数增强支持指定精度小数位数进行四舍五入例如round(3.14159, 2)返回3.14满足金额计算、指标归一化等对保留小数位有明确要求的场景。1.11 timediff 函数增强timediff函数行为升级返回时间戳expr1 - expr2的差值结果支持负数结果并可按time_unit指定的时间单位如秒、分、时等近似精度返回。此前负差值的处理与单位近似行为受限本版本补齐了这两点。1.12 max/min 支持字符串输入max/min聚合函数新增字符串类型输入支持当输入参数为字符串类型时返回按字典序比较的最大/最小字符串值。这对于需要对标签列、文本字段做极值统计的场景非常实用。1.13 提升 taosX 数据同步性能 [企业版]企业版 taosX 的整体数据同步性能得到优化包括更高效的任务调度与更低的同步延迟具体提升幅度与数据源/目标库配置有关。1.14 统一慢查询和普通日志的保存策略慢查询日志与普通日志在保存策略上实现统一统一了日志文件的大小、滚动与清理规则避免慢查询日志与普通日志因策略不一致导致磁盘占用失控或日志过早被清理。该策略与 1.6 的「慢查询写入 log 库」配合构成完整的两层可观测体系。1.15 优化订阅功能中 offset 文件过大且加载过慢的问题优化了数据订阅consumer场景下 offset 持久化文件的加载性能当 offset 文件因长期订阅而变得很大时启动/恢复时加载时间显著缩短减少订阅组重启后的恢复延迟。1.16 升级 JDBC driver 至 3.2.5Java 连接器 JDBC driver 升级至 3.2.5包含该版本的 bug 修复与功能改进建议 Java 项目同步升级驱动版本以获取最新修复。1.17 Kafka connector 提交改为同步方式Kafka connector用于 Kafka 与 TDengine 之间数据同步的连接器的 offset 提交方式由异步改为同步确保任务停止或异常时已消费数据的 offset 能可靠提交降低重复消费/丢失风险与修复项 11「Kafka DataIn 任务状态正常但停止消费」配套理解。1.18 新增参数表查询不存在时是否报异常新增服务端参数用于控制「查询的表不存在时是否报异常」。该参数默认情况下查询不存在的表返回空结果而非报错保持兼容旧行为开启后查询不存在的表会直接抛出异常便于应用层快速发现表名拼写错误或表被删除的问题。具体参数名以实际taosd配置项为准配置后需重启服务生效。1.19 扩大 tsma 的 interval 最大窗口到 1 年TSMATime Series Memory Acceleration时间序列内存加速的interval最大窗口从原先的限制扩大到1 年允许对更长周期的数据建立 TSMA 加速降低按年聚合类查询的扫描成本。1.20 支持从 CSV 文件批量建表新增从 CSV 文件批量建表能力用户可以直接以 CSV 文件描述表结构或表结构标签批量创建大量子表大幅降低手工CREATE TABLE的脚本编写成本尤其适合物联网场景下按设备批量建表的诉求。二、修复问题全景62 项修复的分类解读本版本修复了 62 项问题覆盖稳定性、同步链路、查询正确性、内存管理与平台兼容等多个维度下面按主题归类解读便于快速定位与本业务相关的内容。2.1 数据同步与连接器链路企业版为主修复项问题描述1服务器重启后 mqtt 写入任务未自动重新启动2Windows 上 agent 和 PI connector 连接错误导致任务终止3重启 taosadapter 后 mqtt 任务异常、无法同步数据4Explorer 上 mqtt 写入任务状态不正确5重启 taosx 后运行中的任务没有被重新调度6MongoDB DataIn 任务日志输出信息优化7local.toml 文件为空时备份失败8taosx replica 任务在网络断开恢复后数据同步异常93.1 版本同步到 3.3 版本 meta 数据不同步10taosadapter 异常重启后 mqtt 任务无法自动恢复11Kafka DataIn 任务状态正常但停止消费28手动点击停止按钮任务无法停止42AVEVA historian 数据源连通性及获取示例数据功能57schema 变更下通过 taosx 导入数据导致 taosd crash这批修复集中解决了数据同步任务在重启、断网、异常退出等场景下的恢复与调度问题。升级建议如果生产环境大量使用 mqtt/Kafka/MongoDB/AVEVA 等同步任务务必升级并验证任务重启后的自动恢复行为。2.2 查询正确性与崩溃问题修复项问题描述12last interval 查询导致 crash18last_row 查询结果与预期不符19指定 information_schema 库登录导致 taosd 崩溃21元数据克隆函数对象错误导致 crash23STDDEV 函数计算结果随机不正确26拼接 sql 写入报错 int data overflow27大量查询并发场景下元数据一致性34无效断言在两个 stt 位于数据块时间轴分布空洞场景引发的 crash36使用结果集函数判断时间线的有序性37超级表投影查询慢41limit 过小时的判断错误44last 函数查询全空列导致 crash45查询 cid 不在当前版本 schema 时触发 assert 导致 coredump47timezone 为 UTC 且数据包含1970时查询报错50查询空指针问题54流计算 checkpoint 处理中断言失败导致的 crash61NOT IN (NULL) 查询结果不正确其中值得关注的是last interval、last_row、last全空列等时间序列查询的边界场景修复说明本版本对 last 系列函数的边界行为做了系统性的收敛STDDEV随机不正确与新增的stddev_pop函数同期发布统计类场景建议升级后回归验证。2.3 稳定性、内存与存储层修复项问题描述13数据写入时热更 stt_trigger 导致 taosd 崩溃16tsdb 加载缓存导致 taosd 死锁22缓存更新时数据填充游标错误导致 taosd 异常退出30多线程并发 describe 同一子表导致 crash32创建 websocket 连接时 taosadapter 内存泄漏35S3 长时间拉取数据失败38多节点环境事务返回码与事务状态不一致导致事务堆积39stt_trigger1 时 delete 数据之后重新出现的错误40 / 56节点恢复阶段 taosd 内存占用过高导致 OOM43taosd 服务无法正常停止46写入消息体过大时 OOM新增 syncLogBufferMemoryAllowed 参数控制48取消 mnode 节点的消息同步等待超时49集群节点异常恢复后集群授权状态失效51restore vnode 时将 vgroup 暂时设置成单副本53高并发查询期间内存持续增长58 / 59可能的内存泄漏 / 客户端内存泄漏关于修复项 46新增 syncLogBufferMemoryAllowed 参数针对写入消息体过大导致的 OOM本版本新增了syncLogBufferMemoryAllowed参数来控制同步日志缓冲区的内存上限。从源码 tglobal.c 可以看到其注册信息类型Int64字节默认值由服务端内存自动推导取值范围下限为TSDB_MAX_MSG_SIZE * 10上限为INT64_MAX作用域服务端CFG_SCOPE_SERVER支持企业版服务端动态调整CFG_DYN_ENT_SERVER即企业版可在运行中动态修改社区版需重启生效分类本地配置CFG_CATEGORY_LOCAL系统权限CFG_PRIV_SYSTEM。默认值的推导逻辑在 tglobal.c 初始化段取总内存的 10%tsTotalMemoryKB * 1024 * 0.1并限制在TSDB_MAX_MSG_SIZE * 10到TSDB_MAX_MSG_SIZE * 10000之间。也就是说默认缓冲区约等于物理内存的 10%在上下限约束内。当写入并发高、消息体大导致内存告警时可据此调小该值以抑制内存峰值或调大以容纳更大吞吐。2.4 安全、权限与访问控制修复项问题描述14修改 root 密码后 taoskeeper 反复重启24多级存储及加密场景下无法添加离线节点25TDengine CLI 无法输入大于 20 字节长度的密码62TDengine CLI 和 taosBenchmark 不能成功连接云服务实例修复项 25 值得注意此前 CLI 输入密码的长度上限为 20 字节本版本放开兼容更长的强密码策略修复项 62 则打通了 CLI 与 taosBenchmark 连接云服务实例的链路。2.5 元数据、DDL 与语法修复项问题描述20group by 语句支持位置参数和别名语法52可用 SQL 保留字作为列名创建超级表、作为标签名553.3.2.8.0820 版本中可查询到 information_schema 中不存在的表 perf_queries60开源用户修改 stt_trigger 值升级后无法修改其他数据库选项29列或标签包含逗号/引号时导出 CSV 文件错误2.6 其他体验类修复修复项问题描述15云服务中服务重启后流计算无法继续17查询时 fill 值指定为 0 报错31数据浏览器查询结果未按配置时区展示33社区版无法在 redhat 操作系统正常启动63注TDengine CLI 和 taosBenchmark 不能成功连接云服务实例同修复项 62说明版本说明中修复项 62 与 63 描述内容一致原文第 95 行重复列出本文按原文如实保留编号实际修复数量以官方正式发布说明为准。三、升级建议与验证要点函数类回归本版本新增stddev_pop/var_pop并修复STDDEV计算随机错误涉及统计类查询的用例务必回归同时验证新增的 22 个函数builtins.c 中有注册定义在目标表结构下行为符合预期特别是max/min的字符串输入与round精度参数。同步链路回归mqtt/Kafka/MongoDB 任务用户在升级后应重点验证重启taosd/taosadapter/taosx后任务能否自动恢复、offset 是否正确提交、断网重连后数据是否一致。内存参数确认若曾因写入消息体过大遭遇 OOM升级后可查看syncLogBufferMemoryAllowed的默认值约为物理内存 10%见 tglobal.c按需调整企业版支持动态修改社区版修改后需重启。配置变更感知tempDir改为不可动态修改CFG_DYN_NONE见 tglobal.c若现有运维脚本存在热更该参数的逻辑需要移除新增的「表查询不存在是否报异常」参数按业务需要显式配置。版本与兼容性JDBC driver 升级至 3.2.5macOS 企业版客户端、Azure Blob 多级存储、MongoDB 数据源均属于企业版能力社区版升级不会包含。四、小结TDengine 3.3.3.0 是一个典型的「扩能力、修稳定性」双轨版本函数体系的大幅扩充数学/字符串/日期/统计四类共 22 个直接提升了 SQL 表达能力多级存储新增 Azure Blob、数据同步新增 MongoDB 数据源则拓宽了企业级数据接入与存储的边界而慢查询统一入库、日志策略统一、syncLogBufferMemoryAllowed内存参数等改进让服务的可观测性与内存可控性更上一层。62 项修复中以同步链路恢复、last 系列查询边界、内存泄漏与 OOM 相关问题的修复最为关键建议相关场景用户优先升级并完成针对性回归。更完整的版本演进记录可查阅 17-release-history各函数的实现细节可在 function 模块源码 中继续深入。【免费下载链接】tdengineTDengine is an open source, high-performance, cloud native time-series database optimized for Internet of Things (IoT), Connected Cars, Industrial IoT and DevOps.项目地址: https://gitcode.com/taosdata/tdengine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考