Как считать открытые соединения БД? - PullRequest
14 голосов
/ 06 ноября 2008

Я разрабатываю веб-приложение с использованием сервлета Java для доступа к базе данных Mysql. Как узнать количество подключений к моей БД, которая в данный момент открыта?

Редактировать:

Я попробовал «показать список процессов», он показал мне: 2695159, но это не правильно, я просто занимаюсь разработкой этого нового проекта, я единственный пользователь, у которого не может быть столько запущенных процессов, что я хочу, так это количество пользователей, обращающихся к БД моего проекта , не количество всех пользователей БД, а только тех, кто вошел в мою базу данных, которая имеет только одну таблицу.

Ответы [ 8 ]

15 голосов
/ 29 сентября 2011

В зависимости от вашей версии MySQL, вы можете выполнить выбор на

SELECT COUNT(*) FROM information_schema.PROCESSLIST;

и вы можете сделать where между пользователем, базой данных и хостом IP.

Например:

USE information_schema;
SELECT COUNT(*) FROM PROCESSLIST WHERE db ="mycase" AND HOST LIKE "192.168.11.174%"
9 голосов
/ 06 ноября 2008

Вы можете использовать команду MySQL show processlist для получения количества соединений.

Однако это также покажет вам любые подключения, сделанные с тем же идентификатором пользователя к базе данных, которые могут не приходить из вашего сервлета.

В целом, я бы посоветовал вам лучше использовать объект Connection Pool (см. http://java -source.net / open-source / connection-pool ) для управления вашими подключениями к MySQL сервер. Это может повысить производительность за счет сохранения постоянных соединений с БД, поэтому не всегда возникают накладные расходы на новое соединение с БД при каждой загрузке страницы.

Если вашему сервлету нужно знать количество соединений, тогда ваш пул соединений должен иметь метод, который сообщает вам, сколько соединений активно в данный момент.

3 голосов
/ 07 августа 2012

Запустите следующий запрос, он перечисляет имя хоста и нет. соединений с каждого хоста:

ВЫБРАТЬ хост, количество (хост) ОТ информационного_схемы.processlist GROUP BY хост;

3 голосов
/ 06 ноября 2008

показывать статус как 'Threads_connected' или же показать глобальный статус, например «Threads_connected»

Не уверен насчет разницы между этими двумя в пользовательском контексте, и вы все равно можете страдать от проблемы, что вы увидите все соединения, а не только соединения из вашего приложения.

вы даже можете проверить Threads_running, чтобы видеть только запущенные потоки (например, не спящие).

2 голосов
/ 23 июля 2012

Вы можете выбрать из Information_Schema.Processlist только те данные, которые принадлежат вам. Это означает, что вы можете использовать его ТОЛЬКО для мониторинга, если вы вошли в систему как пользователь root, в противном случае вы увидите соединения, исходящие от вашего пользователя, с которым вы вошли в систему.

Если вам нужен правильный мониторинг SQL, это будет:

SELECT variable_value
FROM INFORMATION_SCHEMA.GLOBAL_STATUS
WHERE variable_name='threads_connected'
2 голосов
/ 06 ноября 2008

Показать список процессов

0 голосов
/ 23 сентября 2017

Вы также можете сосчитать открытое соединение, показав статус из Threads_connected имени переменной, например:

SHOW STATUS WHERE variable_name = 'Threads_connected';

Или вы можете также посчитать список процессов непосредственно с information_schema.PROCESSLIST, как показано ниже:

SELECT COUNT(*) FROM information_schema.PROCESSLIST;
0 голосов
/ 05 сентября 2013

Вы можете использовать это

ПОКАЗАТЬ ГЛОБАЛЬНЫЙ СТАТУС; или же показывать глобальный статус как "Threads_connected";

из статуса подключений вы можете узнать общее количество подключений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...