签入版本
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
# 11.7 性能调优
|
||||
|
||||
:::tip 概述
|
||||
性能调优按层次展开:数据库(连接池/索引/大表)、Redis(连接池/内存)、应用(缓存策略/日志异步)、前端(构建/缓存)。本节给出调优点与观测方法。
|
||||
:::
|
||||
|
||||
## 数据库层
|
||||
|
||||
```text
|
||||
连接池(config.yaml database.default):
|
||||
maxIdle/maxActive/寿命等 gdb 池参数按并发核算
|
||||
多实例部署:实例数 × 池上限 ≤ 数据库 max_connections
|
||||
|
||||
索引:
|
||||
筛选列(LikeFields/EqFields 命中列)建 idx_
|
||||
唯一列 uk_*(同时是并发唯一性保证)
|
||||
city 大表:查询必须走 parent_code/pid/area_code 索引路径
|
||||
|
||||
大表:
|
||||
city(78万+):禁全表 List;级联懒加载
|
||||
日志三表:LogClean 按 job.logRetentionDays(默认90天)分批清理
|
||||
长表分页深翻页:管理后台低频可接受;高频报表走导出/离线
|
||||
|
||||
debug 开关:database.default.debug 生产必须 false(SQL 日志开销大)
|
||||
```
|
||||
|
||||
## Redis 层
|
||||
|
||||
```text
|
||||
连接池:redis.default idle/maxActive 按并发调
|
||||
内存:maxmemory + 淘汰策略(evictedKeys 持续增长 = 容量不足)
|
||||
观测:GET /api/cache/info(usedMemory/hitRate/connectedClients/fragRatio)
|
||||
|
||||
缓存命中率治理(hitRate 偏低时):
|
||||
对照 4.8 TTL 设计原则检查各键 TTL
|
||||
字典类可适当加长(有 RefreshCache 兜底)
|
||||
状态判定类宁短勿长
|
||||
```
|
||||
|
||||
## 应用层
|
||||
|
||||
```text
|
||||
异步化(已内置):
|
||||
操作日志异步批量落库(通道2048+worker,不阻塞业务)
|
||||
定时任务 is_sync=0 异步执行
|
||||
|
||||
缓存(内置三层):
|
||||
进程内(dictTextCache/反射计划)→ Redis(身份/租户/字典/黑名单)→ DB
|
||||
新增缓存遵循 TTL 原则(4.8)
|
||||
|
||||
分批(内置):
|
||||
导出 ChunkQuery 500/页防 OOM
|
||||
LogClean 单批 5000 行、单表单次 20 万行上限
|
||||
|
||||
限流:rateLimit 按压测调参(防误伤;authLimit 不建议调大)
|
||||
|
||||
panic 兜底 + errorStack=false(生产减少堆栈序列化开销)
|
||||
```
|
||||
|
||||
## 前端层
|
||||
|
||||
```text
|
||||
构建:
|
||||
Vite 代码分割(路由级懒加载——动态路由天然按页面拆分)
|
||||
gzip/brotli(Nginx gzip on + 静态预压缩可选)
|
||||
assets 长缓存(带 content hash)
|
||||
|
||||
运行:
|
||||
列表虚拟滚动(超大列表场景,Element Plus virtualized)
|
||||
图片懒加载/压缩(上传侧控制尺寸)
|
||||
keep-alive 控制缓存页面数量(内存 vs 体验平衡)
|
||||
```
|
||||
|
||||
## 压测与观测
|
||||
|
||||
```text
|
||||
压测前准备:
|
||||
临时调大 rateLimit.limit 或按压测 IP 绕过(防误判 429)
|
||||
app.errorMsg=false(减少错误序列化差异)
|
||||
独立压测环境(勿压生产)
|
||||
|
||||
观测指标:
|
||||
后端:/api/server/info(goroutines/内存/gc)
|
||||
DB:慢查询日志(开启 query_time 阈值)
|
||||
Redis:hitRate/connectedClients/evictedKeys
|
||||
系统:CPU/内存/磁盘 IO/网络
|
||||
```
|
||||
|
||||
## 常见瓶颈定位
|
||||
|
||||
| 症状 | 方向 |
|
||||
|------|------|
|
||||
| 接口慢且稳定慢 | 索引缺失/慢查询(开 debug 看 SQL);N+1 查询 |
|
||||
| 越用越慢 | 内存泄漏(goroutines/heapObjects 增长);连接泄漏 |
|
||||
| 并发上不去 | 数据库连接池打满;Redis 单点 |
|
||||
| 偶发卡顿 | GC(调内存);磁盘 IO(日志/上传) |
|
||||
| 大列表超时 | city 类大表全量查询;改级联/分页 |
|
||||
| 峰值 429 多 | 限流阈值偏低或前端轮询过频 |
|
||||
Reference in New Issue
Block a user