我正在尝试使用c3p0库来处理连接池。以下是我的c3p0设置:
minPoolSize=3
maxPoolSize=20
acquireIncrement=1
maxIdleTime=240
maxStatements=20
在日志中,我可以看到c3p0似乎通过读取
INFO com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource - Initializing c3p0 pool...
但是当我试着这么做的时候,看看我的mysql数据库上有多少连接
SHOW STATUS WHERE `variable_name` = 'Threads_connected'
我可以看到结果是48,46,49 ecc。
我不明白,如果是不正确的方式,我试图看看有多少连接上的数据库或我不明白的方式c3p0的工作
1条答案
按热度按时间7gs2gvoe1#
在mysql的线程和连接方面,我也遇到了这样的困惑。我会解释我在学习的过程中所学到的和掌握的东西,如果我当时误解了什么或者仍然困惑,请纠正我。
mysql的一些基础知识:
最后一点和最后一点让人非常困惑,在我们看来,连接和活动线程之间存在1-1Map。这也是真的,但是有一个线程池,这意味着可以有线程不与任何连接相关联。
每个新连接都有自己的线程。每一个新的连接都会产生新的线程,而断开连接则会导致线程的破坏。因此,连接和活动线程之间存在1-1Map。销毁线程后,它可能会进入线程池。因此,线程数大于或等于连接数。
如果你在下面运行查询
然后您将看到列
TYPE
在这种情况下FOREGROUND
或者BACKGROUND
因此,这说明可以有一些线程与db连接来执行一些(后台)工作(例如事件线程、监视线程等)。一般来说,c3p0关注的是连接,而不是线程,因此应该检查
SHOW FULL PROCESSLIST
与数据库服务器的连接。我希望我已经澄清了你对mysql线程和连接的困惑。