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