← 返回 FDE 培养总览 FDE 培养 · 知识点深化 · 性能成本调优
知识点深化 · 性能成本调优

性能成本调优:Profile 定位、缓存策略、LLM 降本三板斧、压测量化

客户投诉"慢"和"贵"是 FDE 最常面对的两个问题。这一页不讲理论公式,只讲现场实战:先量后改的优化闭环、后端性能三板斧(SQL/缓存/异步)、LLM 降本三板斧(选模型/精简Prompt/缓存)、压测前后对比用数据说话。

① 小白第一课怎么学(5 步走,约 90 分钟)

核心心法:先量后改,不要凭感觉优化。

1建立优化闭环认知(15 分钟)
读②③:基线→Profile→改→验证。
2后端性能三板斧(25 分钟)
读④:SQL/缓存/异步。
3LLM 降本三板斧(25 分钟)
选模型/精简Prompt/缓存。
4压测验证(15 分钟)
改完要量,用数据说话。
5刷题巩固(10 分钟)
做⑥⑦⑩。
本课小目标学完你要能:① 按"基线→Profile→改→验证"闭环做优化;② 定位慢查询并加索引;③ 正确使用缓存并处理三大坑;④ 用三板斧把 LLM 成本降一半。

② 一图看懂:性能成本优化闭环

性能成本优化 1. 建基线 p99延迟/QPS/成本 现在到底多慢多贵 2. Profile 定位 慢查询/火焰图/trace 找到那20%瓶颈 3. 动手优化 SQL/缓存/异步 选模型/精简Prompt/缓存 4. 压测验证 前后对比 快了多少/省了多少 80/20法则 20%代码导致80%耗时 易错:凭感觉瞎优化 改了半天没效果
读法:先量现在多慢多贵 → Profile 找到瓶颈 → 动手优化 → 压测对比验证。别跳步。

③ 本质直觉:优化就是"别做重复的事"

性能慢、成本贵,本质都是"在做重复的、不必要的计算"。

后端慢:同一个 SQL 跑了 1000 遍(没缓存)、大表全表扫描(没索引)、同步等外部 API(没异步)。

LLM 贵:简单任务用了最贵的模型(杀鸡用牛刀)、每次都把 8000 token 的文档全塞进去(RAG 没剪)、同一个问题问了 100 遍(没缓存)。

优化的本质就是消除重复:算过一次的结果存下来(缓存)、便宜能搞定的别用贵的(模型分级)、能异步的别同步等(异步化)。

慢/贵 = 重复计算 同SQL跑千遍 → 加缓存/索引 简单任务用大模型 → 换小模型 同问题问100遍 → 加结果缓存 同步等外部API → 改异步 核心:算过一次就存下来
80/20 法则20% 的代码导致了 80% 的耗时和成本。优化要找到那 20%,不是平均优化所有地方。

④ 完整体系:后端三板斧 + LLM 三板斧

后端性能三板斧

手段解决什么怎么做
SQL 优化数据库慢查询慢查询日志找瓶颈、加索引、消除 N+1
缓存重复查询打 DBRedis 缓存读多写少数据,设过期+删缓存
异步化同步阻塞拖慢主流程非核心路径改 MQ 异步,主流程快速返回

缓存三大坑

坑现象解法
缓存穿透查不存在的 key 每次打 DB空值缓存短过期 / 布隆过滤器
缓存雪崩大量 key 同时过期打 DB过期时间加随机偏移
缓存击穿热点 key 过期瞬间打 DB互斥锁重建 / 永不过期+后台更新

LLM 降本三板斧

手段省多少做法
模型分级10~15 倍简单任务用 gpt-4o-mini,难任务才用大模型
Prompt 精简30~50%RAG 只取 top-3,历史对话做摘要,设 max_tokens
结果缓存命中率 30~50%FAQ 类问题结果缓存 1 小时

成本计算公式

