有很多连接,在c3p0.properties上设置了多少个

66bbxpm5  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(425)

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

7gs2gvoe

7gs2gvoe1#

在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-1Map。这也是真的,但是有一个线程池,这意味着可以有线程不与任何连接相关联。
每个新连接都有自己的线程。每一个新的连接都会产生新的线程,而断开连接则会导致线程的破坏。因此,连接和活动线程之间存在1-1Map。销毁线程后,它可能会进入线程池。因此,线程数大于或等于连接数。
如果你在下面运行查询

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 在这种情况下 FOREGROUND 或者 BACKGROUND 因此,这说明可以有一些线程与db连接来执行一些(后台)工作(例如事件线程、监视线程等)。
一般来说,c3p0关注的是连接,而不是线程,因此应该检查 SHOW FULL PROCESSLIST 与数据库服务器的连接。
我希望我已经澄清了你对mysql线程和连接的困惑。

相关问题