performance - Elasticsearch 随机慢查询问题排查
问题描述
我将我的数据从 Elasticsearch 集群移动到另一个具有强大硬件的集群(4 个节点/2CPU 8GB RAM,每个节点在每台机器的 JVM 上 4GB//旧集群有 3 个节点,每个节点有 1 个 cpu,每台机器在 JVM 上 2GB)但我是随机遇到一些我在旧集群上没有的非常慢的查询响应。
两个节点上相同的 ES 版本 6.8.14 和相同的文档编号/分片(62GB 数据/1.06 亿个文档)。
在新集群上使用分析器从 kibana 启动查询表明大部分时间都花在了这个阶段:
"collector" : [
{
"name" : "CancellableCollector",
"reason" : "search_cancelled",
"time_in_nanos" : 5777066437,
"children" : [
{
"name" : "MultiCollector",
"reason" : "search_multi",
"time_in_nanos" : 5756203807,
"children" : [
{
"name" : "SimpleTopScoreDocCollector",
"reason" : "search_top_hits",
"time_in_nanos" : 747674917
},
{
"name" : "MultiBucketCollector: [[min_price, max_price, in_stock, out_of_stock, category, agg_h, mdata, agg_att, agg_f]]",
"reason" : "aggregation",
"time_in_nanos" : 4966026553
}
]
}
]
}
]
每个节点的 CPU 使用率非常低 (5/10%),平均负载还可以 (0.50)
在短时间内再次启动相同的查询会将响应从 8 秒降低到 0.4 秒(我猜是因为 ES 缓存),从查询中删除“aggs”部分似乎也解决了这个问题,因此性能不佳实际上是在聚合器阶段.
无论如何,我不明白为什么这种减速只发生在新的“更好”集群上......我怎样才能优化性能或更好地排除故障?
解决方案
推荐阅读
- android - 如何为嵌套类函数编写 Frida 钩子?
- python - 如何在 pyspark 中调用预测函数?
- java - 为什么 FileWriter 没有像它应该的那样创建一个新行?JAVA
- c++ - 初始化指向类对象的指针容器?
- sql - 创建与 SQL Server 存储过程的 Microsoft Excel 连接
- ios - 如何为 Google Cardboard 配置 React 360
- java - 打印上标字符在 Eclipse 中不起作用
- python - Opencv模板匹配不同大小的图片
- aurelia - 如何在 aurelia 组件中完全呈现自定义元素以进行 e2e 测试?
- mysql - 如何在zend框架3中使用动态数据连接到数据库