【发布时间】:2021-12-29 09:53:30
【问题描述】:
我已经退订了DolphinDB中的一个表,但是当我执行函数getStreamEngineStat().AsofJoinEngine时,仍然有内存被引擎占用。
函数是否返回流引擎上的实时内存信息?如何查看当前内存状态并释放内存?
【问题讨论】:
我已经退订了DolphinDB中的一个表,但是当我执行函数getStreamEngineStat().AsofJoinEngine时,仍然有内存被引擎占用。
函数是否返回流引擎上的实时内存信息?如何查看当前内存状态并释放内存?
【问题讨论】:
getStreamEngineStat().AsofJoinEngine 确实会返回实时内存信息。
取消定义订阅并不等同于删除引擎。在你的情况下,如果你想释放引擎占用的内存,你需要先使用dropStreamEngine并将createEngine返回的变量设置为NULL。
具体例子如下:
假设你定义引擎如下:
ajEngine=createAsofJoinEngine(name="aj1", leftTable=trades, rightTable=quotes, outputTable=prevailingQuotes, metrics=<[price, bid, ask, abs(price-(bid+ask)/2)]>, matchingColumn=`sym, timeColumn=`time, useSystemTime=false, delayedTime=1)
取消定义订阅后,可以通过以下代码正确释放内存:
dropStreamEngine("aj1") // 1.release the specified engine
ajEngine = NULL // 2. Release the engine handler from memory
如果在订阅中发现asofjoin引擎的内存过大,也可以指定参数garbageSize来清理不再需要的历史数据。 garbageSize 的大小需要根据具体情况来设置,大致根据每个 key 每小时会有多少条记录来设置。
原理是:首先为key设置garbageSize,即清理每个key group内的数据。如果garbageSize太小,频繁清理历史数据会带来不必要的开销;如果garbageSize过大,可能达不到garbageSize的阈值,无法触发清理,导致遗留不需要的历史数据。
因此,建议每小时清理一次,并粗略估计设置garbageSize。
【讨论】: