2008-11-06 10 views
12

Je suis en train de développer une application web utilisant Java servlet pour accéder à mysql db, comment puis-je obtenir le nombre de connexions à ma base de données actuellement ouverte?Comment compter les connexions db ouvertes?

Edit:

J'ai essayé « processlist show », il m'a montré: 2695159, mais ce qui ne va pas, je suis juste développer ce nouveau projet, je suis le seul utilisateur, ne pouvait pas avoir que beaucoup processus en cours d'exécution, ce que je veux, c'est le nombre d'utilisateurs accédant DB de mon projet, pas le nombre de tous les utilisateurs db, mais seulement ceux qui sont connectés à ma base de données qui a une seule table.

Répondre

2

show processlist

9

Vous pouvez utiliser la commande MySQL show processlist pour obtenir le nombre de connexions. Cependant, cela affichera également toutes les connexions effectuées avec le même ID utilisateur dans la base de données, qui ne proviendront peut-être pas de votre servlet.

En général, je suggérerais que vous feriez probablement mieux d'utiliser un objet Connection Pool (voir http://java-source.net/open-source/connection-pools) pour gérer vos connexions au serveur MySQL. Cela peut augmenter les performances en rendant les connexions DB persistantes, de sorte que vous ne disposez pas toujours de la surcharge d'une nouvelle connexion DB pour chaque chargement de page.

Si votre servlet doit connaître le nombre de connexions, votre pool de connexions doit contenir une méthode indiquant le nombre de connexions actives.

3

état de spectacle comme « Threads_connected » ou montrent le statut global comme « Threads_connected »

Je ne sais pas la différence entre les deux dans un contexte utilisateur, et vous pourriez encore souffrir du problème que vous verriez toutes les connexions, pas seulement celles de votre application.

Vous pouvez même vérifier Threads_running pour voir uniquement les threads en cours d'exécution (par exemple, ne pas dormir).

13

En fonction de votre version de MySQL, vous pouvez effectuer une sélection sur

SELECT COUNT(*) FROM information_schema.PROCESSLIST;

et vous pouvez faire un where entre l'utilisateur, base de données, et l'hôte IP.

Par exemple:

USE information_schema; 
SELECT COUNT(*) FROM PROCESSLIST WHERE db ="mycase" AND HOST LIKE "192.168.11.174%" 
2

Vous ne pouvez choisir parmi Information_Schema.Processlist les données qui vous appartient. Cela signifie que vous pouvez l'utiliser pour surveiller UNIQUEMENT si vous êtes connecté en tant que root, sinon vous verrez les connexions provenant de votre utilisateur avec lequel vous vous êtes connecté.

Si vous voulez SQL surveillance appropriée, il sera:

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

Exécutez la requête suivante, elle présente la liste le nom d'hôte et non. des connexions de chaque hôte:

SELECT hôte, compte (hôte) FROM information_schema.liste de processus GROUP BY host;

0

Vous pouvez l'utiliser

SHOW GLOBAL STATUS; ou afficher le statut global comme "Threads_connected";

à partir de l'état des connexions vous pouvez trouver le nombre total de connexions.

0

Vous pouvez également compter connexion ouverte par émission de l'état de Threads_connected nom de variable comme ceci:

SHOW STATUS WHERE variable_name = 'Threads_connected'; 

Ou vous pouvez aussi compter la liste des processus directement à partir information_schema.PROCESSLIST comme ci-dessous:

SELECT COUNT(*) FROM information_schema.PROCESSLIST; 
Questions connexes