我有一个KDB/Q数据库,每天大约有2M条记录消耗大约2G的内存。最后,它运行一些报表,在表之间进行连接,并将结果输出到磁盘上的文件中。在计算过程中,内存使用量增加到~15G。我的问题是,一旦这个操作完成,内存就不会被释放,直到DB被重新启动,它会消耗掉所有的15G内存。
我想告诉KDB从内存中卸载一些表(而不是删除它们),但是我不想重新启动DB,因为其他一些应用程序还在连接到它。
有没有办法告诉KDB从内存中卸载一些东西?
编辑:
如果有人觉得有趣,我建议看一下KDB 2.5+的2.5+,看上去很有希望。
发布于 2012-04-18 11:10:36
以下是我的研究总结:
.Q.gc[]调用,这是对垃圾收集器的请求调用(KDB使用ref )。(顺便说一下,当您调用一些内存密集型计算(在我的例子中是~20 be )并希望在计算完成后释放内存时,发布于 2012-04-23 18:29:34
这可能是显而易见的,但是除了检查q版本的垃圾收集模式之外,一定要确保您实际上已经清除了使用内存的内存中的数据。如果您不介意删除整个表(例如,这是一个涉及计算的临时表),只需从根命名空间中删除它
delete table from`.如果没有,则可以删除其所有行。
delete from`table发布于 2013-01-18 03:22:36
对于将来尝试这样做的人来说,最简单的方法是:
needed.
)
正如上面的海报所提到的,较新版本的KDB可以更好地释放内存,但并不完美。
我们公司网站上有一篇很好的文章,详细介绍了KDB+内存管理:http://timestored.com/kdbGuides/memoryManagement
https://stackoverflow.com/questions/10171837
复制相似问题