--- title: MySQL 数据库连接池配置 keywords: [MySQL, HikariCP, 连接池, 数据库, 性能优化] summary: MySQL 连接池的配置参数、性能调优和故障排查指南 category: infrastructure --- # MySQL 数据库连接池配置 ## HikariCP 配置 ### 基础配置 ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/superbiz_agent?useSSL=false&serverTimezone=Asia/Shanghai username: root password: password driver-class-name: com.mysql.cj.jdbc.Driver hikari: maximum-pool-size: 10 minimum-idle: 5 connection-timeout: 30000 idle-timeout: 600000 max-lifetime: 1800000 ``` ## 关键参数说明 ### maximum-pool-size - **默认值**:10 - **建议值**:根据并发量调整 - **公式**:connections = ((core_count * 2) + effective_spindle_count) - **注意**:不是越大越好,过大会增加数据库负担 ### connection-timeout - **默认值**:30000ms (30秒) - **说明**:等待连接的最大时间 - **建议**:根据业务超时要求调整 ### idle-timeout - **默认值**:600000ms (10分钟) - **说明**:连接空闲多久后被释放 - **建议**:小于 MySQL wait_timeout ## 常见问题 ### 连接泄漏 **症状**: - 应用无法获取数据库连接 - 日志显示 "Connection is not available" **排查**: ```java // 检查是否有未关闭的连接 try (Connection conn = dataSource.getConnection()) { // 使用连接 } // 自动关闭 ``` **解决**: - 使用 try-with-resources - 检查事务是否正常提交/回滚 ### wait_timeout 超时 **症状**:MySQL 错误 "The last packet successfully received from the server was X milliseconds ago" **排查**: ```sql SHOW VARIABLES LIKE 'wait_timeout'; ``` **解决**: ```yaml hikari: max-lifetime: 1800000 # 小于 MySQL wait_timeout ``` ## 性能监控 ### HikariCP 指标 ```java HikariPoolMXBean poolMXBean = hikariDataSource.getHikariPoolMXBean(); int active = poolMXBean.getActiveConnections(); int idle = poolMXBean.getIdleConnections(); int total = poolMXBean.getTotalConnections(); ``` ### 慢查询监控 ```sql -- 开启慢查询日志 SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 2; -- 查看慢查询 SELECT * FROM mysql.slow_log ORDER BY start_time DESC LIMIT 10; ```