The stream memory usage is too large
流内存占用过大问题 docker单节点tdengine,版本tdengine/tdengine:3.2.1.0,使用默认配置,创建基于事件窗口的流用于统计数据,但是在测试环境进行测试的时候,模拟写入300万数据,每3至5秒写入2000条,一直写完300万条。docker stats显示的tdengine占用内存从500MB一直增长到1G左右,而且无法降下来。原来没有使用流计算的时候是不会增加到这么高的内存的。
相关语句
数据库
CREATE DATABASE test_us KEEP 30d PRECISION 'us';
超级表
CREATE STABLE fault_st (ts TIMESTAMP, dpv TINYINT UNSIGNED) TAGS(pid VARCHAR(20), did VARCHAR(50));
索引
CREATE INDEX idx_did on fault_st (did);
流
create stream if not exists ew_f_d_stream trigger AT_ONCE WATERMARK 300s into ew_fault_st TAGS(pid VARCHAR(20), did VARCHAR(50)) subtable(concat('ew_', tname)) as SELECT _wstart AS s_ts, _wend AS e_ts, count(*) AS c FROM fault_st PARTITION BY tbname tname, pid, did event_window START WITH dpv = 1 END WITH dpv = 0;
docker stats 显示
期望 为什么使用流计算写入数据会一直导致内存增加,这样如果在生产环境设备一直写数据的话会不会导致内存溢出? 为什么使用流计算写入数据一段时间之后停止,tdengine的内存占用不会降下来?是流计算中的缓存数据导致吗? 如果是需要配置什么参数,或者漏了什么参数没有配置,才导致这种情况的出现? 麻烦帮忙看一下
首先总共1G 的占用并不多,流计算也确实会产生开销。 如果想证明有内存泄漏,需要在规格高一些的机器,看看内存是否无限制增长。