Elasticsearch优化的一些建议

1. 增大系统打开文件数
  • 调大系统的“最大打开文件数” ,建议32K甚至是64K
ulimit -a(查看)
ulimit -n 32000(设置)
2. 合理设置JVM内存

修改配置文件调整ES的JVM内存大小。

  • 修改jvm.options中-Xms和-Xmx的大小,建议设置一样大, 避免频繁的分配内存。 根据服务器内存大小, 一般分配50%左右(默认1g)
3. 锁定物理内存

设置memory_lock来锁定进程的物理内存地址,避免内存交换(swapped) 来提高性能

# 修改文件
vi config/elasticsearch.yml
    bootstrap.memory_lock: true
4. 合理设置分片

适当增大分片, 可以提升建立索引的能力, 5-20个比较合适。

如果分片数过少或过多, 都会导致检索比较慢。

  • 分片数过多, 会导致检索时打开文件较多, 另外也会导致多台服务器之间通讯, 影响效率。
  • 分片数过少会导至单个分片索引过大, 所以检索速度慢。
  • 建议单个分片最多存储20G左右的索引数据, 通用计算公式: 分片数量=数据总量/20G

地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html

5. 合理设置副本数
  • 增加副本, 可以提升搜索的能力。
  • 如果副本设置过多, 会对服务器造成额外的压力, 因为主分片需要给所有副本同步数据。 另外, 副本过多也会占用磁盘空间。
  • 一般建议最多设置2-3个即可

地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html

6. 合并索引

定时对索引进行合并优化, segment越多, 占用的segment memory越多, 查询的性能也越差。

  • 索引量不大的情况下, 可以将segment设置为1。
  • 在es2.1.0以前调用_optimize接口, 后期改为_forcemerge接口。
curl -u elastic:123456 -XPOST 'http://master:9200/test/_forcemerge?max_num_segments=1'
7. 关闭索引

针对不使用的index, 建议close, 减少内存占用。

只要索引处于open状态, 索引库中的segement就会占用内存, close之后就只会占用磁盘空间不会占用内存。

curl -u elastic:123456 -XPOST 'master:9200/test/_close'
8. 清除删除文档

在Lucene中删除文档, 数据不会马上在硬盘上清除, 而是在lucene索引中产生一个.del的文件, 然而在检索过程中这部分数据也会参与检索, lucene在检索过程会判断是否删除, 如果已经删除, 再过滤掉, 这样也会降低检索效率。

可以执行清除删除文档命令:

curl -u elastic:123456 -XPOST 'http://master:9200/test/_optimize?only_expunge_deletes=true'
9. 合理数据导入

如果在项目开始阶段, 需要批量入库大量数据, 建议将副本数设置为0。 因为es在索引数据的时候, 如果副本已经存在, 数据会立即同步到副本中, 这样会对es增加压力。

等到索引完成后, 再恢复副本数即可, 可以提高索引效率。

curl -XGET http://master:9200/test/_settings?pretty
curl -H "Content-Type:application/json" -XPUT 'http://master:9200/test/_settings' -d \
'{
    "index":{
        "number_of_replicas":0
    }
}'
curl -H "Content-Type:application/json" -XPUT 'http://master:9200/test/_settings' -d \
'{
    "index":{
        "number_of_replicas":1
    }
 }'
10. 设置索引_all

去掉mapping中_all域, Index中默认会有_all的域, 虽然会给查询带来方便, 但是会增加索引时间和索引尺寸。

地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-all-field.html

11. 设置索引_source

_source字段我在们进行检索时相当重要。

ES默认检索只会返回ID, 如果在{“enabled”:false}情况下,你需通过根据这个ID去去倒排索引中去取每个Field数据,效率不高。 而反之, 在{“enabled”:true}的情况下可以根据ID直接检索对应source JSON的字段, 不用去倒排索引去按Field取数据。

地址:
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html

12. 版本
  • 使用 Java 代码操作 es 集群,要保证本地 es 的版本和集群上 es 的版本保持一致。

  • 保证集群中每个节点的 JDK 版本和 es 配置一致

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值