RAM 和多线程对索引性能的影响

    向索引添加新文档是一个多线程且内存密集型的操作。Meilisearch 的索引是使其搜索引擎快速、相关和可靠的核心。本文解释了有关 RAM 消耗和多线程的一些细节。

    RAM

    默认情况下,我们的索引器使用 sysinfo Rust 库来计算机器的总内存大小。然后,Meilisearch 会调整其行为,使索引最多使用可用资源的 2/3。或者,您可以使用 --max-indexing-memory 实例选项来手动控制 Meilisearch 可以消耗的最大 RAM 量。

    重要的是要防止 Meilisearch 在索引期间使用所有可用内存。如果发生这种情况,则会产生两个负面影响

    1. Meilisearch 可能会因过度消耗 RAM 而被操作系统杀死

    2. 当索引器正在处理更新时,搜索性能可能会下降

    在两种情况下,仍然可能发生内存过度消耗

    1. 当 Meilisearch 自动设置索引期间使用的最大内存量时,sysinfo 可能无法计算某些操作系统可用的 RAM 量。Meilisearch 仍然会做出合理的估计并根据此调整其行为,但在此情况下仍可能发生崩溃。 请点击此链接查看 sysinfo 支持的操作系统完整列表

    2. 低端机器在处理大型数据集时可能会遇到困难。在这种情况下,将数据负载拆分为较小的批次会有所帮助。 有关更多信息,请参阅下面的部分

    多线程

    在具有多核处理器的机器中,索引器会避免使用超过一半的可用处理单元。例如,如果您的机器有 12 个内核,则索引器最多会尝试使用 6 个。这确保了即使在更新索引时,Meilisearch 也始终准备好执行搜索。

    您可以使用 --max-indexing-threads 实例选项来覆盖 Meilisearch 的默认线程限制。允许 Meilisearch 使用所有处理器内核进行索引可能会对用户的搜索体验产生负面影响。

    不幸的是,在只有单核处理器的机器中,多线程是不可能的。

    内存崩溃

    在某些情况下,操作系统会中断 Meilisearch 并停止其所有进程。大多数此类崩溃发生在索引期间,是机器 RAM 耗尽的结果。这意味着您的计算机没有足够的内存来处理您的数据集。

    Meilisearch 意识到了这个问题,并正在积极尝试解决它。如果您正在努力解决与内存相关的崩溃问题,请考虑