2008-11-06 8 views
12

Ich entwickle eine Web-App mit Java-Servlet für den Zugriff auf Mysql db, wie bekomme ich die Anzahl der Verbindungen zu meiner DB, die derzeit geöffnet ist?Wie zählen Sie offene db-Verbindungen?

Edit:

I „SHOW PROCESS“ versucht, es hat mir gezeigt: 2.695.159, aber das ist nicht richtig, bin ich gerade die Entwicklung dieses neue Projekt, ich bin der einzige Benutzer, nicht so viele haben könnte Prozesse laufen, was ich will ist die Anzahl der Benutzer Zugriff auf meines Projekts DB, nicht die Anzahl aller db Benutzer, sondern nur diejenigen in meiner Datenbank angemeldet, die nur eine Tabelle hat.

Antwort

2

zeigen PROCESS

9

könnten Sie den Befehl MySQL verwenden show processlist die Anzahl der Verbindungen zu erhalten.

Aber das zeigt Ihnen auch alle Verbindungen mit der gleichen Benutzer-ID zur Datenbank, die möglicherweise nicht von Ihrem Servlet kommt.

Im Allgemeinen würde ich vorschlagen, dass Sie wahrscheinlich besser ein Verbindungspool-Objekt verwenden (siehe http://java-source.net/open-source/connection-pools), um Ihre Verbindungen zum MySQL-Server zu verwalten. Dies kann die Leistung erhöhen, indem DB-Verbindungen persistent gemacht werden, so dass Sie nicht immer den Overhead einer neuen DB-Verbindung für jede Seitenladung haben.

Wenn Ihr Servlet die Anzahl der Verbindungen kennen muss, sollte Ihr Verbindungspool mit einer Methode kommen, die Ihnen sagt, wie viele Verbindungen gerade aktiv sind.

3

zeigen Status wie ‚Threads_connected‘ oder Show globalen Status wie ‚Threads_connected‘

Nicht sicher über den Unterschied zwischen den beiden in einem Benutzer-Kontext, und Sie können immer noch von dem Problem leiden, die Sie sehen würden, Alle Verbindungen, nicht nur die von deiner App.

Sie können sogar Threads_running überprüfen, um nur laufende Threads zu sehen (z. B. nicht schlafen).

13

Abhängig von Ihrer MySQL-Version können Sie eine ausgewählte ausführen auf

SELECT COUNT(*) FROM information_schema.PROCESSLIST;

und Sie können eine where zwischen dem Benutzer, die Datenbank und Host-IP tun.

Zum Beispiel:

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

Sie nur von Information_Schema.Processlist die Daten auswählen können, die Ihnen gehört. Dies bedeutet, dass Sie NUR für die Überwachung verwenden können, wenn Sie als root angemeldet sind. Andernfalls sehen Sie die Verbindungen von Ihrem Benutzer, mit dem Sie sich angemeldet haben.

Wenn Sie eine ordnungsgemäße Überwachung SQL wollen, wird es sein:

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

die folgende Abfrage, es listet Host-Namen und Nr. der Verbindungen von jedem Host:

SELECT Host, Anzahl (Host) FROM information_schema.Prozessliste GROUP BY Host;

0

Sie können diese

SHOW GLOBAL STATUS verwenden; oder zeigen globalen Status wie "Threads_connected";

vom Verbindungsstatus können Sie die Gesamtanzahl der Verbindungen ermitteln.

0

Sie können auch durch Show offene Verbindung den Status von Threads_connected Variablennamen wie folgt zählen:

SHOW STATUS WHERE variable_name = 'Threads_connected'; 

Oder Sie können auch direkt die Prozessliste zählen von information_schema.PROCESSLIST wie unten:

SELECT COUNT(*) FROM information_schema.PROCESSLIST;