1.请求量对搜索性能的影响
请求量(QPS
,Queries Per Second
)是指系统在单位时间内处理的搜索请求数量,它对搜索性能有直接影响:
- 资源消耗:随着请求量增加,CPU、内存、I/O 和网络带宽等资源消耗会线性或非线性增长。
- 低请求量时:系统资源充足,性能稳定。
- 高请求量时:可能导致资源争用,引发性能下降。
- 缓存效率:
- 适当请求量可提高缓存命中率(热门查询被缓存)。
- 过高请求量可能导致缓存频繁失效(缓存抖动)。
- 服务质量下降:
- 超过系统承载能力时,可能导致响应时间增加或错误率上升。
- 极端情况下可能引发雪崩效应,导致系统崩溃。
- 扩展性挑战:
- 线性扩展可能因分布式系统开销而变得困难。
- 分片策略和负载均衡效率变得至关重要。
2.延迟对搜索性能的影响
延迟(Latency
)指从发出查询到获得完整响应所需的时间:
- 用户体验:
- 100 m s 100\ ms 100 ms 内:用户感觉即时响应。
- 1 1 1 秒内:用户感觉流畅但可察觉延迟。
- 超过 3 3 3 秒:用户明显感到不耐烦。
- 系统设计影响:
- 高延迟要求需要更复杂的缓存和预取策略。
- 可能需要在准确性和速度间做出权衡(如近似搜索)。
- 资源利用率:
- 长延迟请求会占用连接和线程资源,影响整体吞吐量。
- 可能导致后续请求排队,形成连锁反应。
- 架构选择:
- 低延迟要求通常需要内存索引而非磁盘索引。
- 可能需要分布式索引和并行处理。
3.其他重要的搜索性能指标
3.1 吞吐量(Throughput)
- 定义:系统在单位时间内能处理的查询数量
- 示例:系统峰值吞吐量为 10 , 000 10,000 10,000 QPS
- 重要性:衡量系统处理能力的关键指标
3.2 错误率(Error Rate)
- 定义:失败请求占总请求的百分比
- 示例:HTTP 500 错误占总请求的 0.1 % 0.1\% 0.1%
- 细分:
- 客户端错误(
4xx
) - 服务端错误(
5xx
) - 超时错误
- 客户端错误(
3.3 召回率(Recall)
- 定义:系统返回的相关结果占所有可能相关结果的比例
- 公式:
召回率
=系统检索出的相关结果数
/所有真正相关的结果数
- 示例:查询 “
智能手机
” 应返回 100 100 100 个相关文档,实际返回 80 80 80 个,召回率为 80 % 80\% 80% - 影响:反映搜索的全面性
3.4 精确率(Precision)
- 定义:返回结果中真正相关的比例
- 公式:
精确率
=真正相关的返回结果数
/系统返回的所有结果数
- 示例:返回 20 20 20 个结果中 15 15 15 个相关,精确率为 75 % 75\% 75%
- 影响:反映搜索的准确性
3.5 平均响应时间(Average Response Time)
- 定义:所有请求响应时间的平均值
- 注意:可能掩盖长尾问题,需结合百分位数分析
3.6 百分位延迟(Percentile Latency)
- 定义:特定比例请求的响应时间上限
- 常见指标:
- P 50 P50 P50(中位数)
- P 95 P95 P95( 95 % 95\% 95% 请求快于此值)
- P 99 P99 P99( 99 % 99\% 99% 请求快于此值)
- 示例: P 99 = 500 m s P99=500ms P99=500ms 表示 99 % 99\% 99% 请求在 500 m s 500ms 500ms 内完成
3.7 缓存命中率(Cache Hit Ratio)
- 定义:缓存满足的请求比例
- 示例:缓存命中率 85 % 85\% 85% 表示 15 % 15\% 15% 请求需后端处理
- 影响:直接影响响应时间和后端负载
3.8 索引新鲜度(Index Freshness)
- 定义:反映了数据变更(新增、修改、删除)到被索引并可被搜索到的时间延迟
- 度量方式:
- 数据更新到可搜索的时间延迟
- 索引更新频率
- 示例:电商价格变更后平均 30 30 30 秒可搜索到
3.9 查询复杂度(Query Complexity)
- 定义:查询解析和执行的复杂程度
- 影响因素:
- 布尔操作数量
- 聚合和排序需求
- 模糊匹配和同义词扩展
3.10 并发用户数(Concurrent Users)
- 定义:同时活跃的搜索用户数量
- 影响:与请求量相关但考虑用户会话保持
3.11 结果集大小(Result Set Size)
- 定义:单个查询返回的匹配文档数量
- 影响:
- 网络传输时间
- 客户端渲染性能
- 分页效率
3.12 系统资源利用率
- 关键指标:
- CPU 使用率
- 内存使用量
- 磁盘 I/O
- 网络带宽
- 影响:资源饱和会导致性能下降
4.性能指标间的相互关系
这些指标之间存在复杂的相互影响关系:
- 延迟与吞吐量:通常呈反比关系,追求低延迟可能限制吞吐量。
- 召回率与精确率:往往需要权衡,提高一个可能降低另一个。
- 缓存命中率与新鲜度:高缓存命中率可能导致新鲜度下降。
- 请求量与错误率:过载时错误率通常上升。
5.优化搜索性能的策略
基于这些指标,可以采取多种优化策略:
- 水平扩展:增加节点处理更高请求量。
- 查询优化:简化复杂查询,使用过滤器缓存。
- 索引优化:合理分片,使用适当的数据结构。
- 缓存策略:多级缓存(查询缓存、结果缓存、字段缓存)。
- 资源分配:根据查询模式分配资源(如 OLAP 与 OLTP 分离)。
- 监控与告警:建立全面的性能监控体系。
理解这些指标及其相互关系,是构建和维护高性能搜索系统的关键基础。
6.GET xxx/_stats 结果解读
当集群收到请求时,可能需要跨多个节点访问多个分片中的数据。系统处理和返回请求的速率、当前正在进行的请求数以及请求的持续时间等核心指标是衡量集群健康的重要因素。
请求过程本身分为两个阶段。第一个是查询阶段,集群将请求分发到索引中的每个分片(主分片或副本成片)。第二个是获取阶段,查询结果被收集,处理并返回给用户。
GET products/_stats
以下是 GET products/_stats
返回的 search
部分各参数的含义详解:
基础查询指标
|
|
|
---|---|---|
open_contexts | 当前值 | 活跃的搜索上下文数(如打开的 Scroll 或 PIT 查询)。0 表示没有长期运行的搜索上下文。 |
query_total | 累计值 | 历史累计的查询请求总数(所有_search 请求)。示例中已执行 2 次查询。 |
query_time_in_millis | 累计值 | 查询阶段消耗的总时间(毫秒)。0 表示查询非常快(可能命中缓存或数据量极小)。 |
query_current | 当前值 | 正在执行的查询请求数。0 表示当前无查询进行。 |
数据获取(Fetch)指标
|
|
|
---|---|---|
fetch_total | 累计值 | 历史累计的 fetch 阶段操作次数(查询后获取完整文档内容的次数)。与 query_total 一致表示每次查询都触发了 fetch。 |
fetch_time_in_millis | 累计值 | fetch 阶段总耗时(毫秒)。0 说明文档获取极快(可能文档很小或缓存命中)。 |
fetch_current | 当前值 | 正在执行的 fetch 操作数。0 表示无 fetch 在进行。 |
滚动查询(Scroll)指标
|
|
|
---|---|---|
scroll_total | 累计值 | 历史累计的 Scroll 查询请求数。1 表示发起过 1 次滚动查询(用于分批读取大量数据)。 |
scroll_time_in_millis | 累计值 | 所有 Scroll 查询的总耗时(毫秒)。529ms 是累计值,单次 Scroll 查询的实际耗时需结合请求数计算。 |
scroll_current | 当前值 | 活跃的 Scroll 查询数。0 表示当前无 Scroll 查询运行。 |
搜索建议(Suggest)指标
|
|
|
---|---|---|
suggest_total | 累计值 | 历史累计的搜索建议请求数(如 _suggest API调用)。0 表示未使用此功能。 |
suggest_time_in_millis | 累计值 | 处理搜索建议的总耗时(毫秒)。 |
suggest_current | 当前值 | 正在处理的搜索建议请求数。 |
关键解读
- 性能分析:
- 查询和 Fetch 时间均为
0ms
,可能因数据量极小或缓存命中(如size:1
的查询)。- 存在 Scroll 查询(
scroll_total:1
),说明有过批量数据导出操作,耗时529ms
。- 系统负载:
- 所有
_current
值为0
,表示当前搜索模块空闲,无正在执行的请求。- 使用模式:
- 未使用搜索建议功能(
suggest_*
均为0
)。- 查询和 Fetch 次数一致(
2
),说明每次查询都要求返回完整文档(未使用_source: false
优化)。
扩展知识
- Scroll查询:适用于深度分页或全量导出,但会占用资源,建议改用 Point-In-Time (PIT)(ES 7.10+)。
- 优化建议:
- 若
query_time_in_millis
较高,可优化索引映射或添加查询缓存。- 高
scroll_time_in_millis
时,考虑减少单次 Scroll 返回的文档数(如?scroll=1m&size=100
)。