# 查询统计分析

URL: https://caijiao.org/elasticsearch/05.admin/09.monitoring-query-stats
Source: docs/elasticsearch/05.admin/09.monitoring-query-stats.md
Description: 本章讲解如何收集和分析 Elasticsearch 查询的各类统计指标，帮助用户定位性能瓶颈，优化搜索效率与资源利用。

查询统计分析是理解 Elasticsearch 搜索行为和性能瓶颈的重要手段。通过系统收集查询耗时、频率、错误率等指标，可以帮助运维和开发人员持续优化搜索体验。

## 1. 查询相关指标类型

- **查询总数**：单位时间内收到的查询请求数量  
- **查询延迟**：平均响应时间、百分位数响应时间  
- **查询错误率**：异常请求数量及类型  
- **缓存命中率**：查询缓存命中比例  
- **聚合性能**：聚合计算的耗时及资源消耗  

## 2. 获取查询统计数据

### 使用 Elasticsearch Cat API

```bash
GET /_cat/thread_pool/search?v
````

查看搜索线程池当前状态和队列长度。

```bash
GET /_nodes/stats/indices/search
```

详细查询统计指标，包括查询总数、时间等。

### 使用监控插件与工具

* **Stack Monitoring**：实时监控查询性能和负载
* **Metricbeat**：采集指标发送到 Elasticsearch
* **Prometheus Exporter**：采集并可视化查询相关指标

## 3. 查询日志分析

开启慢查询日志，在 `elasticsearch.yml` 中配置：

```yaml
index.search.slowlog.threshold.query.warn: 5s
index.search.slowlog.threshold.query.info: 2s
index.search.slowlog.threshold.query.debug: 500ms
index.search.slowlog.threshold.query.trace: 200ms
index.search.slowlog.level: info
```

分析慢查询日志，定位高耗时查询。

## 4. 查询统计指标示例

| 指标名称                          | 说明          |
| ----------------------------- | ----------- |
| `search.query_total`          | 查询请求总数      |
| `search.query_time_in_millis` | 查询总耗时       |
| `search.fetch_total`          | 查询结果提取次数    |
| `search.fetch_time_in_millis` | 结果提取耗时      |
| `search.open_contexts`        | 当前打开的查询上下文数 |

## 5. 优化建议

* 优化查询 DSL，减少无效查询字段
* 使用合适的索引映射与分析器
* 开启查询缓存，提升频繁查询响应速度
* 合理配置线程池和资源限制
* 定期监控并清理长时间未关闭的查询上下文

## 6. 常见问题与排查

| 问题       | 可能原因         | 解决方案             |
| -------- | ------------ | ---------------- |
| 查询响应慢    | 查询语句复杂，索引不合理 | 优化查询DSL，调整映射结构   |
| 查询线程池满载  | 查询请求过多或资源限制  | 扩容集群或调优线程池参数     |
| 频繁出现查询超时 | 网络问题或节点负载过高  | 监控资源，增加节点或优化负载均衡 |
| 查询缓存命中率低 | 查询不重复或缓存配置不足 | 合理设计查询，提高缓存利用率   |

---

通过全面的查询统计与分析，可以持续提升 Elasticsearch 集群的搜索性能和稳定性，保障用户体验。
