【TDengine 使用环境】
生产环境 /测试/ Poc/预生产环境 测试环境
【TDengine 版本】3.4.1
【操作系统以及版本】centos7.9
【部署方式】容器/非容器部署 非容器
【集群节点数】单机
我测试大批量数据入库 我的服务器是32g内存 经过一段时间的压测入库 最终内存在用稳定在了20g左右 但是 我已经停了入库脚本 为何内存依旧占据较高呢 内存占用就没有下来过 周日都没有进行数据的入库
【TDengine 使用环境】
生产环境 /测试/ Poc/预生产环境 测试环境
【TDengine 版本】3.4.1
【操作系统以及版本】centos7.9
【部署方式】容器/非容器部署 非容器
【集群节点数】单机
我测试大批量数据入库 我的服务器是32g内存 经过一段时间的压测入库 最终内存在用稳定在了20g左右 但是 我已经停了入库脚本 为何内存依旧占据较高呢 内存占用就没有下来过 周日都没有进行数据的入库
你看到的 taosd 占用的 11GB 内存,主要由两部分构成:写入缓冲 和 查询缓存
1. 缓冲内存 TDengine 为每个 虚拟节点 (vnode) 都预先分配了一块独立的内存池作为写入缓冲,这块内存是你的数据库在创建时通过 BUFFER 参数指定的。
写入流程:数据会先写入这块内存中的“活动”块 mem,写满后落盘变成 imem,并转而使用下一个空闲块。这套机制确保了即使在高压力写入下,系统也能平稳运行。
不会自动“腾空”:重点在于,这些内存块是每个 vnode 的专属、固定大小的资源。当数据落盘后,它们并不会归还给操作系统,只是从“待写入”状态变为“待复用”状态。即便写入停止,这些内存仍然会被 taosd 进程牢牢占用,以备下一次写入时能立刻投入使用。
2. 查询缓存:这部分内存包括了查询结果、元数据等。如果一个查询没有通过 taos_free_result() 等方式正确关闭句柄,或者存在长时间执行的大查询,它们占用的内存可能不会被立即释放。即使有少量未释放,它们占用的空间也远不如 BUFFER 内存池那么大
我在建库的时候 buffer 写的是1000 所以目前这种占用是合理的是吗 这是完整的建库语句CREATE DATABASE mydb_unit8 BUFFER 1000 CACHESIZE 64 CACHEMODEL ‘last_value’ CACHESHARDBITS -1 COMP 2 DURATION 10d WAL_FSYNC_PERIOD 3000 MAXROWS
4096 MINROWS 100 STT_TRIGGER 2 KEEP 3650d,3650d,3650d PAGES 256 PAGESIZE 4 PRECISION ‘ms’ REPLICA 1 WAL_LEVEL 2 VGROUPS 16 SINGLE_STABLE 0 TABLE_PREFI
X 0 TABLE_SUFFIX 0 TSDB_PAGESIZE 4 WAL_RETENTION_PERIOD 0 WAL_RETENTION_SIZE 0 KEEP_TIME_OFFSET 0 ENCRYPT_ALGORITHM ‘none’ SS_CHUNKPAGES 131072 SS_KEEP
LOCAL 525600m SS_COMPACT 1 COMPACT_INTERVAL 0d COMPACT_TIME_RANGE 0d,0d COMPACT_TIME_OFFSET 0h IS_AUDIT 0 SECURE_DELETE 0;
正常的,默认 buffer 是 256M,你现在是1G