怎么实现ElasticSearch优化

蜗牛 互联网技术资讯 2021-12-16 289 0

怎么实现ElasticSearch优化,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

尽量不要把数据结构不同的数据放到同一索引中,并且可以考虑将数据量较少的集合创建较少的分片存储。当然若数据之间存在父子关系则例外,毕竟父子关系的数据不能存储在不同的索引当中。

一、索引速度

1、尽量使用批量索引
2、客户端尽量使用多线程批量索引
3、增加刷新机制的间隔 默认是1s -1代表禁用Es从数据索引到能不查询整个过程默认为1s,使用index.refresh_interval参数控制。若对数据的实时性要求不高的话,可适当调整该参数到业务系统可接受的范围。在该间隔时间内es会强制创建一个新的segment(段),时间间隔越大则创建的段也会越大,也减小了后续字段合并段的压力(段其实的lucene底层的数据结构,详细可查询lucene与segment的关系)。
4、数据初始索引时禁用刷新和副本机制若有一大批数据需要索引的时候(前提条件),由于刷新和副本机制对数据索引性能影响较大,可以将index.refresh_interval设置为-1,将index.number_of_replicas设置为0以禁用该两机制。直到本次数据全部索引完成后再将这两个参数调整至合理的值,然而应该明白性能与数据安全总是不能同时得到满足,完全看业务数据的重要性。
5、禁止内存交换

  • 暂时禁用交换 sudo swapoff - a

  • 永久禁用它 需要编辑该/etc/fstab文件并注释掉包含该单词的所有行swap

6、文件系统缓存的内存不能低于服务器的一半文件系统缓存将被用来缓冲输入/输出操作,这对于es来说非常的重要,要求内存不能少于服务器内存的一半,即es的jvm heap的值设置应该小于服务器内存的一半。
7、尽量使用es自动生成的id作为es的document id应该知道其作用第一是确定文档的唯一性,第二默认情况下使用id作为route值计算文档应该被分配到哪个shard,同时也是生成uid的成员。若索引时制定id的情况下,会先检测其唯一性,其代价是比较大的,并且随着索引文档数的增加消耗会越来越大,若没有业务需要最好使用自动生成的id(会跳过检查过程)。
9、索引缓存的大小
10、string类型字段不分词
精细设置全文域:string类型字段默认会分词,不仅会额外占用资源,而且会影响创建索引的速度。所以,把不需要分词的字段设置为not_analyzed
11、 设置段合并的线程数量 :
curl -XPUT 'your-es-host:9200/nginx_log-2018-03-20/_settings' -d '{ 
   "index.merge.scheduler.max_thread_count" : 1
}'
12、不用开启http服务。将其中的配置 参数这样设置:http.enabled: false
13、Elastic官方文档建议:一个Node中一个索引最好不要多于三个shards.配置total_shards_per_node参数,限制每个index每个节点最多分配多少个发片.
14、分片(Shard):一个索引会分成多个分片存储,分片数量在索引建立后不可更改,推荐【分片数*副本数=集群数量】
14、 段和合并Elasticsearch 默认设置在这块比较保守:不希望搜索性能被后台合并影响。不过有时候(尤其是 SSD,或者日志场景)限流阈值太低了。
默认值是 20 MB/s,对机械磁盘应该是个不错的设置。如果你用的是 SSD,可以考虑提高到 100–200 MB/s。测试验证对你的系统哪个值合适:
PUT /_cluster/settings
{
    "persistent" : {
        "indices.store.throttle.max_bytes_per_sec" : "100mb"
    }
}

可以增大index.translog.flush_threshold_size参数,默认是200M,可以增大到如1GB。
增大这个参数可以允许translog在flush前存放更大的段(segment);更大的段的创建会减少flush的频率,
并且更大的段合并越少,会减少磁盘IO,索引性能更高。


二、查询速度

1、 查询缓存
分片查询缓存的主要目的是缓存聚合,提示词和命中数(不会缓存返回的文档)
如果想要开启mastering索引的查询缓存,可以执行类似下面的操作
PUT /mastering/_settings
{ "index.requests.cache.enable": true }
2、 查询缓存默认使用节点堆栈的1%内存,可以通过下列方式对该值进行设置:
indices.requests.cache.size: 2%

关于怎么实现ElasticSearch优化问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注蜗牛博客行业资讯频道了解更多相关知识。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

评论

有免费节点资源,我们会通知你!加入纸飞机订阅群

×
天气预报查看日历分享网页手机扫码留言评论Telegram