【问题标题】:RavenDB: How can I prevent high RAM utilization?RavenDB:如何防止高 RAM 使用率?
【发布时间】:2013-04-14 23:25:56
【问题描述】:
  • 我的应用程序包含一些返回大型结果集的查询(尽管我使用 Take(300) lambda 对其进行了封顶。
  • 在使用高峰期,我看到 Raven.Server.exe 消耗了异常大量的 RAM。
    • 事实上,在这些时间里,Raven.Server.exe 可以耗尽我服务器的可用 RAM。

我怎样才能避免这种情况?

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

谁能告诉我哪些选项适用于我的情况?


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

这是我找到的代码选项:


我很清楚这个default setting 没有得到尊重:

Raven/MemoryCacheLimitMegabytes

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

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


编辑:当执行重度读取(且不写入)时,我能够在测试环境中重现此问题。

【问题讨论】:

  • 您说 RavenDB 使用了 95% 的可用 RAM,就好像这是一件坏事。它是一个服务器,它的目的是尽可能多地使用资源。
  • @ChrisMarisic:是的。这是一件好事,除非 RavenDB 用尽您服务器的可用 RAM。

标签: caching task-parallel-library ravendb


【解决方案1】:

@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

我希望这对其他人有帮助!

【讨论】:

  • 有没有办法让会话 Evict() 默认所有文档?这会有所帮助!
【解决方案2】:

吉姆, 不要假设这是一个缓存问题。我认为这是您的索引。 您是否有包含多个 from 子句或 SelectMany 的 map/reduce 索引?

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

【讨论】:

    猜你喜欢
    • 2021-08-06
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多