1. 问题背景与现象分析
那天早上9点15分,我刚打开IDE准备处理当天的需求,企业微信的生产群突然炸开了锅。运营同学连续发了三条消息:"秒杀商品详情页挂了!用户点击后要等30秒才能加载出来!"
作为负责秒杀系统的开发,我立刻意识到问题的严重性。秒杀活动是电商平台流量最大的场景之一,高峰期QPS能达到平时的10倍以上。商品详情页作为用户下单前的最后一步,响应时间直接关系到转化率。根据我们之前的压测数据,这个接口的99线应该控制在200ms以内,现在居然飙升到30秒,这简直是灾难性的。
我迅速打开了APM监控系统,定位到问题接口是/api/seckill/goods/detail。日志显示这个接口的平均响应时间确实达到了惊人的30000ms,超时率100%。更糟糕的是,由于接口超时导致前端不断重试,数据库连接池很快被耗尽,引发了雪崩效应。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. SQL性能问题排查
2.1 慢SQL定位
我首先检查了数据库慢查询日志,很快锁定了问题SQL:
sql复制SELECT g.*, s.spu_name, k.sku_name, c.category_name, b.brand_name
FROM seckill_goods g
JOIN spu_info s ON g.spu_id = s.spu_id
JOIN sku_info k ON g.sku_id = k.sku_id
JOIN category c ON g.category_id = c.category_id
JOIN brand b ON g.brand_id = b.brand_id
WHERE g.goods_id = 'SK20230521001'
这条SQL看起来非常标准:通过商品ID查询秒杀商品信息,并关联查询SPU、SKU、分类和品牌信息。所有关联字段都是主键或唯一索引,理论上应该毫秒级返回。
2.2 EXPLAIN分析
为了确认执行计划,我加上了EXPLAIN:
sql复制EXPLAIN SELECT g.*, s.spu_name, k.sku_name, c.category_name, b.brand_name
FROM seckill_goods g
JOIN spu_info s ON g.spu_id =
