elasticsearch 查询优化

首先对不必要的字段不做分词也就是不做索引,禁止内存交换

1.shard

  • 一个Shard就是一个Lucene实例,是一个完整的搜索引擎。
  • 分片数过多会导致检索时打开比较多的文件,多台服务器之间通讯成本加大。
  • 而分片数过少会导至单个分片索引过大,所以检索速度也会慢。
  • 建议单个分片最多存储10G-20G左右的索引数据,并且尽量集群的所有节点都分片数一致,不要出现分片数不一样导致的一个实例负载过大,等待合并的时间变长;

2.shard副本

  • 使用副本的优点:数据备份,提高对大索引的查询效率,建议副本在1-2个左右,过多的副本会延迟合并时间以及磁盘使用率提高,性价比不高
  • 当要导入大量数据时,设置副本为0,之后动态添加副本   //( 效率较大)当导入大量索引时,设置了副本数,es会同时打开副本同步,消耗系统资源,同时需要额外提供主副之间的通信
  • 设置副本数curl -XPOST  ‘http://localhost:9200/{_index}/_settings‘ -d ‘{"index":{"number_of_replicas":1}}‘

3.segment

  • 每个分片包含多个segment,每一个segment都是一个倒排索引;在查询的时,会把所有的segment查询结果汇总归并后最为最终的分片查询结果返回; segment越多,加载到内存中的segment越多,占用segment memory越多,查询性能可能就会下降,因此应该合并小的segment,减小segment数,提高检索的segment数来提高查询效率;创建索引的时候,elasticsearch会把文档信息写到内存buffer中,elasticsearch定期会执行flush操作,把segment持久化到磁盘上,索引越大,segment越多,查询效率就会下降

---- 合并索引段落语句

curl -XPOST ‘http://localhost:9200/{_index}/_forcemerge?max_num_segments=1‘

4: 路由优化

  • ES中所谓的路由和IP网络不同,是一个类似于Tag的东西。在创建文档的时候,可以通过字段为文档增加一个路由属性的Tag。ES内在机制决定了拥有相同路由属性的文档,一定会被分配到同一个分片上,无论是主分片还是副本。那么,在查询的过程中,一旦指定了感兴趣的路由属性,ES就可以直接到相应的分片所在的机器上进行搜索,而避免了复杂的分布式协同的一些工作,从而提升了ES的性能。于此同时,假设机器1上存有路由属性A的文档,机器2上存有路由属性为B的文档,那么我在查询的时候一旦指定目标路由属性为A,即使机器2故障瘫痪,对机器1构不成很大影响,所以这么做对灾况下的查询也提出了解决方案。所谓的路由,本质上是一个分桶(Bucketing)操作。当然,查询中也可以指定多个路由属性,机制大同小异
  • Elasticsearch模块功能之-路由(routing)https://blog.csdn.net/changong28/article/details/38427311

5:GC调优 

  •   elasticSearch本质上是个Java程序,所以配置JVM垃圾回收器本身也是一个很有意义的工作。我们使用JVM的Xms和Xmx参数来提供指定内存大小,本质上提供的是JVM的堆空间大小,当JVM的堆空间不足的时候就会触发致命的OutOfMemoryException。这意味着要么内存不足,要么出现了内存泄露。处理GC问题,首先要确定问题的源头,一般有两种方案
  • 开启ElasticSearch上的GC日志:在ES的配置文件elasticsearch.yml中有相关的属性可以配置
  • 使用jstat命令:jstat命令可以帮助我们查看JVM堆中各个区的使用情况和GC的耗时情况。
  • 生成内存Dump:最后的办法就是将JVM的堆空间转储到文件中去,实质上是对JVM堆空间的一个快照

  想了解更多关于JVM本身GC调优方法请参考:http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html

  • 采用G1垃圾回收机制代替默认CMS(得观察是否真的有必要)
  • JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC"
  • JAVA_OPTS="$JAVA_OPTS -XX:MaxGCPauseMillis=200"

 

原文地址:https://www.cnblogs.com/ytys/p/9854628.html

时间: 2024-10-22 23:56:42

elasticsearch 查询优化的相关文章

财务平台亿级数据量毫秒级查询优化之elasticsearch原理解析(转)

https://blog.csdn.net/wang123459/article/details/81045416 财务平台进行分录分表以后,随着数据量的日渐递增,业务人员对账务数据的实时分析响应时间越来越长,体验性慢慢下降,之前我们基于mysql的性能优化做了一遍,可以说基于mysql该做的优化已经基本上都做了,本次是基于elasticsearch对其做进一步的性能优化 正文 1mysql索引原理 基于mysql最常用也最直接有效的性能优化也就是添加索引. mysql索引是怎么实现的呢?数据库

Elasticsearch之elasticsearch5.x 新特性

