一、报告概述
本报告面向搜索接口的性能验证与全文索引改造收益评估,覆盖压测场景设计、并发梯度、响应时间分布、错误率等核心指标,并对启用全文索引前后的查询耗时、资源占用与命中率进行量化对比,最终给出可落地的优化建议、优先级与预期收益。
- 压测对象:搜索接口
/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 轮取中位数,排除冷启动与缓存抖动影响。
三、压测场景设计
- 场景 A:单关键词检索——高频短词,验证基础检索能力。
- 场景 B:多关键词组合检索——2 至 3 个词组合,验证索引匹配效率。
- 场景 C:检索加分页排序——带
ORDER BY与LIMIT,验证深分页表现。 - 场景 D:检索加多条件过滤——叠加类目、时间范围、状态过滤。
- 场景 E:长尾低频词检索——验证低命中率下的资源消耗。
四、并发梯度与响应时间分布
并发梯度设置为 50、100、200、400、800 线程,每档持续 5 分钟,统计平均响应时间、P95、P99 与吞吐量。
| 并发线程 | 平均 RT(ms) | P95(ms) | P99(ms) | 吞吐量(TPS) | 错误率 |
|---|---|---|---|---|---|
| 50 | 42 | 86 | 132 | 1180 | 0.00% |
| 100 | 58 | 118 | 186 | 1690 | 0.02% |
| 200 | 96 | 204 | 318 | 2050 | 0.05% |
| 400 | 178 | 392 | 620 | 2210 | 0.12% |
| 800 | 356 | 780 | 1240 | 2180 | 0.31% |
响应时间分布呈明显右偏,P99 约为 P95 的 1.6 倍,说明存在少量慢查询放大效应;并发超过 400 后吞吐量趋于平台期,系统进入饱和区间。
五、错误率与异常分析
- 错误主要集中在 800 并发档位,以连接池等待超时(
Connection is not available)与慢查询超时为主。 - 场景 C 深分页在 400 并发以上出现明显抖动,
LIMIT 10000, 20类查询耗时是浅分页的 6 至 9 倍。 - 场景 E 长尾词在未启用全文索引时触发全表扫描,单次查询最高达 2.3 秒。
六、全文索引收益量化结论
对比启用全文索引前后,在相同数据规模与相同压测脚本下的核心指标差异如下。
| 指标 | 启用前 | 启用后 | 变化幅度 |
|---|---|---|---|
| 平均查询耗时 | 312 ms | 96 ms | 下降 69.2% |
| P95 查询耗时 | 620 ms | 198 ms | 下降 68.1% |
| P99 查询耗时 | 1240 ms | 386 ms | 下降 68.9% |
| 数据库 CPU 峰值 | 86% | 51% | 下降 40.7% |
| 数据库 IOPS 峰值 | 4200 | 1650 | 下降 60.7% |
| 关键词命中率 | 82.3% | 96.7% | 提升 14.4 个百分点 |
| 错误率(400 并发) | 1.80% | 0.12% | 下降 93.3% |
| 最大稳定吞吐 | 1420 TPS | 2210 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%。
- 连接池参数调整需与运维确认实例规格上限。