将数据预加载到文件系统缓存
编辑将数据预加载到文件系统缓存
编辑这是一个专家设置,其细节在未来可能会发生变化。
默认情况下,Elasticsearch 完全依赖操作系统文件系统缓存来缓存 I/O 操作。可以设置 index.store.preload
,以便在打开时告知操作系统将热索引文件的内容加载到内存中。此设置接受以逗号分隔的文件扩展名列表:列表中扩展名对应的所有文件都将在打开时预加载。这对于提高索引的搜索性能非常有用,尤其是在主机操作系统重启时,因为这会导致文件系统缓存被清空。但是请注意,这可能会减慢索引的打开速度,因为只有在数据加载到物理内存后,它们才能可用。
此设置仅尽力而为,并且可能根本无法工作,具体取决于存储类型和主机操作系统。
index.store.preload
是一个静态设置,可以在 config/elasticsearch.yml
中设置
index.store.preload: ["nvd", "dvd"]
或在创建索引时在索引设置中设置
resp = client.indices.create( index="my-index-000001", settings={ "index.store.preload": [ "nvd", "dvd" ] }, ) print(resp)
response = client.indices.create( index: 'my-index-000001', body: { settings: { 'index.store.preload' => [ 'nvd', 'dvd' ] } } ) puts response
const response = await client.indices.create({ index: "my-index-000001", settings: { "index.store.preload": ["nvd", "dvd"], }, }); console.log(response);
PUT /my-index-000001 { "settings": { "index.store.preload": ["nvd", "dvd"] } }
默认值为空数组,这意味着不会急切地将任何内容加载到文件系统缓存中。对于经常搜索的索引,您可能希望将其设置为 ["nvd", "dvd"]
,这将导致规范和文档值被急切地加载到物理内存中。这是首先要查看的两个扩展名,因为 Elasticsearch 对它们执行随机访问。
可以使用通配符来指示应预加载所有文件:index.store.preload: ["*"]
。但请注意,通常加载所有文件到内存中没有用,特别是那些用于存储字段和词向量的文件,因此更好的选择可能是将其设置为 ["nvd", "dvd", "tim", "doc", "dim"]
,这将预加载规范、文档值、词典、倒排列表和点数据,这些是索引中用于搜索和聚合的最重要部分。
对于向量搜索,如果您使用近似 k 近邻搜索,您可能希望将此设置设置为向量搜索文件。有关文件详细列表,请参阅向量预加载。
请注意,对于大于主机主内存大小的索引,此设置可能很危险,因为它会导致在大型合并后重新打开时文件系统缓存被清空,从而使索引和搜索变得更慢。