Есть много соединений, которые сколько установлены на C3P0.properties - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь использовать библиотеку 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 и т. Д.

Я не могу понять, если это не правильно, как я пытаюсь увидеть, сколько соединений есть на БД, или я не понял, как работает C3P0

1 Ответ

0 голосов
/ 25 сентября 2018

Я также столкнулся с такой путаницей в 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, в котором значениялибо FOREGROUND, либо BACKGROUND, так что это говорит о том, что могут быть некоторые потоки, связанные с БД, для выполнения некоторой (фоновой) работы (например, потока событий, потока монитора и т. д.).

в целом, касается c3p0о соединении, а не о потоках, так что вы должны проверить SHOW FULL PROCESSLIST для соединений с сервером БД.

Я надеюсь, что я устранил путаницу, которую вы испытываете с потоками и соединениями MySQL.

...