ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

10.27

10.27

一、报告概述

本报告面向搜索接口的性能验证与全文索引改造收益评估,覆盖压测场景设计、并发梯度、响应时间分布、错误率等核心指标,并对启用全文索引前后的查询耗时、资源占用与命中率进行量化对比,最终给出可落地的优化建议、优先级与预期收益。

  • 压测对象:搜索接口/api/search(关键词检索、分页、排序、过滤组合场景)。
  • 压测目标:验证在目标并发下的稳定性,量化全文索引带来的性能收益,识别瓶颈点。
  • 结论摘要:启用全文索引后,P95 查询耗时下降约 68%,数据库 CPU 峰值下降约 41%,关键词命中率由 82.3% 提升至 96.7%,错误率由 1.8% 降至 0.12%。

二、压测环境与数据准备

项目配置说明
应用服务4 核 8G,2 实例,JDK 17,Spring Boot 3.x
数据库MySQL 8.0,8 核 16G,主从架构,InnoDB
缓存Redis 7.x,单节点 4G
压测工具JMeter 5.6,分布式压测(1 主 2 从)
数据规模商品表 500 万行,平均字段长度 320 字节
索引方案对照组:LIKE '%keyword%'全表扫描;实验组:全文索引(ngram 分词)

压测前统一预热 5 分钟,每组场景重复 3 轮取中位数,排除冷启动与缓存抖动影响。

三、压测场景设计

  1. 场景 A:单关键词检索——高频短词,验证基础检索能力。
  2. 场景 B:多关键词组合检索——2 至 3 个词组合,验证索引匹配效率。
  3. 场景 C:检索加分页排序——带ORDER BY与LIMIT,验证深分页表现。
  4. 场景 D:检索加多条件过滤——叠加类目、时间范围、状态过滤。
  5. 场景 E:长尾低频词检索——验证低命中率下的资源消耗。

四、并发梯度与响应时间分布

并发梯度设置为 50、100、200、400、800 线程,每档持续 5 分钟,统计平均响应时间、P95、P99 与吞吐量。

并发线程平均 RT(ms)P95(ms)P99(ms)吞吐量(TPS)错误率
50428613211800.00%
1005811818616900.02%
2009620431820500.05%
40017839262022100.12%
800356780124021800.31%

响应时间分布呈明显右偏,P99 约为 P95 的 1.6 倍,说明存在少量慢查询放大效应;并发超过 400 后吞吐量趋于平台期,系统进入饱和区间。

五、错误率与异常分析

  • 错误主要集中在 800 并发档位,以连接池等待超时(Connection is not available)与慢查询超时为主。
  • 场景 C 深分页在 400 并发以上出现明显抖动,LIMIT 10000, 20类查询耗时是浅分页的 6 至 9 倍。
  • 场景 E 长尾词在未启用全文索引时触发全表扫描,单次查询最高达 2.3 秒。

六、全文索引收益量化结论

对比启用全文索引前后,在相同数据规模与相同压测脚本下的核心指标差异如下。

指标启用前启用后变化幅度
平均查询耗时312 ms96 ms下降 69.2%
P95 查询耗时620 ms198 ms下降 68.1%
P99 查询耗时1240 ms386 ms下降 68.9%
数据库 CPU 峰值86%51%下降 40.7%
数据库 IOPS 峰值42001650下降 60.7%
关键词命中率82.3%96.7%提升 14.4 个百分点
错误率(400 并发)1.80%0.12%下降 93.3%
最大稳定吞吐1420 TPS2210 TPS提升 55.6%

结论:全文索引在查询耗时、资源占用与命中率三个维度均带来显著收益,其中 IOPS 与错误率改善最为突出,说明索引有效降低了全表扫描带来的资源放大效应。

七、优化建议与优先级

优先级优化项预期收益
P0为高频检索字段建立并固化全文索引,统一 ngram 分词配置P95 再降 10% 至 15%,命中率稳定在 96% 以上
P0深分页改为游标分页(基于主键或时间戳)深分页耗时下降 70% 以上,消除 400 并发抖动
P1扩大数据库连接池并设置合理超时与熔断800 并发错误率由 0.31% 降至 0.1% 以内
P1热点关键词结果接入 Redis 缓存,设置短 TTL热点查询耗时下降 50%,数据库 QPS 下降 30%
P2引入慢查询监控与索引命中率看板问题发现时间从小时级缩短至分钟级
P2评估搜索引擎(如 Elasticsearch)承接复杂检索复杂组合查询耗时下降 60% 以上

八、风险与后续计划

  • 全文索引会增加写入开销与存储占用,需评估写入放大比例,建议在业务低峰期完成索引重建。
  • ngram 分词粒度需结合业务词表调优,避免短词误匹配导致命中率虚高。
  • 后续计划:完成 P0 项改造并复测,补充 1000 并发档位数据,形成常态化压测基线。

九、日报

今日完成:

  • 完成搜索接口压测方案设计与 5 类场景脚本编写,覆盖 50 至 800 并发梯度。
  • 完成启用全文索引前后的对照压测,采集响应时间分布、错误率与资源占用数据。
  • 输出全文索引收益量化结论:P95 耗时下降 68.1%,数据库 CPU 峰值下降 40.7%,命中率提升 14.4 个百分点。
  • 完成压测报告撰写并组织评审,形成 6 项优化建议并明确 P0、P1、P2 优先级。

明日计划:

  • 推进 P0 项:固化全文索引配置,改造深分页为游标分页。
  • 补充 1000 并发档位压测,验证系统上限与熔断策略有效性。

风险与需协调事项:

  • 索引重建需申请业务低峰期窗口,预计影响写入性能约 15%。
  • 连接池参数调整需与运维确认实例规格上限。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进