Как подсчитать открытые соединения db?
Я разрабатываю веб-приложение с использованием сервлета Java для доступа к Mysql db, как я могу получить количество подключений к моей базе данных, которая в настоящее время открыта?
Изменить:
Я попробовал "show processlist", это показало мне: 2695159, но это не так, я просто разрабатываю этот новый проект, я единственный пользователь, не мог запустить столько процессов, что хочу количество пользователей, получающих доступ к моей проектной БД, а не к числу всех пользователей db, а только к тем, которые вошли в мою базу данных, которая имеет только одну таблицу.
Ответы
Ответ 1
В зависимости от вашей версии 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%"
Ответ 2
Вы можете использовать команду MySQL show processlist
для получения количества подключений.
Однако это также покажет вам любые подключения, сделанные с тем же идентификатором пользователя, к базе данных, которые могут не поступать из вашего сервлета.
В общем, я бы предположил, что вам, вероятно, лучше использовать объект Connection Pool (см. http://java-source.net/open-source/connection-pools) для управления вашими подключениями к сервер MySQL. Это может повысить производительность, заставив подключения DB постоянно, поэтому у вас не всегда есть накладные расходы на новое подключение к DB для каждой загрузки страницы.
Если ваш сервлет должен знать количество подключений, то ваш пул соединений должен прийти с помощью метода, который сообщает вам, сколько соединений в настоящее время активно.
Ответ 3
показать статус как "Threads_connected"
или
показать глобальный статус, например "Threads_connected"
Не уверен в различии между этими двумя в пользовательском контексте, и вы все равно можете столкнуться с проблемой, что вы увидите все подключения, а не только те из вашего приложения.
вы можете даже проверить Threads_running только просмотр текущих потоков (например, не спать).
Ответ 4
Запустите следующий запрос, в нем перечислены имя хоста и нет. соединений от каждого хоста:
SELECT host, count (host) FROM information_schema.processlist GROUP BY host;
Ответ 5
показать список процессов
Ответ 6
Вы можете выбрать только Information_Schema.Processlist
данные, которые принадлежат вам. Это означает, что вы можете использовать его для мониторинга ТОЛЬКО, если вы вошли в систему под учетной записью root, иначе вы увидите соединения, исходящие от вашего пользователя, с которым вы вошли.
Если вы хотите правильно контролировать SQL, это будет:
SELECT variable_value
FROM INFORMATION_SCHEMA.GLOBAL_STATUS
WHERE variable_name='threads_connected'
Ответ 7
Вы можете использовать этот
ПОКАЗАТЬ ГЛОБАЛЬНОЕ СТАТУС;
или
показать глобальный статус, например "Threads_connected";
из состояния "Подключения" вы можете узнать общее количество подключений.
Ответ 8
Вы также можете считать открытое соединение, показывая статус из Threads_connected
имя переменной, как это:
SHOW STATUS WHERE variable_name = 'Threads_connected';
Или вы также можете подсчитать список процессов непосредственно из information_schema.PROCESSLIST
, как показано ниже:
SELECT COUNT(*) FROM information_schema.PROCESSLIST;