首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C3P0属性上设置了多少个连接

在C3P0属性上设置了多少个连接
EN

Stack Overflow用户
提问于 2018-09-14 07:31:31
回答 1查看 218关注 0票数 0

我试图使用C3P0库来处理连接池。这些是我的C3P0设置:

代码语言:javascript
复制
minPoolSize=3
maxPoolSize=20
acquireIncrement=1
maxIdleTime=240
maxStatements=20

在日志中,我可以看到C3P0似乎通过读取

代码语言:javascript
复制
INFO com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource - Initializing c3p0 pool...

但是,当我尝试--看看我的MySQL db上有多少个连接

代码语言:javascript
复制
SHOW STATUS WHERE `variable_name` = 'Threads_connected'

我可以看到结果是48,46,49 ecc。

我无法理解是否不正确,我试图查看数据库上有多少连接,或者我不了解C3P0的工作方式

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-25 05:53:51

在线程和连接的MySQL中,我也遇到了这样的困惑。在学习过程中,我会解释我所学到和掌握的东西,如果有什么我误解了,或者还在困惑中,请让我改正。

MySQL的一些基础知识:

代码语言:javascript
复制
- 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的映射.在销毁线程后,它可能会进入线程池。因此,线程数大于或等于连接数。

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

代码语言:javascript
复制
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是否与DB服务器连接。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52327011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档