将数据预加载到文件系统缓存
这是一个专家设置,其细节将来可能会改变。
默认情况下,Elasticsearch 完全依赖操作系统文件系统缓存来缓存 I/O 操作。可以设置 index.store.preload 来告诉操作系统在打开时将热索引文件的内容加载到内存中。此设置接受一个以逗号分隔的文件扩展名列表:扩展名在列表中的所有文件都将在打开时被预加载。这对于提高索引的搜索性能很有用,特别是在主机操作系统重启之后,因为重启会导致文件系统缓存被清空。但请注意,这可能会减慢索引的打开速度,因为它们只有在数据加载到物理内存后才会变得可用。
此设置只是尽力而为,可能根本不起作用,具体取决于存储类型和主机操作系统。
index.store.preload 是一个静态设置,既可以在 config/elasticsearch.yml 中设置:
index.store.preload: [ "nvd", "dvd" ]
也可以在索引创建时在索引设置中设置:
PUT my-index-000001
{
"settings": {
"index.store.preload": [ "nvd", "dvd" ]
}
}
默认值是空数组,这意味着不会有任何内容被主动加载到文件系统缓存中。对于被活跃搜索的索引,你可能希望将其设置为 ["nvd", "dvd"],这将使 norms 和文档值被主动加载到物理内存中。这是首先要考虑的两个扩展名,因为 Elasticsearch 会对它们执行随机访问。
可以使用通配符来指示应预加载所有文件:index.store.preload: ["*"]。但请注意,将所有文件加载到内存中通常没有用,特别是存储字段和词条向量的文件,因此更好的选择可能是将其设置为 ["nvd", "dvd", "tim", "doc", "dim"],这将预加载 norms、文档值、词条字典、倒排列表和点(points),它们是索引中用于搜索和聚合的最重要部分。
对于向量搜索(使用近似 k 近邻搜索),你可能希望将此设置设置为向量搜索文件。有关文件的详细列表参阅向量预加载。
请注意,此设置对于大于主机主内存大小的索引可能是危险的,因为它会导致在大合并后重新打开时文件系统缓存被清空,这会使索引和搜索变得更慢。