Skip to content

11.7 性能调优 ​

概述

性能调优按层次展开:数据库(连接池/索引/大表)、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 多限流阈值偏低或前端轮询过频

小蚂蚁云团队 · 提供技术支持