2008-11-06 5 views
12

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

Edit:

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

ответ

9

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

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

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

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

3

показать статус как или шоу глобального статуса «Threads_connected» как «Threads_connected»

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

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

13

В зависимости от версии 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

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

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

SELECT variable_value 
FROM INFORMATION_SCHEMA.GLOBAL_STATUS 
WHERE variable_name='threads_connected' 
3

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

SELECT host, count (host) FROM information_schema.processlist GROUP BY host;

0

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

SHOW GLOBAL STATUS; или показать общее состояние как "Threads_connected";

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

0

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

SHOW STATUS WHERE variable_name = 'Threads_connected'; 

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

SELECT COUNT(*) FROM information_schema.PROCESSLIST; 
Смежные вопросы