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

Jim*_* G. 3 caching task-parallel-library ravendb

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

我该如何避免这种情况?

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

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


以下是我发现的服务器配置选项:

这是我在代码选项中找到的:


我很清楚这个默认设置没有被尊重:

乌鸦/ MemoryCacheLimitMegabytes

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

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


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

Jim*_* G. 9

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

  1. Take(300)太过分了.我需要改变它Take(128).
  2. 使用3.10 GHz四核客户端机器,我正在研究一个2.50 GHz单核服务器,其中包含一个Parallel.ForEach循环内的查询.我需要指定并行度:Parallel.ForEach(objects, new ParallelOptions { MaxDegreeOfParallelism = 3 }, currentObject => { /* My Query */ });
  3. 我需要在我的实例上配置以下选项DocumentStore: _store.Conventions.DisableProfiling = true; _store.Conventions.ShouldCacheRequest = url => false; _store.DisableAggressiveCaching();
  4. 如果我需要在单个会话中分页查询并发出多个批处理请求,我需要以下内容:
    ravenSession.Advanced.Evict(doc); // for each loaded doc

我希望这有助于其他人!

  • 有没有办法默认会话Evict()所有文件?那会有所帮助! (2认同)