Есть много соединений, которые сколько установлены на C3P0.properties

0

Я пытаюсь использовать библиотеку C3P0 для обработки пула соединений. Это мои настройки C3P0:

minPoolSize=3
maxPoolSize=20
acquireIncrement=1
maxIdleTime=240
maxStatements=20

В журнале я вижу, что C3P0, кажется, правильно инициализирован чтением

INFO com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource - Initializing c3p0 pool...

Но когда я пытаюсь это посмотреть, сколько соединений есть на моем MySQL db с

SHOW STATUS WHERE 'variable_name' = 'Threads_connected'

Я вижу, что результат 48, 46, 49 ecc.

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

Теги:
spring
c3p0

1 ответ

1
Лучший ответ

Я также столкнулся с такой путаницей в 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.

  • 0
    Спасибо, мужик. Теперь понятно!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню