相关文章推荐
睡不着的豌豆  ·  sql - Conversion ...·  1 年前    · 
任性的马克杯  ·  c++ - Is it possible ...·  1 年前    · 
闷骚的红薯  ·  java - Selenium: ...·  1 年前    · 
阳光的金鱼  ·  Could not load file ...·  1 年前    · 

Elasticsearch查询慢问题排查思路

Elasticsearch的查询慢的问题往往是由多种因素造成的,同时我们也需要遵循Elasticsearch的查询准则:ES适合top N的查询,不适合大数据量返回的查询。

场景1 内存参数配置不合理,文件系统缓存不足。

记得给你的Elasticsearch预留一定的内存给Lucene文件缓存使用哦。

场景2 查询范围过大,一次查询过多的分片,如全表扫描查询。

一次查询过多的分片,容易把内存撑爆,so,最好分批次查询,温柔点嘛。

场景3 进行深度翻页查询,如查询10000之后的结果。

进行深度翻页查询,如查询10000-10010的结果,这时候需要使用scroll查询了。

场景4 查询返回的结果集过大,如10w。

同样,这种查询太暴力了,建议使用scroll查询分批次返回,Elasticsearch没你想象的坚强。

场景5 查询语句不是最优,如过滤查询可以使用filter。

根据具体的业务场景去优化查询语句,过滤查询使用filter,不需要评分,减少很多计算。

场景6 使用模糊匹配查询造成内存溢出的问题。

千万不要尝试使用*等通配符的暴力做法,内存很脆弱的。

场景7 聚合查询返回的结果集过大,聚合的范围过大。

聚合更加是耗费内存的操作了,所以你懂的。

场景8 聚合查询N多唯一值引起的高内存使用率。

同上,慎重。

场景9 用text字段进行排序,造成fielddata占用大量的内存。

排序请用keyword字段,谢谢。

场景10 索引段文件过多,需要定时的进行索引段合并。

查询的底层文件是lucene段文件,减少段文件个数一定程度上可以减少并发查询的段文件个数。

场景11 分片分布不均衡,未能充分利用机器资源。

尽量让分片均匀分片,查询的时候才能充分发挥分布式的优势。

场景12 磁盘IO瓶颈。

没办法,加钱吧?

场景13 索引数据结构mapping设计不合理,如不需要分词的keyword。

mapping设置超关键的,建立索引之前慎之又慎,切记。。。

场景14 分词器设计不合理,如存在过度分词的问题。

是的,如果你的字段分的越多,需要遍历的term就更多,查询肯定就更慢了呀。

场景15 索引分片过大,如单个分片达到100GB+。

单个分片这么大,你考虑过机器的感受吗,建议单个分片20-50GB大小。

列举了一些常见的会造成写入慢的场景, 更多的查询调优手段 点这里。

写入慢排查思路在这里 ,等你来,老弟。

