elasticsearch中如何分析慢查询

参考:https://www.phpmianshi.com/?id=198

背景

首先,Elasticsearch中有两个版本的慢速日志:索引慢速日志(index slow logs )和搜索慢速日志( search slow logs)。 由于我们试图解决的问题涉及慢查询,我们将专注于搜索慢速日志。 但是,如果在索引文档/添加文档时问题,那么我们将查看索引慢速日志。

 

默认情况,慢日志是不开启的。要开启它,需要定义具体动作(query,fetch 还是 index),你期望的事件记录等级( WARN、INFODEBUG、TRACE 等),以及时间阈值。

es有几种搜索模式,比如 query_then_fetch , 表示先从各个节点query到id,然后整合,再去各个节点拿具体数据

 

 

两种开启方式

一、通过修改log4j2.properties来启用慢查询:(该方式需要修改配置文件,还要重启节点,强烈建议用第二种方式)

vim log4j2.properties

 

index.indexing.slowlog.level: info
index.indexing.slowlog.source: 1000
#注:配置不一定都需要,自己选择需要那种级别(warn、info、debug、trace)日志,关闭的话配置成-1 就可以了,注释掉重启也可以
index.search.slowlog.threshold.query.warn: 10s  #超过10秒的query产生1个warn日志
index.search.slowlog.threshold.query.info: 5s   #超过5秒的query产生1个info日志
index.search.slowlog.threshold.query.debug: 2s   #超过2秒的query产生1个debug日志
index.search.slowlog.threshold.query.trace: 500ms #超过500毫秒的query产生1个trace日志

index.search.slowlog.threshold.fetch.warn: 1s  #fetch阶段的配置
index.search.slowlog.threshold.fetch.info: 800ms
index.search.slowlog.threshold.fetch.debug: 500ms
index.search.slowlog.threshold.fetch.trace: 200ms

#Index Slow log:索引慢日志配置
index.indexing.slowlog.threshold.index.warn: 10s   #索引阶段的配置
index.indexing.slowlog.threshold.index.info: 5s  
index.indexing.slowlog.threshold.index.debug: 2s 
index.indexing.slowlog.threshold.index.trace: 500ms

 

很多文章介绍上面的配置放到elasticsearch.yml或logging.yml,我这测试重启失败,有了解的可以留言介绍下,谢谢

参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-slowlog.html

 

二、通过API动态的修改配置:

这是一个索引级别的设置,也就是说可以独立应用给单个索引:这个配置是永久的,配置后即使集群重启也会保留。如果关闭日志记录的话将选项修改成 -1 即可

 

PUT /_all/_settings
{
    "index.search.slowlog.threshold.query.warn": "5s",
    "index.search.slowlog.threshold.query.info": "2s",
    "index.search.slowlog.threshold.query.debug": "1s",
    "index.search.slowlog.threshold.query.trace": "400ms",
    "index.search.slowlog.threshold.fetch.warn": "1s",
    "index.search.slowlog.threshold.fetch.info": "800ms",
    "index.search.slowlog.threshold.fetch.debug": "500ms",
    "index.search.slowlog.threshold.fetch.trace": "200ms",
    "index.indexing.slowlog.threshold.index.warn": "5s",
    "index.indexing.slowlog.threshold.index.info": "2s",
    "index.indexing.slowlog.threshold.index.debug": "1s",
    "index.indexing.slowlog.threshold.index.trace": "400ms"
}

查询慢于 10 秒输出一个 WARN 日志。
获取慢于 500 毫秒输出一个 DEBUG 日志。
索引慢于 5 秒输出一个 INFO 日志。

 

这是一个集群级别的设置:一旦阈值设置过了(可以在 elasticsearch.yml 文件里定义这些阈值。没有阈值设置的索引会自动继承在静态配置文件里配置的参数),你可以和其他日志器一样切换日志记录等级。这个API简单试了下,没效果。并没有改变日志记录级别。而且我没找到集群级别的设置慢查询阈值的API。有知道的发个链接(QQ:1250134974)

 

PUT /_cluster/settings
{
    "transient": {
        "logger.index.search.slowlog": "DEBUG",
        "logger.index.indexing.slowlog": "WARN"
    }
}

设置搜索慢日志为 DEBUG 级别。设置索引慢日志为 WARN 级别。

 

工具1:Profile API

Profile API提供有关搜索的信息页面,并分解每个分片中发生的情况,直至每个搜索组件(match/range/match_phrase等)的各个时间。 搜索越详细,_profile输出越详细。

GET /my_index/_search
{
    "profile": true,
    "query": {
        "bool": {
            "filter": [{
                "term": {
                    "l_id": 48
                }
            }]
        }
    }
}

 

 

工具2:Kibana profiling 工具

这与_profileAPI密切相关。 它提供了各个搜索组件的完美的可视化效果表征各个分解阶段以及各阶段查询的时间消耗。 同样,这允许您轻松选择查询的问题区域。

bk9tc45o4o.gif

 

参考

更多优化和常见问题参考:

https://www.phpmianshi.com/?id=216

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您好!对于ES(Elasticsearch)来说,大数据量查询速度慢可能有多种原因。以下是一些常见的解决方案和优化建议: 1. 确保适当的硬件资源:ES对于处理大数据量的查询需要足够的硬件资源支持,包括内存、CPU和存储。确保您的硬件配置足够满足您的查询需求。 2. 分片和副本设置:ES通过将数据分成多个分片并复制到多个节点来实现水平扩展和高可用性。合理设置分片和副本的数量,可以提高查询性能。 3. 索引设计优化:索引的设计对于查询性能至关重要。确保索引的字段类型正确,并使用合适的分词器和分析器。避免使用过多的字段或者不必要的字段。 4. 查询优化:尽量避免使用全文搜索查询,可以使用过滤器、聚合等更高效的查询方式。使用查询缓存来缓存频繁使用的查询结果。 5. 数据压缩和压缩算法选择:对于大数据量的场景,可以考虑使用压缩算法来减少磁盘空间占用和网络传输开销。 6. 确保网络连接稳定:ES是一个分布式系统,网络连接的稳定性对于查询性能至关重要。确保网络连接畅通,并且减少网络延迟。 7. 升级ES版本:ES的版本更新通常会包含性能改进和优化,因此考虑升级到最新版本。 这些只是一些常见的解决方案和优化建议,具体的优化策略还需要根据您的具体环境和需求进行定制。希望对您有所帮助!如有更多问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值