Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

背景简介


某用户在一台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大小如下,符合正常预期。


总结

  1. 当在总内存较小,存储组过多的情况下,需要注意wal的大小会影响memtable的大小,需要做相应调整。
  2. 考虑在内存小的情况下限制用户创建过多的存储组

...