RAM 和多线程对索引性能的影响
向 Meilisearch 索引添加新文档是一个多线程和内存密集型操作。有关索引性能的更多信息,请参阅本文。
向索引添加新文档是一个多线程和内存密集型操作。Meilisearch 的索引是我们的搜索引擎之所以快速、相关和可靠的核心。本文将解释有关 RAM 消耗和多线程的一些详细信息。
RAM
默认情况下,我们的索引器使用 sysinfo
Rust 库来计算机器的总内存大小。Meilisearch 然后会调整其行为,使索引最多使用可用资源的百分之二。或者,您可以使用 --max-indexing-memory
实例选项手动控制 Meilisearch 可以消耗的最大 RAM 量。
重要的是要防止 Meilisearch 在索引期间使用所有可用内存。如果发生这种情况,会有两个负面后果:
-
Meilisearch 可能因过度消耗 RAM 而被操作系统终止。
-
当索引器正在处理更新时,搜索性能可能会下降。
在两种情况下仍可能发生内存过载:
-
当允许 Meilisearch 自动设置索引期间使用的最大内存量时,
sysinfo
可能无法计算某些操作系统的可用 RAM 量。Meilisearch 仍然会做出合理的估计并根据此调整其行为,但在这种情况下仍可能发生崩溃。点击此链接可查看sysinfo
支持的操作系统的详尽列表 -
低端机器在处理大量数据集时可能会遇到困难。在这种情况下,将数据负载分成更小的批次会有所帮助。有关更多信息,请参阅以下部分
多线程
在多核处理器机器中,索引器避免使用超过一半的可用处理单元。例如,如果您的机器有十二个核心,索引器最多会尝试使用其中六个。这确保 Meilisearch 始终能够执行搜索,即使您正在更新索引。
您可以通过使用 --max-indexing-threads
实例选项来覆盖 Meilisearch 的默认线程限制。允许 Meilisearch 使用所有处理器核心进行索引可能会对您用户的搜索体验产生负面影响。
对于只有一个处理器核心的机器,不幸的是无法进行多线程。
内存崩溃
在某些情况下,操作系统会中断 Meilisearch 并停止其所有进程。这些崩溃大多数发生在索引期间,是由于机器内存不足导致的。这意味着您的计算机没有足够的内存来处理您的数据集。
Meilisearch 意识到了这个问题并积极尝试解决。如果您遇到与内存相关的崩溃,请考虑:
- 以较小的批次添加新文档
- 增加机器的 RAM
- 遵循索引最佳实践