绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
注意:两个会导致druid性能下降10倍的参数
2019-12-06 11:17:31

来源于公众号阿飞的博客 ,

作者阿飞的博客

druid:阿里巴巴开源的为监控而生的数据库连接池。你看,官方都没有说是高性能数据库连接池,因为,在性能方面,HikariCP会说:我不是针对谁,论性能,在坐的各个数据库连接池都是渣渣。Github HikariCP的介绍:A solid, high-performance, JDBC connection pool at last。而且HikariCP还是springboot2.x以后默认的数据库连接池。

HikariCP性能参考--图片来自于HikariCP Github主页:

HikariCP benchmark

ConnectionCycle就是指DataSource.getConnection()、Connection.close()。而StatementCycle就是指Connection.prepareStatement()、Statement.execute()、Statement.close()。需要说明的是HikariCP Github没有给出和druid的对比,不过,也有网友对这两个中间件进行了压测比较,只对比性能的前提下,HikariCP还是要好不少的。

不过,即使druid的性能不是好的,还是有很多项目组或者公司选择druid。因为,它的监控非常非常完善。我们项目组也不例外,用的是druid。

可能很多项目的很多中间件的配置,都不是非常合理,没有经过充分的压测。比如Redis相关,数据库相关,MQ相关等。笔者的这个使用druid的项目也不例外,笔者今天介绍4个你可能不怎么关注的参数:

validationQuery

用来检测连接是否有效的sql,如果validationQuery为空,那么testOnBorrow、testOnReturn、testWhileIdle这三个参数都不会起作用,因为这三个参数都是通过执行参数validationQuery指定的SQL来验证数据库连接的有效性,配置参考:validationQuery=SELECT 1

testWhileIdle

建议配置为true。对性能影响很小,因为是定期检查。如果连接空闲时间大于timeBetweenEvictionRunsMillis指定的毫秒,就会执行参数validationQuery指定的SQL来检测连接是否有效。

testOnBorrow

建议配置为false。获取连接时执行validationQuery检测连接是否有效,这个配置会降低性能。

testOnReturn

建议配置为false。归还连接时执行validationQuery检测连接是否有效,这个配置会降低性能。

如果这4个参数都是按照笔者建议进行配置,那么就不会有什么性能问题,但是。请看下面这张压测表格--testOnReturn和testOnBorrow不同值组合的情况下,5000次主键查询的耗时比较:

惊不惊喜,意不意外???

由这张压测结果表,我们可以得出如下结论:

testOnReturn和testOnBorrow都为false时性能好。

如果任意一个参数为true(另一个为false),会导致性能下降5倍多。

testOnReturn和testOnBorrow对性能的影响几乎一样(因为它们都会通过执行参数validationQuery指定的SQL来校验连接的有效性)。

事实上,这两个参数在druid中默认值就是false。所以,赶紧去检查你们的配置,是不是和笔者一样,多此一举的将它们配置为true。

分享好友

分享这个小栈给你的朋友们,一起进步吧。

未知元素
创建时间:2019-11-10 22:02:06
未知元素
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • xiechundi
    栈主

小栈成员

查看更多
  • 渔人
  • abc
  • zyl
  • ?
戳我,来吐槽~