# 11.7 性能调优 :::tip 概述 调优顺序:**先观测、再定位、后调参**。可观测面有三层:Prometheus 指标(宏观)、服务监控页(主机)、SQL debug 日志(微观)。本页给出常见瓶颈与对应手段。 ::: ## 调优顺序 ```text ① /metrics 看哪类路由耗时高、错误率高 ② 服务监控页看主机资源(CPU/内存/goroutine) ③ SQL debug 定位慢查询 ④ 按瓶颈类型施加对应手段 ⑤ 复测指标 ``` ## 数据库层 | 症状 | 手段 | |---|---| | 慢查询 | 高频列补索引(idx_{表}_{列});核对是否 LIKE 前置通配 | | 连接耗尽 | 调 database 连接池(maxOpenConns/maxIdleConns/connMaxLifetime),核对应用与 MySQL 两侧 | | 大分页深翻 | 避免大 offset;业务上限 pageSize 500 已兜底 | | 频繁字典查询 | 字典缓存已内置;确认未被频繁 Refresh 打穿 | ## 应用层 | 症状 | 手段 | |---|---| | goroutine 突增 | 监控页观察趋势;排查泄漏(未收尾的 goroutine、阻塞 channel) | | 内存增长 | 大查询/导出是否一次载入过大结果集(导出走流式/分批) | | 接口整体变慢 | 看限流是否误伤、日志是否过度(logQuery 巨量) | | 日志盘涨 | 校准 job.logRetentionDays;zap 轮转配置 | ## 缓存层 - Redis 命中率低 → 检查键 TTL 与失效策略 - 降级内存模式 → 修复 Redis(多实例下内存模式语义退化) - 大 key 排查 → Info memory 分区 + 键空间抽样 ## 限流与入口 - 公网收敛 rateLimit.limit(默认 120/min/IP 已可用) - Nginx 层配连接/速率限制作为第一道闸 - 上传大小 maxSize 与 client_max_body_size 对齐,防大文件打内存 ## 容量规划参考 - 无状态应用可横向扩(多实例共享 Redis/MySQL;限流计数 Redis 共享) - 读压力大优先加只读库/缓存,而非盲目加应用实例 - 监控告警:按 route 维度配 P95 耗时与错误率阈值 ## 相关 - [5.17 链路追踪与指标](/zh/core/trace-metrics.html) - [11.10 故障排查手册](/zh/deploy/troubleshooting.html)