其实,elasticsearch5.x 和 elasticsearch2.x 并不区别很大. 是因为,ELK里之前版本各种很混乱,直接升级到5.0了. 其实,elasticsearch5.x 按理来说是elasticsearch3.x,只是为了跟随ELK整体版本的统一.   下面给大家介绍一下 5.0 版里面的一些新的特性和改进 5.0? 天啦噜,你是不是觉得版本跳的太快了. 好吧,先来说说背后的原因吧. 相信大家都听说 ELK 吧,是 Elasticsearch . Logstash . Ki

使用logstash+elasticsearch+kibana快速搭建日志平台

日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: 根据关键字查询日志详情 监控系统的运行状况 统计分析,比如接口的调用次数.执行时间.成功率等 异常数据自动触发消息通知 基于日志的数据挖掘 很多团队在日志方面可能遇到的一些问题有: 开发人员不能登录线上服务器查看详细日志,经过运维周转费时费力 日志数据分散在多个系统,难以查找 日志数据量大,查询速度慢 一个调用会涉及多个系统,难以在这些系统的日志中快速定位数据 数据不够实时 常见的一些重量级的开源

ElasticSearch[v6.2] 在实际项目中的应用

摘要:本文所讲述的内容,为ElasticSearch(以下简称ES)全文搜索引擎在实际大数据项目的应用:ES的底层是开源库 Lucene.但是,你没法直接用 Lucene,必须自己写代码去调用它的接口.ES 是 Lucene 的封装,java开发,提供了 REST API 的操作接口,开箱即用,是目前全文搜索的首选: 本文的使用项目为基于Spring Boot 的快速开发环境搭建的项目框架,使用Spring Cloud作为服务治理的框架:集成ES的过程中,考虑过使用Spring Data的方式集

ELK的心脏,ElasticSearch学习方法论

写在前面 从初次了解elastic产品到正式投入使用,拖拖拉拉的也有小半年了,刚接触的时候看到一些帖子都是安装教程,后来看到一些都是深入教程,此篇文章较居中一点,总结了我在踩的一些坑和记录一些周边插件的使用方式.方法,便于自己后续回顾,也希望能给新用户一些引导,少走一些弯路:核心其实是想表达一下对rockybean和KennyW的爱,这期间非常感谢两位的协助,在非工作日深夜排查问题多次,正文多处采用二位给予的讲解,万分感谢. ElasticSearch简介 基于Lucene构建的分布式,REST

Elasticsearch发展史

简介 Elasticsearch是当前比较流行的开源的分布式搜索和数据分析引擎,具备易使用.高性能.扩展性强等特点.是ElasticStack的核心组件,以其为核心构建的ELK,已经是日志分析领域的事实标准.Elasticsearch是怎么一步一步发展成熟的呢? You Know,for Search 2010年2月8日, Shay Banon 发表了一篇博客,说他基于Lucene开发(封装 ???)了一个分布式搜索引擎,实现了一些功能... 0.7.0 2010年5月14日发布,第一个可以查询

贷前系统ElasticSearch实践总结

贷前系统负责从进件到放款前所有业务流程的实现,其中涉及一些数据量较大.条件多样且复杂的综合查询,引入ElasticSearch主要是为了提高查询效率,并希望基于ElasticSearch快速实现一个简易的数据仓库,提供一些OLAP相关功能.本文将介绍贷前系统ElasticSearch的实践经验. 一.索引 描述:为快速定位数据而设计的某种数据结构. 索引好比是一本书前面的目录,能加快数据库的查询速度.了解索引的构造及使用,对理解ES的工作模式有非常大的帮助. 常用索引: 位图索引 哈希索引 BT

ElasticSearch

一.概述 1.简介 ElasticSearch是一个基于Lucene实现的开源.分布式.Restful的全文本搜索引擎:此外,它还是一个分布式实时文档存储,其中每个文档的每个field均是被索引的数据,且可被搜索:也是一个带实时分析功能的分布式搜索引擎,能够扩展至数以百计的节点实时处理PB级的数据. 应用场景:当我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的.我们希望搜索解决方案要运行速度快.能有一个零配置和一个完全免费的搜索模式.能够简单地使用JSON通过

Mysql查询优化从入门到跑路(一)数据库与关系代数

1.怎样才算是数据库? ACID,是指在数据库管理系统中事务所具有的四个特性 1)原子性 2)一致性 3)隔离性 4)持久性 关系数据库,基于关系代数,数据库形式是表格,数据能以不同方式被存取或重新召集. 2.关系代数(简单的来讲就是一种抽象的查询语句) 从数学层面上来讲,关系代数是支持叫做逆反的对合一元运算的剩余布尔代数 从数据库层面上来讲,是闭合于运算下的关系的集合 注意:尽管SQL的查询语句松散的基于了关系代数,但是很多有用的关于关系代数的理论在SQL对应者中不成立. select ***