LLM 单次成本 成本 = 输入tokens × 输入单价 + 输出tokens × 输出单价

慢查询定位 SQL

-- PostgreSQL 查最耗时 SQL
SELECT query, calls, total_time, mean_time
FROM pg_stat_statements
ORDER BY total_time DESC LIMIT 10;

-- 看执行计划
EXPLAIN ANALYZE SELECT * FROM orders
WHERE user_id = 123 AND status = 'paid';
-- 看到 Seq Scan 就要加索引

⑤ 用法场景与典型例题

例1(后端慢定位)一个列表接口要 3 秒,你怎么找瓶颈?
分层打时间戳,先看哪层最慢。
① 加 timing 中间件,打印 DB 查询时间、外部调用时间、业务时间。
② DB 占了 2.5 秒 → 查 pg_stat_statements 找慢 SQL,看有没有缺索引、N+1。
③ 外部 API 占了 2 秒 → 能不能并行调用?能不能加缓存?
④ 业务逻辑占了 2 秒 → cProfile 跑一下。
答案:分层定位,别凭感觉猜。
例2(缓存一致性)更新数据库后,缓存怎么处理?
先更 DB 再删缓存。
① 读路径:先查缓存,miss 再查 DB,然后回填缓存。
② 写路径:先更新 DB,再删除缓存(不是更新缓存)。
③ 为什么删不更:并发写时更新缓存容易写脏;删了下次读自然拉新的。
答案:先更 DB,再删缓存。
例3(LLM 降本)客户月账单从 $200 涨到 $2000,怎么降?
三板斧齐上。
① 查用量分布:按功能/用户/模型拆,看哪部分涨最多。
② 简单任务换小模型(分类/提取用 gpt-4o-mini)。
③ 精简 Prompt:RAG 只留 top-3,历史对话做摘要。
④ 加结果缓存:FAQ 类命中直接返回。
答案:模型分级 + Prompt 精简 + 结果缓存。

⑥ 高频错误诊断(4 条)

错误 1:凭感觉优化觉得某个地方慢就去改,改完没提升。正确做法是先建基线、Profile 定位,找到那 20% 的瓶颈再动手。
错误 2:缓存穿透/雪崩不管查不存在的 key 每次打 DB、大量 key 同时过期瞬间打垮 DB。要做空值缓存、过期时间加随机。
错误 3:所有任务都用最贵的模型分类、提取这种简单任务也用 GPT-4o,成本翻 15 倍。要按任务难度分级选模型。
错误 4:改完不验证说"应该快了"就上线。必须压测前后对比,用数据说话——p99 降了多少、QPS 涨了多少。

⑦ 考点真题演练(4 题)

考点分布

考法出题形式应对
优化闭环优化步骤排序基线→Profile→改→验证
缓存坑穿透/雪崩/击穿区分各自解法要记清
LLM 降本怎么降成本三板斧
SQL 优化慢查询怎么处理找慢SQL+加索引

真题基础1. 性能优化的正确第一步是?

真题中档2. 大量缓存 key 同时过期,瞬间打垮数据库,这叫什么?

真题中档3. 更新数据库后,缓存应该怎么处理?

真题拔高4. 下列哪个不是 LLM 成本优化的手段?

⑧ 必背知识点卡

优化闭环:基线→Profile→改→验证 别凭感觉
80/20:20%代码导致80%耗时 找瓶颈别平均用力
后端三板斧:SQL优化 + 缓存 + 异步化 消除重复
缓存三坑:穿透(空值缓存)/雪崩(加随机)/击穿(互斥锁) 先删后更
LLM三板斧:选对模型 + 精简Prompt + 结果缓存 省一半
验证:改完压测前后对比 用数据说话

⑨ 应用输出:优化一个慢接口

