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