将数据预加载到文件系统缓存中
编辑将数据预加载到文件系统缓存中编辑
这是一个专家设置,其详细信息将来可能会发生变化。
默认情况下,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", body={"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
PUT /my-index-000001 { "settings": { "index.store.preload": ["nvd", "dvd"] } }
默认值为空数组,这意味着不会将任何内容急切地加载到文件系统缓存中。对于正在积极搜索的索引,您可能希望将其设置为 ["nvd", "dvd"]
,这将导致规范和文档值被急切地加载到物理内存中。这是首先要查看的两个扩展名,因为 Elasticsearch 对它们执行随机访问。
可以使用通配符来指示应预加载所有文件:index.store.preload: ["*"]
。但请注意,将所有文件加载到内存中通常没有用,特别是存储字段和词向量文件,因此更好的选择可能是将其设置为 ["nvd", "dvd", "tim", "doc", "dim"]
,这将预加载规范、文档值、词典、倒排列表和点,这些是索引中用于搜索和聚合的最重要部分。
对于向量搜索,如果您使用近似 k 近邻搜索,则可能需要将设置设置为向量搜索文件:["vec", "vex", "vem"]
(“vec”用于向量值,“vex” - 用于 HNSW 图,“vem” - 用于元数据)。
请注意,对于大于主机主内存大小的索引,此设置可能很危险,因为它会导致在大型合并后重新打开时文件系统缓存被清空,这会使索引和搜索速度变*慢*。