Hawkeye:TopN慢query的获取与优化

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
OpenSearch LLM智能问答版免费试用套餐,存储1GB首月+计算资源100CU
推荐全链路深度定制开发平台,高级版 1个月
简介: 之前的文章介绍了Hawkeye的底层分析系统(待补充文章),其中讲到了基于Blink的Batch任务实现方法,前段时间在优化慢query查询的过程中开发了应用TopN慢query获取的分析任务,其中用到的分析方法适用于其他类似求TopN的问题中。

Hawkeye的底层分析系统基于Blink进行大数据分析,前段时间在优化慢query查询的过程中开发了应用TopN慢query获取的分析任务,其中用到的分析方法适用于其他类似求TopN的问题中。本文的TopN问题属于批处理范畴。

一、背景

经过hawkeye之前的慢query分析,每个应用不同程度的存在慢query,大量的慢query大大影响了引擎的性能,也会带来机器资源的浪费。为了优化Ha3的查询性能,我们将分析更深入了一步,分为如下三部分进行慢query的优化。。

  • 应用TopN慢query的获取:获取top50的慢query,并分析出查询各阶段耗时占比;
  • 各阶段耗时优化&验证:几种常见的优化手段,这些优化手段均是通过验证有效的方法;
  • 优化收益评估:经过优化带来的价值主要体现在慢查询数的减少和容量预估的增加。

二、TopN慢查询获取流程

慢query数据来自应用的访问日志,query数量和应用的访问量有关,通常在千万甚至亿级别。从海量日志中获取TopN慢query属于大数据分析范畴。我们借助Blink的大数据分析能力,采用分治+hash+小顶堆的方式进行获取,即先将query格式进行解析,获取其查询时间,将解析后的k-v数据取md5值,然后根据md5值做分片,在每一个分片中计算TopN慢query,最后在所有的TopN中求出最终的TopN。下面图示为慢query任务的处理过程。

image.png

定时任务每天执行一次,将应用昨天的AccessLog按照上述流程处理一遍,从而获取应用的Top50慢query,从获取的top50慢query可以分析出一些应用访问不合理的地方,虽然不能完全代表高频慢query,但对于Top级的query优化也可以持续的对应用进行优化,提高查询性能,节约机器资源。

三、慢query的优化手段

按照平台用户易优化的原则,根据分析的结论数据提供了四种不同的query优化手段,按照阶段分为:

粗排阶段三种:

  • rank_size数过大,建议减少rank_size数量,可能会影响效果,需业务方评估;
  • rank_size数量合理,但粗排阶段耗时占比超过50%,检查海选插件的性能;
  • 正排过滤改为倒排召回,对于特定场景有很大作用,第四部分会讲到具体case;

精排阶段一种:

  • 战马耗时占比超过50%,建议检查战马相关插件的性能。

目前的优化手段在tisplus2平台上进行透出,点击优化可以看到诊断具体慢query的优化建议,如果上述四条建议条件均不满足,则需要联系平台管理员具体诊断下慢的原因了。

四、优化的收益

第四部分介绍下采用上述优化带来的效果,某应用采用正排过滤改为倒排召回的优化,采用此优化的前提是:1.swift消息无update消息;2.对应字段是可枚举类型;3.非子doc并且seek数远大于match数。采用此优化之后,慢query数直线下降,由百万级别降到0,且容量预估提升了8倍(即相同资源可抗的访问量上涨了8倍)。

五、总结

目前慢query的优化功能已上线,用户可以自行查看应用的访问状况和访问较慢的query,并针对性的进行分析和初步的优化,相比较之前是一个从无到有的过程。但是目前的慢query分析还有很多可以优化的地方,比如优化建议的丰富、慢query的自动优化以及实时慢query的分析等,目前的慢query分析已经能起到一定的问题诊断和优化的作用了,未来还需要持续的挖掘和深入。如果你对数据分析和引擎优化方面有心得,欢迎与我交流,也欢迎有才的你加入搜索事业部。

image.png

相关文章
|
6月前
|
SQL 关系型数据库 MySQL
MySQL数据库——SQL优化(3/3)-limit 优化、count 优化、update 优化、SQL优化 小结
MySQL数据库——SQL优化(3/3)-limit 优化、count 优化、update 优化、SQL优化 小结
311 0
|
7月前
|
SQL 算法 关系型数据库
MySQL查询优化之order by 、 group by与分页查询优化
MySQL查询优化之order by 、 group by与分页查询优化
360 0
|
SQL 架构师 关系型数据库
不可置信!SQL 优化终于干掉了“distinct”
sql 优化之多表联合查询干掉 “distinct” 去重关键字 在我提交了代码的时候,架构师给我指出我这个sql这样写会有问题。因为在分库分表的时候,是不支持子查询的。 所以需要把多表的子查询的 sql 结构进行优化。 是不是挺恐怖的;(此处为了脱敏,我把相关的 sql 关键词都给打码掉了)
|
SQL 关系型数据库 MySQL
MySQL排序ORDER BY与分页LIMIT,SQL,减少数据表的网络传输量,完整详细可收藏
MySQL排序ORDER BY与分页LIMIT,SQL,减少数据表的网络传输量,完整详细可收藏
146 0
|
SQL 存储 关系型数据库
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(三)
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(三)
269 0
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(三)
|
SQL 存储 关系型数据库
如何通过索引让 SQL 查询效率最大化
如何通过索引让 SQL 查询效率最大化
102 0
如何通过索引让 SQL 查询效率最大化
|
SQL 算法 关系型数据库
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(二)
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(二)
139 0
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(二)
|
SQL 关系型数据库 MySQL
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(一)
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(一)
207 0
MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exsits优化、count(*)查询优化(一)
|
SQL 关系型数据库 MySQL
数据库面试题【十八、优化关联查询&优化子查询&优化LIMIT分页&优化UNION查询&优化WHERE子句】
数据库面试题【十八、优化关联查询&优化子查询&优化LIMIT分页&优化UNION查询&优化WHERE子句】
165 0
|
SQL 存储 关系型数据库
查询太慢?SQL 优化这么做就对了!
在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长,很多SQL语句开始暴露出性能问题,对生产的影响也越来越大,有时可能这些有问题的SQL就是整个系统性能的瓶颈。
222 0