1. 常用数据库连接池比较
- 性能方面 hikariCP>druid>tomcat-jdbc>dbcp>c3p0 . hikariCP的高性能得益于最大限度的避免锁竞争.
hikariCP, druid, tomcat-jdbc 性能差距不大 - druid功能最为全面, sql拦截等功能, 统计数据较为全面, 具有良好的扩展性.
- 综合性能, 扩展性等方面, 可考虑使用druid或者hikariCP连接池.
- 可开启prepareStatement缓存, 对性能会有大概20%的提升.
- psCache是connection私有的, 所以不存在线程竞争的问题, 开启pscache不会存在竞争的性能损耗.
- psCache的key为prepare执行的sql和catalog等, value对应的为prepareStatement对象. 开启缓存主要是减少了解析sql的开销.
| 功能 | dbcp | druid | c3p0 | tomcat-jdbc | HikariCP |
|---|---|---|---|---|---|
| 是否支持PSCache | 是 | 是 | 是 | 否 | 否 |
| 监控 | jmx | jmx/log/http | jmx,log | jmx | jmx |
| 扩展性 | 弱 | 好 | 弱 | 弱 | 弱 |
| sql拦截及解析 | 无 | 支持 | 无 | 无 | 无 |
| 代码 | 简单 | 中等 | 复杂 | 简单 | 简单 |
| 更新时间 | 2015.8.6 | 2015.10.10 | 2015.12.09 | 2015.12.3 | |
| 特点 | 依赖于common-pool | 阿里开源, 功能全面 | 历史久远, 代码逻辑复杂, 且不易维护 | 优化力度大, 功能简单, 起源于boneCP | |
| 连接池管理 | LinkedBlockingDeque | 数组 | FairBlockingQueue | threadlocal+CopyOnWriteArrayList |