前言经常会有人吐槽,Elasticsearch为什么查着查着突然就慢了?笔者总结了常见的一些导致查询慢的场景,供大家排查。go go goElasticsearch查询慢问题排查思路Elasticsearch的查询慢的问题往往是由多种因素造成的,同时我们也需要遵循Elasticsearch的查询准则:ES适合top N的查询,不适合大数据量返回的查询。场景1 内存参数配置不合...
es 里面的操作,主要分为两种,一种写入(增删改),另一种是 查询 (搜索) 我们分别要识别出来,哪些写入操作性能比较 ,哪些 查询 操作性能比较 ,先要识别出来有性能问题的这些 查询 写入,然后才能去考虑如何优化写入的性能,如何优化搜索的性能 搜索 查询 日志 无论是 查询 日志,还是 写入日志,都是针对shard级别的,因为大家应该知道,无论你是执行增删改,还是执行搜索,都是对某个数据执行写入或者是搜索,其实都是到某个shard上面去执行的 shard上面执行的 的写入或者是搜索,都会记录在针对这个shar
日志分析和监控: Elasticsearch 可以收集、存储和分析大量服务器日志数据,帮助您监控系统性能和 找故障。 搜索引擎: Elasticsearch 可以构建高性能的搜索引擎,用于 查询 大量文档、网页和其他数据。 商业智能和数据分析: Elasticsearch 可以用于处理和分析大量实时数据,以帮助企业做出更明智的决策。 安全性分析:Elastics...
接上篇,我们构造各种条件,可以进行各种 查询 ,找到满足我们需求的数据,但是如果数据量大,不知道大家发现一个问题没,那就是你getHits,只能get到一万,一万之后的没办法,那是因为普通的搜索只能支持到这里...... 不懂?那这么讲吧,咱们之前用的搜索,相当于MySQL的limit,这种分页,数据量少的话怎么玩都行,但是如果量大呢,比如我现在十个亿数据,你在 ES 给我分个页试试,你分页的前提是都 出来,排序,全都怼在内存了,大哥,你内存是多大啊,现在明白为啥之前那种搜索只能取出一万数据了吧 当然了, ES
遇到这么一个案例: 1、客户反馈 es 集群存在很多 查询 ,检 发现都是term 查询 ,而且进行了sort排序,但是size是top 15,这样的 查询 不至于一直报 查询 。 2、继续检 日志,发现所有 查询 都是一个索引报的,也就是其他的索引的 查询 都是正常的 3、定位到索引后,_cat/shards/in 步骤一: es 的slowlog 可以通过启用 Elasticsearch 中的 速日志来识别运行缓 查询 。 Slowlogs专门用于分片级别,这意味着只应用数据节点。仅协调 Coordinating-only/客户client节点不具备 日志分析功能,因为它们不保存数据(索引/分片)。Slowlogs有助于回答以下问题: Slowlogs专门用于分片级别,这意味着只应用数据节点。仅协调 Coordinating-only/客户client节点不具备 日志分析功能,因为它们不保存数据(索引/分片)。Sl 场景1 内存参数配置不合理,文件系统缓存不足。 场景2 查询 范围过大,一次 查询 过多的分片,如全表扫描 查询 。 场景3 进行深度翻页 查询 ,如 查询 10000之后的结果。 场景4 查询 返回的结果集过大,如10w。 场景5 查询 语句不是最优,如过滤 查询 可以使用filter。 场景6 使用模糊匹配 查询 造成内存溢出的问题。 场景7 聚合 查询 返回的结果集过大,聚合的范围过大。 场景8 聚合 查询 多唯一值引起的高内存使用率。 场景9 用text字段进行排序,造成fiel Elasticsearch 社区中经常看到 查询 问题:“你能帮我看看 Elasticsearch 的响应时间吗?”或者是:“我的 ES 查询 耗时很长,我该怎么做?” 包含但不限于:N es ted 查询 、集群 查询 、range 查询 等问题。 在这里插入图片描述 1、两个维度 每当我们得到这些类型的问题时,我们首先要深入研究两个主要方面:     配置维度 - 看当前系统资源和默认Elasti...
最近解决了一个因索引导致 ES 写入性能很低的问题,记录如下: 问题描述: 机器配置8C/16G 5个数据节点,照理来说性能应该不错,但是写入速度TPS只有4000左右,之后我们对写入进行bulk批量写入,虽然整体写入数据性能有所提高,但是 ES 的TPS依然不高,另外隔一段时间就发现 ES 的写入队列比较长,拒绝请求也非常高, Es 日常日志和 日志发现在请求过程中存在大量如下错误: failed to execute bulk item (index) BulkShardRequ es t [[xxxxx][0]]
大佬,请求一下是怎么跟踪源码的,我从restHighLevelClient.bulk(request, RequestOptions.DEFAULT)开始往里面走,到RestClient#performRequest()里有 httpResponse = (HttpResponse)this.client.execute(context.requestProducer, context.asyncResponseConsumer, context.context, (FutureCallback)null).get();再往execute走就没有什么可继续往下走的了。怎么像你这样一个请求能走到所有的过程。 【Elasticsearch】优秀实践-你的ES为什么写的慢了? BaddhaLike: 博主能不能给个实操呢 【Java全栈知识体系】 不吃西红柿丶: 非常有用,感谢大佬的整理,期待后续大作