每秒200条数据,写入缓慢,延迟高达2小时。

【TDengine 使用环境】
预生产环境

【TDengine 版本】3.3.6.13 Community

【操作系统以及版本】ubuntu 24,4核4G内存

【部署方式】非容器部署

【集群节点数】单机部署

【集群副本数】单机部署

【描述业务影响】我的业务是每天9:00开始,每秒写入大约200条数据,空白数据库开始写入时,基本正常,除了CPU占用很高之外,基本没有其他问题。大约1个月后,出现数据写入缓慢,延迟高达2小时以上。

是我的配置不合理吗?,如何找到合适的参数配置?

【资源配置】
ubuntu 24 ,4核4G内存

数据规模什么样子?多少张表?看起来buffer 非常小

数据库中有2个超级表,1个表中有400个子表,1个表中有155个子表。

之前buffer设置为16、32等数值,任务开始1-2分钟内存就会涨到60%以上。改为3以后就是现在这样缓慢上升。

同样的任务,使用mysql毫无压力,没有延迟实时写入数据库。CPU不超过5%,内存40%。

TDengine 的写入与落盘机制核心在于,数据会先在内存中积攒。当内存使用达到一定规模(通常为 buufer/2 ),便会触发数据落盘。如果单个子表的数据记录条数达到或超过 minRows 的设定,这些数据将直接写入正式的 .data 数据文件;如果记录条数不足,则会先写入 stt 临时文件,等待后续累积到足够条数合并写入 .data文件。

您当前设置的 buffer参数值为 3 MB,这显著低于默认值。在 TD 的用户手册(https://docs.taosdata.com/reference/taos-sql/database/)中提到
“一个 vnode 写入内存池大小,单位为 MB,默认为 256,最小为 3,最大为 16384”。过小的缓冲池配置会带来明显的性能问题,包括 CPU 提高、磁盘读写频繁等。

子表数量越多:对内存缓冲池的总容量需求自然越大,需要设置更大的 buffer 值,以确保所有活跃子表的数据写入都能在内存中得到有效缓冲。
子表数量极少:在只有极少量子表(例如仅有一个用于测试)的特殊情况下,理论上可以使用较小的 buffer。但即便如此,3 MB 的设置也几乎无法满足任何正常的数据写入节奏。

根据监控,硬盘IO非常低,大约20 IOPS。
我之前的设置BUFFER修改过3,6,24,64等,但是性能没有改善。

延迟 2 个小时,那等于不可用了。你先看当前的压缩比和文件分布,尝试如下语句

SHOW TABLE DISTRIBUTED
select * from INFORMATION_SCHEMA.INS_DISK_USAGE where db_name = ‘db_name’;
SHOW db_name.disk_info;

再执行 TOP 命令,看看那些进程占用 CPU 较高。如果是 taosd 最高,还进一步查看一下 taod 的各个线程的 CPU分布。

可以把截图贴出来