Wyświetl aktywne połączenia MySQL na użytkownika

9

Potrzebuję zapytania, które da mi aktywną lub otwartą liczbę połączeń z określoną bazą danych dla określonego użytkownika. Szukałem godzin i do tej pory nic nie wymyśliłem. Jestem blisko, więc oto, co próbowałem.

  1. SHOW STATUS WHERE `variable_name` = 'Threads_connected';

  2. SHOW STATUS LIKE '%onn%';

  3. SELECT * FROM information_schema.processlist WHERE USER='database_user';

Pracuję dla firmy hostingowej, a jeden z naszych klientów wciąż osiąga swój max_user_connectionslimit, więc przy rozwiązywaniu problemów muszę wiedzieć, z ilu połączeń korzysta teraz jego użytkownik, ponieważ nie jest on serwerem udostępnionym. Obecnie używam MySQL (InnoDB) w wersji 5.5.36. Każda pomoc byłaby bardzo mile widziana!

Will Hughes
źródło

Odpowiedzi:

11

Potrzebny jest podział według nazwy użytkownika i hosta wraz z sumą

SELECT IFNULL(usr,'All Users') user,IFNULL(hst,'All Hosts') host,COUNT(1) Connections
FROM
(
    SELECT user usr,LEFT(host,LOCATE(':',host) - 1) hst
    FROM information_schema.processlist
    WHERE user NOT IN ('system user','root')
) A GROUP BY usr,hst WITH ROLLUP;

Będzie to obsługiwać adres hosta z dwukropkiem oddzielającym nazwę hosta i numer portu

Mam nadzieję, że wszyscy nie logują się jako root

RolandoMySQLDBA
źródło
-1

Szczegółowa dyskusja na ten temat: https://dba.stackexchange.com/a/47160/385

Krótko mówiąc, potrzebne są zapytania

SELECT max_user_connections FROM mysql.user WHERE user='db_user' AND host='localhost';

i

SHOW VARIABLES LIKE 'max_user_connections';

AKTUALIZACJA

Może nie jest to bezpośrednia odpowiedź na twoje pytanie, ale zgodnie z http://dev.mysql.com/doc/refman/5.5/en/user-resources.html MySQL pozwala ci ograniczyć liczbę dostępów na godzinę . Więc może to odpowiada, dlaczego określony użytkownik uderza limit, podczas gdy liczba jego połączeń jest niewielka zgodnie z listą procesów. Niestety nie mogę znaleźć odniesienia do sposobu uzyskania licznika dostępu.

Isaac A. Nugroho
źródło
Nie chcę zmieniać liczby max_user_connections ani przeglądać max_user_connections, wiem jak to zrobić. Chcę zobaczyć, ile z tych połączeń dany użytkownik ma aktywny.
Will Hughes,