场景:订单列表接口 p99 要 3 秒,用户投诉慢
① 建基线:当前 p99=3.2s,QPS=50,DB CPU 80%。
② Profile 定位:加中间件打时间戳,发现 DB 查询占 2.8 秒。查 pg_stat_statements,是一个 JOIN 查询没有索引。
③ 优化 1:加复合索引 (user_id, status, created_at),SQL 从 2.8s 降到 0.3s。
④ 优化 2:热点用户的订单列表加 Redis 缓存,过期 60 秒,读请求 70% 命中缓存。
⑤ 验证:压测后 p99=0.5s,DB CPU 降到 30%,成本没涨。
口述优化思路"先量现在多慢,Profile 找到是 DB 慢 SQL,加索引 + 加缓存,改完压测验证 p99 降了多少。"

⑩ 分层练习 15 题(基础 5 + 中档 5 + 拔高 5)

▍基础 5 题

基础1性能优化第一步做什么?
建基线+Profile,先量清楚现在多慢、瓶颈在哪,不要凭感觉改。
基础280/20 法则在优化里什么意思?
20% 的代码导致了 80% 的耗时。优化要找到那 20%,不是平均优化所有代码。
基础3缓存穿透是什么?
查不存在的 key,每次都打到数据库。解法:空值也缓存(短过期),或布隆过滤器。
基础4缓存雪崩是什么?
大量 key 同时过期,瞬间全打到 DB。解法:过期时间加随机偏移,不要一起过期。
基础5更新 DB 后缓存怎么处理?
删除缓存(不是更新缓存)。下次读自然从 DB 拉新的,避免写脏。

▍中档 5 题

中档6慢查询怎么定位?
开慢查询日志,用 pg_stat_statements 找最耗时 SQL,EXPLAIN ANALYZE 看执行计划,看到 Seq Scan 就加索引。
中档7N+1 查询是什么?怎么解?
列表里循环一条条查关联数据。解法:JOIN 一次查出来,或用 IN 批量查。
中档8LLM 成本怎么降?
三板斧:① 简单任务换小模型;② 精简 Prompt 减少 token;③ 结果缓存。批量任务走 Batch API 半价。
中档9什么任务适合用便宜的小模型?
分类、信息提取、格式转换这种简单任务。复杂推理、写代码、RAG 难问题才用大模型。
中档10结果缓存适合什么场景?
高频重复问题(FAQ)、确定性任务。对话类、个性化场景命中率低,意义不大。

▍拔高 5 题

拔高11缓存击穿和雪崩的区别?
击穿=单个热点 key 过期瞬间打 DB;雪崩=大量 key 同时过期。击穿用互斥锁重建,雪崩加随机过期时间。
拔高12为什么优化完必须压测验证?
不然不知道到底快了多少,也不知道有没有改坏。用数据说话:p99 降了多少、QPS 涨了多少、有没有引入新问题。
拔高13RAG 怎么减少输入 token?
top-K 别取太多(3 段够了)、分块别太大、历史对话做摘要、检索结果先去重。
拔高14为什么不建议过度优化?
优化有成本(开发时间、复杂度)。没到瓶颈就优化是浪费。先有量,找到真实瓶颈再动手。
拔高15本地部署大模型怎么提速?
用 vLLM 连续批处理、量化(INT8/INT4)、KV Cache 复用、合理设并发和显存利用率。

⑪ 记忆口诀 + 7 天复习计划

三句口诀 ① 先量后改别瞎猜,Profile 找那 20%。
② 后端三板斧:SQL、缓存、异步化。
③ LLM 三板斧:选模型、减 token、加缓存。
天任务自检
第 1 天读②③,画优化闭环图能说清四步
第 2 天背缓存三坑 + 做基础 1-5基础全对
第 3 天写一个缓存读写代码先删后更
第 4 天做中档 6-10,理解 LLM 降本会算省多少钱
第 5 天做拔高 11-15 + 真题 4 题会定位慢查询
第 6-7 天口述一个慢接口优化方案,默写三板斧不看资料全默对

← 返回 FDE 培养总览