Mysql 在C3P0.properties上设置了多少个连接

Mysql 在C3P0.properties上设置了多少个连接,mysql,spring,c3p0,Mysql,Spring,C3p0,我正在尝试使用C3P0库来处理连接池。 以下是我的C3P0设置: minPoolSize=3 maxPoolSize=20 acquireIncrement=1 maxIdleTime=240 maxStatements=20 在日志中,我可以看到C3P0似乎已通过读取正确初始化 INFO com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource - Initializing c3p0 pool... 但是当我试着这么做时,看看我的MySQL

我正在尝试使用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的工作方式

我在MySQL中也遇到了线程和连接方面的这种混乱。我将解释我在学习过程中所学到的知识和掌握的内容,如果当时我有任何误解或仍然困惑,请纠正我的错误

MySQL中的一些基础知识:

- MySQL server is a single process application.
- It is multithreaded.
- It accepts connections like TCP/IP server.
- Each connection gets a thread.
- These threads are sometimes named processes, and sometimes they're referred to as connections.
最后一点和第二点让人很困惑,我们认为连接和活动线程之间存在1-1映射。这也是正确的,但是,有一个线程池,这意味着可以存在与任何连接都不关联的线程

每个新连接都有自己的线程。每一个新的连接都会产生新的线程,而断开连接则会导致线程的破坏。因此,连接和活动线程之间存在1-1映射。销毁线程后,它可能会进入线程池。因此,线程数大于或等于连接数

同样,如果您运行下面的查询

SELECT t.PROCESSLIST_ID,IF (NAME = 'thread/sql/event_scheduler','event_scheduler',t.PROCESSLIST_USER) PROCESSLIST_USER,t.PROCESSLIST_HOST,t.PROCESSLIST_DB,t.PROCESSLIST_COMMAND,t.PROCESSLIST_TIME,t.PROCESSLIST_STATE,t.THREAD_ID,t.TYPE,t.NAME,t.PARENT_THREAD_ID,t.INSTRUMENTED,t.PROCESSLIST_INFO,a.ATTR_VALUE FROM performance_schema.threads t  LEFT OUTER JOIN performance_schema.session_connect_attrs a ON t.processlist_id = a.processlist_id AND (a.attr_name IS NULL OR a.attr_name = 'program_name') WHERE 1=1
然后您将看到列
TYPE
,其中的值要么是
前台
要么是
后台
,这说明可以有一些线程与DB连接以执行一些(后台)工作(例如事件线程、监视线程等)

通常,c3p0关注的是连接,而不是线程,因此您应该检查与DB server的连接是否有
SHOW FULL PROCESSLIST

我希望我已经澄清了您对MySQL线程和连接的困惑