首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KDB/Q内存消耗

KDB/Q内存消耗
EN

Stack Overflow用户
提问于 2012-04-16 09:43:50
回答 3查看 8.1K关注 0票数 10

我有一个KDB/Q数据库,每天大约有2M条记录消耗大约2G的内存。最后,它运行一些报表,在表之间进行连接,并将结果输出到磁盘上的文件中。在计算过程中,内存使用量增加到~15G。我的问题是,一旦这个操作完成,内存就不会被释放,直到DB被重新启动,它会消耗掉所有的15G内存。

我想告诉KDB从内存中卸载一些表(而不是删除它们),但是我不想重新启动DB,因为其他一些应用程序还在连接到它。

有没有办法告诉KDB从内存中卸载一些东西?

编辑:

如果有人觉得有趣,我建议看一下KDB 2.5+的2.5+,看上去很有希望。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-18 11:10:36

以下是我的研究总结:

  • KDB在ver之前。2.5根据需要分配64 on的内存块,永远不要释放它们。
  • 最近的KDB版本允许.Q.gc[]调用,这是对垃圾收集器的请求调用(KDB使用ref )。(顺便说一下,当您调用一些内存密集型计算(在我的例子中是~20 be )并希望在计算完成后释放内存时,
  • 特别有用。
票数 10
EN

Stack Overflow用户

发布于 2012-04-23 18:29:34

这可能是显而易见的,但是除了检查q版本的垃圾收集模式之外,一定要确保您实际上已经清除了使用内存的内存中的数据。如果您不介意删除整个表(例如,这是一个涉及计算的临时表),只需从根命名空间中删除它

代码语言:javascript
复制
delete table from`.

如果没有,则可以删除其所有行。

代码语言:javascript
复制
delete from`table
票数 5
EN

Stack Overflow用户

发布于 2013-01-18 03:22:36

对于将来尝试这样做的人来说,最简单的方法是:

needed.

  • Perform
  1. 启动一个新的KDB进程。从该进程查询中选择最小的有限数据子集
  2. ,从该进程中选择任何联接/计算/写入文件。(允许原始程序继续处理requests)
  3. Close进程,释放所有内存.

)

正如上面的海报所提到的,较新版本的KDB可以更好地释放内存,但并不完美。

我们公司网站上有一篇很好的文章,详细介绍了KDB+内存管理:http://timestored.com/kdbGuides/memoryManagement

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10171837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档