花瓣小跑 发表于 2024-6-15 03:22:25

【DevOps】怎么提升Elasticsearch 的搜索性能

一、怎么提升Elasticsearch 搜索性能

提升 Elasticsearch (ES) 的搜索性能可以从多个角度举行优化,包括硬件选择、设置调整、查询优化等。以下是一些具体的方法和建议:
1. 硬件优化



[*]利用 SSDs: 利用固态硬盘(SSD)而非呆板硬盘(HDD),因为 SSD 在随机读写和低耽误方面体现更好。
[*]增长内存: 增长服务器的内存可以让更多的数据保存在内存中,减少磁盘 I/O 操纵。Elasticsearch heavily relies on the operating system's filesystem cache, so more RAM can improve performance.
[*]公道的 CPU 设置: 确保有足够的 CPU 资源来处置惩罚查询和索引操纵。虽然 ES 是 I/O 密集型的,但在高并发查询时,CPU 也会成为瓶颈。
2. Elasticsearch 设置优化



[*]公道设置 index.refresh_interval: 默以为 1s。对于写入密集型应用,可以适当增长这个值;对于读密集型,应保持较低。
[*]利用 doc_values: 对于聚合、排序等操纵,确保字段是 doc_values 启用的,这样可以减少内存利用并进步性能。
[*]调整堆内存(Heap Size): 堆内存不宜过大也不宜过小,一般建议设置为物理内存的 50%,但不凌驾 32GB(因为 JVM 会利用压缩指针)。
[*]索引分片和副本: 公道设置索引的分片(shards)和副本(replicas)数量。分片过多或过少都会影响性能。副本数可以根据读取压力调整以进步读取性能。
3. 映射和索引设计



[*]避免利用高基数字段举行聚合: 高基数字段(字段中唯一值非常多的字段)举行聚合会消耗大量资源。
[*]利用符合的字段类型: 比如,利用 keyword 类型而非 text 类型举行精确匹配查询。
[*]禁用 _all 字段: 如果不需要,可以在映射中禁用 _all 字段来节流空间和进步索引效率。
[*]利用 index_options 和 norms: 对于不需要全文搜索的字段,可以在映射中设置 index_options 为 docs,并禁用 norms。
4. 查询优化



[*]利用 filter context: 对于不需要计分的查询,利用 filter context(如 bool/filter),这样可以利用缓存,进步查询效率。
[*]避免深分页: 利用 search_after 或游标(scroll/cursor)来替代深分页,因为深分页会随着分页深度的增长而变得非常慢。
[*]利用 bool 查询优化: 尽量利用 bool 查询归并多个查询条件,而不是多次单独查询。
[*]预盘算重复查询: 对于重复的、不经常变革的查询结果,可以考虑预盘算和缓存结果。
5. 监控与调整



[*]利用 Elasticsearch 监控工具: 如 Elastic Stack 的 X-Pack、Elasticsearch-head、Kibana 的 Monitoring 功能来监控集群状态和性能。
[*]定期查看慢查询日记: 分析并优化慢查询,找出性能瓶颈。
6. 其他技巧



[*]批量处置惩罚: 利用批量 API (_bulk) 举行数据的批量插入、更新和删除。
[*]避免脚本: 尽量避免在查询中利用脚本,因为脚本会显着降低查询速度。
[*]公道利用缓存: 利用 Elasticsearch 的请求缓存和字段数据缓存,但也需要留意不要过度依靠缓存,以免造成内存压力。
根据您的具体利用场景(如文本搜索、日记分析、数据聚合等),优化策略会有所差别。理解并监控您的具体负载是订定有效优化策略的关键。
二、怎么查看当前的分片数

在 Elasticsearch 中,查看当前的分片数可以通过多种方式实现,包括利用 Elasticsearch 的 REST API、Kibana Dev Tools 大概其他管理工具。以下是几种常用的方法来查看索引的分片信息:
1. 利用 Elasticsearch REST API

查看集群中所有索引的分片数

要查看集群中所有索引的分片设置,可以利用 _cat/indices API 并添加 v 参数使输出更易于阅读。例如:

curl -X GET "http://localhost:9200/_cat/indices?v"
这个命令会列出所有索引及其相干信息,包括每个索引的分片数(pri 表示主分片数,rep 表示每个主分片的副本数)。
查看特定索引的分片数

如果你只对某个特定索引的分片信息感爱好,可以利用 _settings API 来获取具体信息。如下所示:
curl -X GET "http://localhost:9200/<index_name>/_settings?pretty"
这里 <index_name> 替换为你的索引名。这个请求将返回该索引的设置信息,包括分片数。输出中 "number_of_shards" 和 "number_of_replicas" 分别表示主分片数和副本分片数。
2. 利用 Kibana Dev Tools

如果你利用 Kibana,可以通过 Kibana 的 Dev Tools 来实行上述 API 调用。


[*]打开 Kibana
[*]点击左侧菜单中的 "Dev Tools"
[*]在 Console 中输入以下命令查看所有索引的分片信息:
GET /_cat/indices?v
大概查看特定索引的分片数:
GET /<index_name>/_settings
这里 <index_name> 是你想查看的索引名称。
3. 查看集群的整体分片状态

你还可以查看集群的整体分片状态,包括每个分片是主分片还是副本分片,以及它们的康健状态等信息:
curl -X GET "http://localhost:9200/_cat/shards?v"
或在 Kibana Dev Tools 中:
GET /_cat/shards?v
这将列出所有分片的具体信息。
4. 利用 Elasticsearch-head 或其他插件

如果你安装了 Elasticsearch-head 插件或其他类似的 Elasticsearch 管理和监控插件,你可以通过这些插件的 GUI 查看分片信息。这通常包括:


[*]打开 Elasticsearch-head
[*]导航到对应的索引信息页面
[*]查看索引的分片设置和状态
小结



[*]查看所有索引的分片信息:利用 _cat/indices API。
[*]查看特定索引的分片信息:利用 <index_name>/_settings API。
[*]查看具体分片状态:利用 _cat/shards API。
根据你的需求,选择符合的方法来查看分片信息。这些信息有助于你评估当前的 Elasticsearch 设置,并进一步优化设置。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【DevOps】怎么提升Elasticsearch 的搜索性能