THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
背景简介
某用户在一台16GB内存的机器上使用IoTDB 0.11.4-SNAPSHOT版本管理2000条时间序列,采样频率在1hz~50hz不等。用户将这2000条序列分到了40个存储组内。写入时会有一定的乱序数据。JVM内存设置为8GB。
...
在上述情况下,用户发现写入会经常出现reject的情况。
排查过程
检查server日志发现,刷盘时每个memtable的大小非常小,不符合预期。
...
WAL在内存控制里为每开一个TSP就统计16MB。在该用户的使用场景下,每个memtable的flush阈值为8GB * 0.2 * 0.4 / 40 / 2 = 8MB。相当于刚开一个TSP时就已经超过了flush阈值,写入一个点后就触发了刷盘,符合用户反馈的现象。
解决方法
调整wal_buffer_size=1MB,减小WAL对写入内存控制的影响。
经调整,memtable大小如下,符合正常预期。
总结
- 当在总内存较小,存储组过多的情况下,需要注意wal的大小会影响memtable的大小,需要做相应调整。
- 考虑在内存小的情况下限制用户创建过多的存储组
...