【数据库】TDengine 清理旧数据

TDengine 清理旧数据

  • [TDengine 清理旧数据](#TDengine 清理旧数据)

TDengine 清理旧数据

TDengine 清理旧数据主要有两种方式:设置 TTL 自动过期(推荐) 和 手动 DELETE。以下是具体操作说明。

  1. 设置 TTL(自动清理,推荐)
    TTL 代表数据存活时间,单位为"天"。设置后,TDengine 会在指定天数后自动删除数据(后台周期性执行,默认每 24 小时检查一次)。

对超级表(STABLE)设置

如果你的 original_ft、raw_data 等表是基于超级表的(这是最常见的设计),只需对超级表执行一条命令即可:

sql 复制代码
ALTER STABLE phTest.original_ft TTL 30;   -- 保留30天,超过的自动删
ALTER STABLE phTest.raw_data TTL 30;

对普通表设置(若没使用超级表)

sql 复制代码
-- 针对每个子表设置(不推荐,表多时麻烦)
ALTER TABLE phTest.of_2059963026013945856_vibration_kurtosis TTL 30;

注意:同一个超级表下的所有子表共享 TTL,只需在超级表上设置一次。

查看当前 TTL

sql 复制代码
SHOW STABLES LIKE 'original_ft';   -- 查看超级表的 TTL 字段
  1. 手动 DELETE(精确到毫秒,立即执行但消耗资源)
    如果不想等 TTL 自动清理,或者需要更灵活的时间范围(例如精确到小时),可以使用 DELETE 语句。注意:DELETE 不会释放磁盘空间,需要额外执行 COMPACT。

示例:删除 2025-01-01 以前的所有数据

sql 复制代码
-- 对原始特征表(假设 ts 是主时间戳列)
DELETE FROM phTest.original_ft WHERE ts < '2025-01-01 00:00:00';

-- 对原始数据存储表
DELETE FROM phTest.raw_data WHERE ts < '2025-01-01 00:00:00';
注意事项
DELETE 是异步操作,返回成功后后台实际删除,可能需要一段时间。

不会释放磁盘空间,必须手动触发压缩:

sql 复制代码
COMPACT DATABASE phTest;

或者等系统自动压缩(依赖 comp 参数,默认可能很慢)。

如果数据量巨大,DELETE 可能会非常慢且影响性能,建议在低峰期执行,并且优先使用 TTL。

  1. 清理后回收磁盘空间
    无论采用哪种方式删除数据,文件不会立即缩小,需要执行压缩:
sql 复制代码
COMPACT DATABASE phTest;
-- 或者只压缩某个超级表(3.0+ 支持)
COMPACT TABLE phTest.original_ft;

查看压缩状态:

sql 复制代码
SELECT * FROM INFORMATION_SCHEMA.INS_TABLE_COMPACTS 
WHERE db_name = 'phTest' ORDER BY start_time DESC;

压缩可能需要较长时间,且会消耗 CPU,请在业务低峰执行。

根据你的日志推断的快速操作

从错误日志看,你至少有两个核心超级表(或表名模式):

phTest.original_ft

phTest.raw_data

建议先设置 TTL 防止未来再写满,然后手动 DELETE 极旧数据并压缩以马上释放空间:

sql 复制代码
-- 1. 立即释放:删除 2025 年之前的数据(按实际需要调整时间)
DELETE FROM phTest.original_ft WHERE ts < '2025-01-01';
DELETE FROM phTest.raw_data WHERE ts < '2025-01-01';

-- 2. 设置自动保留 30 天
ALTER STABLE phTest.original_ft TTL 30;
ALTER STABLE phTest.raw_data TTL 30;

-- 3. 压缩数据库回收空间
COMPACT DATABASE phTest;
查询当前数据的时间范围
如果不确定要删除多久前的数据,可以先查询最旧的数据时间:
sql 复制代码
SELECT MIN(ts) FROM phTest.original_ft;
SELECT MAX(ts) FROM phTest.original_ft;

根据业务需求决定保留时长(例如:保留最近 30 天、90 天等)。执行完上述操作后,再配合之前的文件清理,磁盘空间应该会显著恢复。

相关推荐
ly768938 分钟前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
小羊没烦恼!1 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
注塑机数据采集联网1 小时前
如何解决注塑机数据采集联网对接MES系统数据WiFi传输数据不稳问题
大数据·数据库·物联网·数据挖掘·数据分析
黄俊懿1 小时前
【架构师从入门到进阶】第六章:服务集群优化——第八节:线程数公式
java·服务器·数据库·分布式·性能优化·架构·系统架构
geovindu2 小时前
sql: JSON and XML Data Handling in SQL using mysql 9.0
数据库·sql·mysql·数据库开发
hackchen2 小时前
LangChain 学习第 3 课 - 输出解析器(Output Parser)
数据库·学习·langchain
Mortalbreeze2 小时前
MySQL 基础篇(九):从 B+ 树到索引优化,全面理解 MySQL 索引
数据库·mysql
泡海椒2 小时前
JQuick-SQL SELECT 投影:字段、别名与表达式查询
数据库·sql
猫咪很可爱2 小时前
mysqldump 失败常见场景
数据库·sql·mysql
大明二代2 小时前
从零构建 Mastra RAG MVP:DeepSeek、SiliconFlow 与 PostgreSQL/pgvector 实战
javascript·数据库·人工智能