数据库连接池设置多大才合适?
阅读本文大概需要 4 分钟。
来自:www.jianshu.com/p/a8f653fc0c54
https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
接下来是正文
1万并发用户访问
“这个网站的数据库连接池应该设置成多小呢?”
http://www.dailymotion.com/video/x2s8uec
视频中对Oracle数据库进行压力测试,9600并发线程进行数据库操作,每两次访问数据库的操作之间sleep 550ms,一开始设置的中间件线程池大小为2048:
But why?
有限的资源
计算公式
核心数不应包含超线程(hyper thread),即使打开了hyperthreading也是。如果活跃数据全部被缓存了,那么有效磁盘数是0,随着缓存命中率的下降,有效磁盘数逐渐趋近于实际的磁盘数。这一公式作用于SSD时的效果如何尚未有分析。
((4 * 2) + 1) = 9
。取个整就算是是10吧。是不是觉得太小了?跑个性能测试试一下,我们保证它能轻松搞定3000用户以6000TPS的速率并发执行简单查询的场景。如果连接池大小超过10,你会看到响应时长开始增加,TPS开始下降。笔者注:
这一公式其实不仅适用于数据库连接池的计算,大部分涉及计算和I/O的程序,线程数的设置都可以参考这一公式。我之前在对一个使用Netty编写的消息收发服务进行压力测试时,最终测出的最佳线程数就刚好是CPU核心数的一倍。
公理:你需要一个小连接池,和一个充满了等待连接的线程的队列
2*CPU核心数
)。请注意
推荐阅读:
一款 IDEA 插件帮你优雅转化 DTO、VO、BO、PO、DO
内容包含Java基础、JavaWeb、MySQL性能优化、JVM、锁、百万并发、消息队列、高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper......等技术栈!
⬇戳阅读原文领取! 朕已阅
评论