切换dbcp为druid
特别简单,只需要改一下实现类就可以了。
性能
1.3 关于性能特性
对于连接池来说,连接池本身的性能消耗在整个调用链路中通常占比不大,连接池的性能关键点是,连接是否LRU的方式重用,是否支持PSCache(PreparedStatementCache)才是性能的关键点。
算法:最近最少使用的连接对象,先从连接池删除。
监控
1.活跃数量
2.sql执行耗时等情况
影响性能吗?不影响。
3.2 监控不影响性能
Druid增加StatFilter之后,能采集大量统计信息,同时对性能基本没有影响。StatFilter对CPU和内存的消耗都极小,对系统的影响可以忽略不计。监控不影响性能是Druid连接池的重要特性。
慢查询sql
3.5 慢查监控
缺省执行耗时超过3秒的被认为是慢查,统计项中有包括每个SQL的最后发生的慢查的耗时和发生时的参数。
3.1 监控信息采集的StatFilter
Druid连接池的监控信息主要是通过StatFilter 采集的,采集的信息非常全面,包括SQL执行、并发、慢查、执行时间区间分布等。具体配置可以看这个 github.com/alibaba/dru…
监控里有正常的sql执行情况,如果有慢sql,也有慢sql的执行情况。
自带监控系统
3.8 内置监控DEMO
这里是一个内置监控的演示用的部署 http://120.26.192.168/druid/sql.html
全链路监控
- 诊断支持 Druid连接池内置了LogFilter,将Connection/Statement/ResultSet相关操作的日志输出,可以用于诊断系统问题,也可以用于Hack一个不熟悉的系统。
LogFilter可以输出连接申请/释放,事务提交回滚,Statement的Create/Prepare/Execute/Close,ResultSet的Open/Next/Close,通过LogFilter可以详细诊断一个系统的Jdbc行为。
LogFilter有Log4j、Log4j2、Slf4j、CommsLog等实现,具体配置看这里 github.com/alibaba/dru…
有事务提交方面的监控。
保活
有以下几种方法可以保活,校验连接是否有效,如果失效,就从连接池删除:
1.每次申请连接,都校验连接是否有效,影响性能,一般关闭。
2.申请连接的时候,空闲时间超过1m,才校验连接是否有效。
3.专门的校验线程,主动校验空闲连接是否有效
空闲连接的空闲时间超过5m;
定时(5m)跑一次;
每次默认取几个空闲连接?dbcp默认取3个空闲连接,druid默认校验所有空闲连接。
4.保活 //dbcp,没有保活,其他都一样
只要空闲连接空闲时间超过5m,就会校验,如果失效就删除。
测试代码
分库分表
生产环境使用分库分表,建议使用淘宝的tddl或者cobar。