Hi jialin, I submit some modifications for:
* add the overflow data folder location setting in the iotdb-engine.properties; * let Directories.java to manage the above folder. If you need to refactor the overflow when you solving the long tail issue, you can apply the patch from [1] first to simplify your work. [1] https://issues.apache.org/jira/secure/attachment/12972547/overflow-folder.patch Best, ----------------------------------- Xiangdong Huang School of Software, Tsinghua University 黄向东 清华大学 软件学院 Xiangdong Huang <[email protected]> 于2019年6月22日周六 下午3:19写道: > If you change the process like this, i.e., there are more than one > unsealed TsFiles for each storage group, then you have to modify the WAL > module.. Because current WAL module only recognizes the last unsealed > TsFile.. > > By the way, "sealed" is better than "closed", I think.. A sealed file > means the file which has the magic string at the head and the tail. > > Best, > ----------------------------------- > Xiangdong Huang > School of Software, Tsinghua University > > 黄向东 > 清华大学 软件学院 > > > Jialin Qiao <[email protected]> 于2019年6月22日周六 下午2:54写道: > >> >> Hi, I am solving the long-tail latency problem. >> >> There are some cases (blocking points) that blocking the insertion. For a >> better understanding of this problem, I first introduce the writing process >> of IoTDB: >> >> IoTDB maintains several independent engines (storage group) that supports >> read and write. In the following, we focus on one engine. A engine >> maintains several closed data files and one unclosed data file that >> receives appended data. In memory, there is only one working memtable (m1) >> that receives writes. There is also another memtable (m2) that will take >> place m1 when m1 is full and being flushed. >> >> When a data item is inserted: >> >> (1)We insert it into the working memtable. >> (2)We check the size of the memtable. If it reaches a threshold, we >> submit a flush task “after the previous flush task is finished” and switch >> the two memtables. >> (3)We check the size of the unclosed file. If it reaches a threshold, we >> close it “after the previous flush task is finished”. >> >> In the above steps, all the "after the previous flush task is finished" >> will block the insertion process. One solution is to make all flush and >> close task asynchronous. Some questions need to carefully considered: >> >> (1) Many memtables may be flushed concurrently to an unclosed file. How >> to guarantee the order of serialization? >> (2) Once a close task is submitted, a new unclosed file will be created >> and receives appended data. So there will exists many unclosed files. How >> the query and compaction process will be impacted? >> >> Thanks, >> >> Jialin Qiao >> School of Software, Tsinghua University >> >> 乔嘉林 >> 清华大学 软件学院 >> >> > -----原始邮件----- >> > 发件人: "Xiangdong Huang" <[email protected]> >> > 发送时间: 2019-06-04 23:08:34 (星期二) >> > 收件人: [email protected], "江天" <[email protected]> >> > 抄送: >> > 主题: Re: [jira] [Created] (IOTDB-112) Avoid long tail insertion which is >> caused by synchronized close-bufferwrite >> > >> > 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) <[email protected]> 于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) >> > > >> >
