如何检查和释放DolphinDB流引擎占用的内存



我已经取消订阅了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的大小需要根据具体情况进行设置,大致根据每个键每小时的记录数量。

其原理是:首先,为密钥设置garbageSize,即每个密钥组中的数据都将被清理。如果garbageSize太小,频繁清理历史数据会带来不必要的开销;如果garbageSize过大,则可能达不到garbageSize的阈值,并且无法触发清理,从而导致不需要的历史数据的剩余。

因此,建议每小时清理一次,并粗略估计垃圾大小。

最新更新