I attached the histogram of the latency in the JIRA.

The x-axis is the latency while the y-axis is the cumulative distribution.
We can see that about 30% insertion can be finished in 20ms, and 60%
insertion can be finished in 40ms even though the IoTDB instance is serving
for a heavy workload... So, eliminating the long tail insertion can make
the average latency far better.

If someone is working on the refactor_overflow or refactor_bufferwrite,
please pay attention to the code branch for this issue.

Best,

-----------------------------------
Xiangdong Huang
School of Software, Tsinghua University

 黄向东
清华大学 软件学院


xiangdong Huang (JIRA) <j...@apache.org> 于2019年6月4日周二 下午11:00写道:

> xiangdong Huang created IOTDB-112:
> -------------------------------------
>
>              Summary: Avoid long tail insertion which is caused by
> synchronized close-bufferwrite
>                  Key: IOTDB-112
>                  URL: https://issues.apache.org/jira/browse/IOTDB-112
>              Project: Apache IoTDB
>           Issue Type: Improvement
>             Reporter: xiangdong Huang
>
>
> In our test, IoTDB has a good insertion performance, and the average
> latency can be ~200 ms in a given workload and hardware.
>
> However, when we draw the histogram of the latency, we find that 97.5%
> latencies are less than 200 ms, while 2.7% latencies are greater. The
> result shows that there are some long tail latency.
>
> Then we find that some insertion latencies are about 30 seconds... (but
> the ratio is less than 0.5%). Indeed, for each connection, a long tail
> insertion appears per 1 or 2 minutes....
>
> By reading source codes, I think it is because that in the insertion
> function,
>
> `private void insertBufferWrite(FileNodeProcessor fileNodeProcessor, long
> timestamp,
>  boolean isMonitor, TSRecord tsRecord, String deviceId)`,
>
> if the corresponding TsFile is too large, the function is blocked until
> the memtable is flushed on disk and the TsFile is sealed (we call it as
> closing a TsFile). The latencies of the long tail insertions are very close
> to the time cost of flushing and sealing a TsFile.
>
> So, if we set the closing function using the async mode, we can avoid the
> long tail insertion.
>
> However,  there are some side effects we have to fix:
>  # At the same time, if a new insertion comes, then a new memtable should
> be assigned, and a new unsealed TsFile is created;
>  # That means that there are more than 1 unsealed TsFiles if the system is
> crashed before the closing function is finished. So, we have to modify the
> startup process to recover these files.
>
> Is there any other side effect that I have to pay attention to?
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> --
> This message was sent by Atlassian JIRA
> (v7.6.3#76005)
>

Reply via email to