最佳数据库连接池被综合性能、可靠性、稳定性、可伸缩性和易用性等因素所代替。



德鲁伊:druid-1.0.29



数据库mysql.5.6.17



更换目标:取代C3P0和取代它与Druid



更换原因:



1、性能方面的hikaricp >德鲁伊> > > c3p0.the Tomcat JDBC数据库的高性能hikaricp得益于锁竞争的最大障。



2、德鲁伊函数是最全面的、SQL拦截等功能,统计数据更全面,具有良好的可扩展性。



3、综合性能、可扩展性等方面,可以考虑德鲁伊或hikaricp连接池的使用,对JDBC接口的监测和跟踪更方便。



4、可以打开preparestatement缓存,性能将提高约20%。



pscache连接私人,所以没有线程竞争问题,开放pscache没有竞争力的性能损失。



对pscache关键是SQL和目录的准备,和值相当于preparestatement对象。打开缓存主要是降低解析SQL的开销。



5,3P0历史悠久,代码和它的复杂性,不利于维护。有死锁的潜在风险。



6,德鲁伊可以打印SQL,慢速查询日志



德鲁伊的参数



配置参数
默认值
游戏服的价值
参数描述


initialsize
零
四
连接数的初始化


MinIdle
零
四
最小空闲连接数


maxactive
八
八
最大并发数


最大等待时间
1l
六万
最大等待时间为一个连接,一个单位毫秒。配置后的最大等待时间,

默认情况下,启用了公平锁,并发性的效率将下降。

如果有必要,非公平锁可以真正的配置useunfairlock属性使用。




timebetweenevictionrunsmillis
六万
六万
检测到要关闭的空闲连接需要多长时间,单位是毫秒

销毁线程检测连接的间隔时间。


minevictableidletimemillis
一百八十万
一百八十万
配置池中的连接的最小生存时间(以毫秒为单位)


validationQuery
无效的
选择1
SQL用于检测连接是否有效,是一个查询语句。


testOnBorrow
错误的
错误的
检测连接执行的validationQuery有效申请连接,这种结构会降低性能。


testOnReturn
错误的
错误的
的检测是有效的执行validationQuery连接当连接恢复,这个配置会降低性能。


testwhileidle
真的
真的
该建议被配置为真实而不影响性能和确保安全性。

空闲时间大于timebetweenevictionrunsmillis,和执行validationQuery检测连接是否有效。


poolpreparedstatements
错误的
真的
无论是虚假的缓存预处理语句,即pscache。

pscache增加了数据库,支持游标的性能,如Oracle。

有没有pscache MySQL5.5版本以下功能,并建议关闭。

5.5及以上版本pscache,并建议开放。


maxpoolpreparedstatementperconnectionsize
十
一百
使pscache,它必须配置超过0,当大于0,

的poolpreparedstatements自动触发改为真。

一个连接有缓存的声明,这意味着maxopenpreparedstatements是一个单一的连接




工作原理:



数据库连接池创建initialsize连接初始化时,当有一个数据库的操作,连接是从池。如果池使用的连接数等于maxactive,它会等待一段时间,等待释放的连接操作,如果等待的时间更超过最大等待时间,是错误的;如果当前数是用来连接不maxactive,判断当前空闲的连接,如果有一个直接的空闲连接使用,如果没有一个新的连接建立。连接后完成的,而不是物理连接被关闭,但很投入池等其他操作可以重复使用。同时,有一个机制在连接池中。如果连接总数小于miniidle,一种新的空闲连接将被建立以确保连接数miniidle。如果闲置timebetweenevictionrunsmillis时间后在当前连接池的连接仍然是未使用的,它是身体关闭。当一些数据库连接超时限制(MySQL的连接断开8小时),或由于网络中断,连接池的连接可能是无效的,然后设置一个testwhileidle参数是正确的,可以保证连接可用库内部定时检测连接不可用,连接将被遗弃的最大值或重建,从连接池中的连接对象的保证是有效的。当然,为了恩当然绝对可用,你也可以使用testOnBorrow为真,即检测可用时获取连接对象,但这会影响性能。



如果要进行SQL监视,可以添加以下代码:




log4j2filter log4j2 =新log4j2filter();
log4j2.setresultsetlogenabled(假);
log4j2.setstatementsqlprettyformat(假);
log4j2.setstatementexecutablesqllogenable(真的);

log4j2.setdatasourcelogenabled(假);
log4j2.setconnectionlogenabled(假);
log4j2.setstatementlogenabled(假);
log4j2.setresultsetlogenabled(假);
ret.setproxyfilters(Arrays.asList(log4j2));




空闲检测,创建连接,通过这三个线程清除连接清理




守护线程{放弃连接清除线程}
守护线程druid-connectionpool-create-1184124073 } {
守护线程druid-connectionpool-destroy-1184124073 } {




总结

这是本文的全部内容,关于数据库连接池的使用说明,希望对大家有所帮助。感兴趣的朋友可以参考:mysql编写原理等相关题目。如果你有任何问题,你可以随时离开的消息,Xiaobi将及时回复你。