code-adjust-record-2025-08-04-database-connection-optimization.md 4.0 KB

数据库连接池优化变更记录

变更日期: 2025-08-04 18:30:00
变更人员: Cursor AI
变更类型: 性能优化
影响范围: 后端服务启动日志

🔍 问题描述

启动日志中持续打印 SELECT 1 查询,每10秒左右出现一次,消耗时间约19-22ms,影响日志可读性和系统性能。

📊 问题分析

根本原因

  1. HikariCP连接池心跳检测: SELECT 1 是数据库连接池的心跳检测查询
  2. 配置过于频繁: keepaliveTime: 30000 (30秒) 检测间隔过短
  3. 空闲连接过多: minIdle: 15 保持15个空闲连接
  4. 日志级别过细: SQL日志级别设置为DEBUG,记录所有查询详情

影响分析

  • 日志文件快速增长
  • 控制台输出混乱
  • 系统资源浪费
  • 影响开发调试体验

🛠️ 解决方案

1. 优化连接池配置

文件: backend/ruoyi-admin/src/main/resources/application-dev.yml

hikari:
  # 最大连接池数量(从30减少到20)
  maxPoolSize: 20
  # 最小空闲线程数量(从15减少到5)
  minIdle: 5
  # 空闲连接存活最大时间(从3分钟增加到5分钟)
  idleTimeout: 300000
  # 连接最长生命周期(从10分钟增加到15分钟)
  maxLifetime: 900000
  # 心跳检测间隔(从30秒增加到60秒)
  keepaliveTime: 60000
  # 连接测试查询(保持不变)
  connectionTestQuery: SELECT 1

2. 调整日志级别

文件: backend/ruoyi-admin/src/main/resources/application.yml

logging:
  level:
    # 关闭SQL日志调试,减少SELECT 1心跳检测日志
    org.dromara.cw.mapper.CwApprovalRecordMapper: info
    org.dromara.cw.service.impl.CwApprovalRecordServiceImpl: info
    org.dromara.cw.listener.ApprovalProcessEventListener: info

文件: backend/ruoyi-admin/src/main/resources/logback-plus.xml

<!-- 设置MyBatis的日志级别为INFO,减少SELECT 1心跳检测日志 -->
<logger name="org.dromara.xg.mapper" level="INFO">
<logger name="org.dromara.xg.mapper.XgSysUserMapper" level="INFO">
<logger name="org.apache.ibatis" level="INFO">
<logger name="java.sql" level="INFO">
<logger name="java.sql.Connection" level="INFO">
<logger name="java.sql.Statement" level="INFO">
<logger name="java.sql.PreparedStatement" level="INFO">

📈 优化效果

预期改善

  1. 日志输出减少: 心跳检测日志频率降低50%
  2. 资源消耗降低: 空闲连接数减少67%
  3. 性能提升: 连接池管理开销减少
  4. 日志清晰: 减少无关的心跳检测日志干扰

配置对比

配置项 优化前 优化后 改善效果
maxPoolSize 30 20 减少33%连接数
minIdle 15 5 减少67%空闲连接
keepaliveTime 30秒 60秒 减少50%检测频率
idleTimeout 3分钟 5分钟 延长连接生命周期
maxLifetime 10分钟 15分钟 延长连接生命周期
SQL日志级别 DEBUG INFO 减少详细日志输出

🔄 重启要求

需要重启服务: ✅ 是
重启命令:

# 停止当前服务
# 重新启动后端服务
cd backend
./start-all.sh

📋 验证方法

  1. 日志检查: 重启后观察控制台日志,SELECT 1 出现频率应明显降低
  2. 性能监控: 检查数据库连接数和系统资源使用情况
  3. 功能测试: 确保所有业务功能正常运行

⚠️ 注意事项

  1. 监控连接池: 如果出现连接不足,可以适当增加 maxPoolSize
  2. 日志调试: 如需调试SQL,可临时将日志级别改回DEBUG
  3. 生产环境: 生产环境建议进一步优化连接池配置

📚 相关文档


变更状态: ✅ 已完成
测试状态: ⏳ 待验证
文档状态: ✅ 已更新