RavenDB:如何防止高RAM利用率?

时间:2013-04-13 19:36:56

标签: caching task-parallel-library ravendb

  • 我的应用程序包含一些返回大型结果集的查询(尽管我用Take(300) lambda封顶了它。
  • 在高峰使用期间,我看到Raven.Server.exe消耗了异常大量的RAM。
    • 事实上,在这些时候,Raven.Server.exe可以耗尽我服务器的可用RAM。

我该如何避免这种情况?

  • 经过几次Google搜索,我可以看到其他人在我之前遇到过此错误。
  • 但RavenDB在过去几年中已经发展,并且有许多配置代码选项可以限制Raven.Server.exe可以使用的RAM量并完全禁用缓存。

有谁可以告诉我哪些选项大多数适用于我的情况?


以下是我找到的服务器配置选项:

以下是我在代码选项中找到的内容:


我很清楚,default setting没有受到尊重:

  

乌鸦/ MemoryCacheLimitMegabytes

     

RavenDB服务器内部文档缓存的最大大小(MB)。   默认值:系统总内存的50%减去Esent缓存的大小。

在我的服务器上,使用版本2330,没有设置任何自定义配置,Raven.Server.exe占用了95%的可用内存!


编辑:在执行重读(并且没有写入)时,我能够在测试环境中重现这一点。

2 个答案:

答案 0 :(得分:9)

@Ayende Rahein比我更了解RavenDB,但这对我有用:

  1. Take(300)太多了。我需要将其更改为Take(128)
  2. 使用3.10 GHz四核客户端计算机,我正在使用Parallel.ForEach循环内的查询来处理2.50 GHz单核服务器。我需要指定并行度:Parallel.ForEach(objects, new ParallelOptions { MaxDegreeOfParallelism = 3 }, currentObject => { /* My Query */ });
  3. 我需要在DocumentStore个实例上configure the following options_store.Conventions.DisableProfiling = true; _store.Conventions.ShouldCacheRequest = url => false; _store.DisableAggressiveCaching();
  4. 如果我需要在一个会话中分页查询并发出多个批量请求,我需要以下内容:
    ravenSession.Advanced.Evict(doc); // for each loaded doc
  5. 我希望这有助于其他人!

答案 1 :(得分:3)

吉姆, 不要以为这是一个缓存问题。我认为这是你的索引。 你有一个带有多个from子句或SelectMany的map / reduce索引吗?

此外,处理此类问题的最佳位置是ravendb的邮件列表。