MongoDB - 如何提高创建索引的性能?

3
我进行了一些测试,以在MongoDB上创建索引。我的目标是了解如何缩短建立索引的时间。我在考虑更改“maxIndexBuildMemoryUsageMegabytes”值,以允许mongod使用更多的内存来构建索引。
https://docs.mongodb.com/manual/reference/parameters/#param.maxIndexBuildMemoryUsageMegabytes 我进行了以下测试并得到了一些有趣的结果:
测试 #1
虚拟机内存:2GB
文档大小:1亿个文档(数据大小为7.7GB)
maxIndexBuildMemoryUsageMegabytes: 500 MB
构建索引用时2269秒。

测试 #2
将maxIndexBuildMemoryUsageMegabytes更改为800 MB
构建索引用时1865秒。
这正是我所期望的。

测试 #3
将文档大小增加到1.5亿个(数据库大小为11.642GB)
maxIndexBuildMemoryUsageMegabytes: 500 MB
构建索引用时6085秒(1.69小时)。

测试 #4
与测试#3相同,但将maxIndexBuildMemoryUsageMegabytes更改为800 MB
构建索引用时26315秒(7.3小时)
不是我预期的结果。在构建索引后,使用的交换空间为477 MB。
然后我尝试在另一个具有更多内存和更大文档大小的虚拟机上进行测试。

测试 #5
虚拟机内存:4GB
文档大小:2亿个文档(15 GB数据大小)
maxIndexBuildMemoryUsageMegabytes: 500 MB
构建索引花费了15032秒。

测试 #6
与测试#5相同,但将maxIndexBuildMemoryUsageMegabytes更改为1 GB。
构建索引花费了15053秒。
它并没有缩短构建索引的时间。

然后我将文档大小增加到4亿个文档(37 GB数据大小)。
我尝试了maxIndexBuildMemoryUsageMegabytes值为500 MB和1 GB。
构建索引时间完全相同。

我的问题是: 1. maxIndexBuildMemoryUsageMegabytes应该设置为多少?我知道它取决于内存大小与数据大小等因素。有什么好的比例可以最大化构建索引的内存使用,但不会陷入使用交换空间。(swappiness已经设置为1)。 2. 有没有其他想法来增加构建索引的性能?
谢谢!
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接