【发布时间】:2021-07-06 04:38:20
【问题描述】:
我正在通过 bash 脚本将 CSV 文件(200M+ 记录)大量导入在 docker 中运行的 QuestDB(循环文件列表)。随着时间的推移,我可以看到 java 进程的内存使用量逐渐增加到 OOM (16GB)。即使提前终止了导入脚本,java 进程的内存使用量也保持在同一水平,直到我重新启动容器。
Bash 导入脚本:
for table in "${tickdb_tables[@]}"; do
symbol=$(echo $table| cut -d'_' -f 1)
curl -i -F \
schema='[{"name":"ts", "type": "TIMESTAMP", "pattern": "yyyy-MM-dd HH:mm:ss"},{"name":"symbol", "type": "SYMBOL"},{"name":"open","type":"FLOAT"},{"name":"high","type":"FLOAT"},{"name":"low","type":"FLOAT"},{"name":"close","type":"FLOAT"},{"name":"volume","type":"INT"},{"name":"timeframe","type":"SYMBOL"}]' \
-F data=@$symbol.csv "http://localhost:9000/imp?name=CANDLES×tamp=ts"
rm $symbol.csv
sleep 5
done
表创建语句:
create table CANDLES (ts TIMESTAMP, symbol SYMBOL, open FLOAT, high FLOAT, low FLOAT,
close FLOAT, volume INT, timeframe SYMBOL)
timestamp(ts) partition by MONTH;
这里有什么我遗漏的吗,还是 QuestDb 中存在一些潜在的错误/内存泄漏? (在确定自己没有做错之前不想打开问题)
【问题讨论】:
-
这一切看起来都有效,我建议打开 Github issue 或去 QuestDB slack。从表面上看,QuestDB 进程似乎无法足够快地刷新到磁盘,并且内存被操作系统 / docker 占用太久,在尝试回答/提出任何建议之前,我需要更多的设置细节
-
您的脚本看起来不错,问题可能是缺乏对来自 REST API 的无序参数的控制。我添加了一个问题来跟踪这个问题:github.com/questdb/questdb/issues/1181
-
@VladIlyushchenko , AlexdesPelagos - 非常感谢,我会密切关注 github 问题。
标签: questdb