8

我已经使用了命令

db.collection.stats()

db.stats()
{
        "collections" : 17,
        "objects" : 487747,
        "avgObjSize" : 1924.9327048654322,
        "dataSize" : 938880152,
        "storageSize" : 1159314432,
        "numExtents" : 82,
        "indexes" : 32,
        "indexSize" : 153812992,
        "fileSize" : 8519680000,
        "ok" : 1
}

从网上我发现了这个说法

索引应该始终在内存中。(只不过是 RAM)

索引大小是153812992,数据大小是938880152

你能告诉我我的 MongoDB 服务器需要多少 RAM,这样性能才会很好。

根据应用程序设计,每天可能会发生近 10 万次插入/更新,我还有一个问题是,这个索引大小会每天增长吗?

那么在这种情况下,我如何确定最适合我的应用程序的 RAM 大小。

请指教,提前谢谢。

4

3 回答 3

6

在更高版本的 MongoDB 中有一个工具可以帮助找出你的工作集有多大,它仍然是相当实验性的,但它应该可以工作:http ://docs.mongodb.org/manual/reference/command/serverStatus/ #serverStatus.workingSet

使用它的最佳方法是简单地制作一个自动化测试脚本,该脚本将使用您的应用程序,同时打印serverStatus并存档工作集文档的值。您可以绘制它等等,并得出一个合理的结论,即您的 RAM 需要是什么。

于 2013-08-28T10:04:35.960 回答
6

多年来,MongoDB 发生了一些变化。今天 MongoDB 说:

在 3.0 版更改:serverStatus不再输出workingSet

TL;博士

如果在 MongoDB 上使用 MMAPv1 存储引擎,working set存在https://docs.mongodb.com/manual/faq/diagnostics/#must-my-working-set-size-fit-ram

如果在 MongoDB 上使用 WiredTiger 存储引擎,则无需考虑working set. https://docs.mongodb.com/manual/faq/diagnostics/#memory-diagnostics-for-the-wiredtiger-storage-engine

WiredTiger 存储引擎的内存诊断

我的工作集大小必须适合 RAM 吗?

不。

如何计算我的应用程序需要多少 RAM?

借助 WiredTiger,MongoDB 同时利用了 WiredTiger 内部缓存和文件系统缓存。

在 3.2 版更改:从 MongoDB 3.2 开始,WiredTiger 内部缓存默认使用以下两者中的较大者:

60% 的 RAM 减去 1 GB 或 1 GB。


更新

从 3.4 开始,WiredTiger 内部缓存默认使用以下两者中的较大者:

(RAM - 1 GB) 的 50%,或 256 MB。例如,在一个总共有 4GB RAM 的系统上,WiredTiger 缓存将使用 1.5GB 的 RAM (0.5 * (4 GB - 1 GB) = 1.5 GB)。相反,总共有 1.25 GB RAM 的系统将分配 256 MB 给 WiredTiger 缓存,因为这是总 RAM 减去 1 GB 的一半以上 (0.5 * (1.25 GB - 1 GB) = 128 MB < 256 MB) .

于 2016-10-05T07:38:44.417 回答
2

您的工作集应保留在内存中以实现良好的性能。否则会发生许多随机磁盘 IO。

MongoDB 数据库的工作集是客户最常访问的数据部分。您可以估计工作集的大小,使用

db.runCommand( { serverStatus: 1, workingSet: 1 } )

在 SO 级别。查看页面错误的数量或速率以及其他 MMS 仪表,以检测何时需要更多 RAM。

如果页面错误很少发生,则您的工作集适合 RAM。如果故障率高于此,您将面临性能下降的风险。

在管理工作集大小时需要特别注意的一个领域是索引访问模式。如果您在随机位置插入索引(就像由哈希随机生成的 id 一样),您将不断更新整个索引。相反,如果您能够以近似升序的方式创建您的 id(例如,与随机 id 连接的日期),则所有更新都将发生在 b-tree 的右侧,并且索引页面的工作集大小会很大更小。

资料来源:MongoDb 常见问题解答

于 2013-08-28T18:24:21.407 回答