...
- 避免设置活跃的 partition 个数
- 考虑 PrimitiveArrayPool 内存占用
- 尽量有效利用内存,使 Chunk 尽量大
- 尽量保证创建元数据成功,为保证内存不爆,可以拒绝写入
- 尽量在有无乱序情况下,iotdb参数不需要变化都能很好适应
- 尽量不阻塞写入
- 尽量不加入固定参数
AbstractMemTable
包括以下两个内存统计值:
tvListRamCost:所有TVList被分配的内存总大小,包括TEXT值和primitive arrays中未被占用的空值
memSize:数据点实际占用的内存大小,包括TEXT值
两者的关系如图所示:
从图中可以看出,memSize ≤ tvListRamCost
TsFileProcessorInfo
维护一个TsFileProcessor的内存占用,任何内存变动都需要向StorageGroupInfo汇报
memCost:所有ChunkMetadata占用的内存大小
维护一个存储组的内存占用,当内存占用的增量超过指定的阈值时向SystemInfo汇报
memoryCost:所有TsFileProcessor占用的ChunkMetadata、primitive arrays和TEXT值的内存总和,即∑ TsFileProcessorInfo.memCost + AbstractMemTable.tvListRamCost
SystemInfo
维护所有存储组的内存占用
totalStorageGroupMemCost:所有StorageGroupInfo中memroyCost的总和
...