Portál AbcLinuxu, 18. dubna 2024 05:21


Dotaz: Ako monitorovat mysql queries podla uzivatelov

Tombik avatar 1.2.2012 15:53 Tombik | skóre: 12
Ako monitorovat mysql queries podla uzivatelov
Přečteno: 868×
Odpovědět | Admin
Zdravim, mam linuxovy mysql 5.5 server s viacerymi uzivatelmi. Niektori ho pouzivaju viac, niektori menej, potrebujem v pripade, ze mi ten server niekto zacne prilis pretazovat zistit kto to robi. Potrebujem teda nejaky monitorovaci nastroj. Naprogramoval by som si aj nieco vlastne, ale nedokazem prist na sposob ako odmerat to, ze nejaky konkretny uzivatel mi moj mysql server pretazuje najviac. Celkom uzitocne som nasiel toto:
mysqladmin -h <host> --user=<user> --password=<pass> --verbose processlist
Ti co to nepoznaju robi to nieco taketo:
+---------+----------+------------+---------+------+--------------+-----------------------------------------------------------------------------------------------+
| Id      | User     | db         | Command | Time | State        | Info                                                                                          |
+---------+----------+------------+---------+------+--------------+-----------------------------------------------------------------------------------------------+
| 3276700 | uzivat00 | uzivat00db | Query   | 0    | Sending data | SELECT nice_url FROM p_jobs WHERE nice_url='test-url' AND id<>12564                           |
| 3276949 | uzivat01 | uzivat01db | Sleep   | 39   |              |                                                                                               |
| 3277033 | uzivat01 | uzivat01db | Sleep   | 20   |              |                                                                                               |
| 3277084 | uzivat05 | uzivat05db | Sleep   | 14   |              |                                                                                               |
| 3277087 | uzivat01 | uzivat01db | Sleep   | 13   |              |                                                                                               |
| 3277162 | uzivat01 | uzivat01db | Sleep   | 1    |              |                                                                                               |
| 3277164 | uzivat04 | uzivat05db | Sleep   | 0    |              |                                                                                               |
| 3277165 | root     |            | Query   | 0    |              | show full processlist                                                                         |
+---------+----------+------------+---------+------+--------------+-----------------------------------------------------------------------------------------------+
Rozmyslal som nad tym, ze by som mohol nejako skusit merat cas, ktory potrebuju jednotlive queries podla uzivatelov a ze by sa to nejako zratavalo. No neviem. Poznate nieco na to? Niekto aspon tusi ako nieco take merat? Za kazdu radu budem velmi vdacny.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.2.2012 16:23 radeczek | skóre: 7
Rozbalit Rozbalit vše Re: Ako monitorovat mysql queries podla uzivatelov
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nestačilo by jen nastavit "slow_query_log"(nevím, jak je to přesně), což způsobí, že Mysql bude samo logovat dotazy, které jsou delší než zvolený čas. V logu je znění dotazu i user.
Tombik avatar 1.2.2012 16:44 Tombik | skóre: 12
Rozbalit Rozbalit vše Re: Ako monitorovat mysql queries podla uzivatelov
Dobry den,

dakujem za napad, ale toto mi bohuzial nestaci. Vacsina uzivatelov ma dobre optimalizovane queries nakolko pouzivaju rozne komercne CMS. Slow queries logujem, prakticky ziadne sa tam nevyskytuju. Navzdory tomu ten server zacina byt celkom slusne vytazeny a ja neviem kto mi to sposobuje :(
1.2.2012 17:05 radeczek | skóre: 7
Rozbalit Rozbalit vše Re: Ako monitorovat mysql queries podla uzivatelov
Nějaké nástroje asi existují - stačí googlit, něco se najít dá. Zkoušet to nebudu. Přinejhorším by se dal napsat nějaký skriptík, který by každou sekundu pustil ten váš program a zapisoval by do tabulky a pak byste mohl zjistit, kdo, kolik a jaké query dělá. Nevýhodou je, že by to trošku zatěžovalo tu DB samotnou.

Kdybyste narazil na něco solidního, tak se prosím pochlubte i tady. Možná se to šikne i mě. Dík.
Tombik avatar 1.2.2012 18:58 Tombik | skóre: 12
Rozbalit Rozbalit vše Re: Ako monitorovat mysql queries podla uzivatelov
Praveze som googlil ale nic solidne som nenasiel. Samozrejme mam na mysli nieco free v idealnom pripade open source.

To kolko a ake query robi nevypoveda nic o tom ako velmi to je pre moj server narocne spracovat. Query ako SELECT * FROM velka_tabulka; urcite vytazi server viacej ako query typu SELECT name from velka_tabulka WHERE id='20345';
1.2.2012 17:24 David Karban | skóre: 12 | blog: DK
Rozbalit Rozbalit vše Re: Ako monitorovat mysql queries podla uzivatelov
Neměl by na mysql 5.5. už být slow log i s méně, než sekundovým rozlišením?

Plus, percona-toolkit (na debianu) má i nástroje na odchytávání slow dotazů přímo ze sítě, například si tcpdumpem chytáte packety mysqlky a cpete to na analýzu pt-query-digest (tuším). To má pak rozlišení libovolné - klidně i na dotazy o setinách sekundy.

Nepomohlo by to?
Tombik avatar 1.2.2012 19:00 Tombik | skóre: 12
Rozbalit Rozbalit vše Re: Ako monitorovat mysql queries podla uzivatelov
Nechcel som byt prilis detailny ale tych serverov je vlastne viacej kde potrebujem ten monitoring spravit. Nie vsade je vsak MySQL 5.5 niekde su aj nizsie verzie. Vsade musi byt ten monitoring identicky.

Na vsetkych serveroch je vsak Centos 6.2 (na dvoch je tusim este 5.6).

Ten napad s tcpdumpom neznie zle. Skusim sa na to blizsie pozriet.

Dakujem
1.2.2012 20:45 David Karban | skóre: 12 | blog: DK
Rozbalit Rozbalit vše Re: Ako monitorovat mysql queries podla uzivatelov
Dokumentaci k tomu najdete zde: http://www.maatkit.org/doc/mk-query-digest.html, je tam i příklad jak pustit tcpdump. V percona-toolkit se to jmenuje pt-query-digest, ale funguje to stejně. Good luck :).
Řešení 1× (Tombik (tazatel))
Jakub Lucký avatar 2.2.2012 17:49 Jakub Lucký | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: Ako monitorovat mysql queries podla uzivatelov
Odpovědět | | Sbalit | Link | Blokovat | Admin
Userstats patch?
If you understand, things are just as they are; if you do not understand, things are just as they are.
Tombik avatar 6.2.2012 09:32 Tombik | skóre: 12
Rozbalit Rozbalit vše Re: Ako monitorovat mysql queries podla uzivatelov
Tak toto vyzera uplne uzasne :) diky moc idem to hned vyskusat.
8.2.2012 23:20 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Ako monitorovat mysql queries podla uzivatelov
Len upozornim, ze userstats pripocitava CPU time az po dokonceni SQL dotazu a nie priebezne. Ak ti tam teda niekto spusti nieco brutalne, monitoring na to pride az ked to bude hotove. Za prve to samozrejme znemoznuje okamzite reagovat na problem a za druhe to znemoznuje vykreslovat grafy zataze (proste v jednej sekunde to pripocita obrovsky CPU time, cim dostanes napr. 1000% vyuzitie CPU). Kvoli tomuto sme to prestali pouzivat.
Tombik avatar 13.2.2012 09:36 Tombik | skóre: 12
Rozbalit Rozbalit vše Re: Ako monitorovat mysql queries podla uzivatelov
Dakujem za upozornenie. Testujem to a zatial ma to neocarilo. Pouzivate nieco ine miesto userstats?

Dik
13.2.2012 11:34 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Ako monitorovat mysql queries podla uzivatelov
Vyvijame nejake vlastne riesenia (konkretne rozdelovanie MySQL vlakien do kontrolnych skupin [cgroups] podla usera - patchnuty MySQL server) avsak v produkcnom prostredi to nemame nasadene z vykonnostnych dovodov, proste je to zatial pomale. Popritom nam bezi jeden daemon, ktory v pravidelnych kratkych intervaloch kontroluje beziace SQL dotazy a tie, ktore bezia viac ako 60 sekund, proste killuje. Ak chces zistit aktualnu zataz v MySQL, tak odporucam 'mytop'.
Tombik avatar 14.2.2012 09:31 Tombik | skóre: 12
Rozbalit Rozbalit vše Re: Ako monitorovat mysql queries podla uzivatelov
Dakujem mytop som uz skusal (aj mtop) taktiez skusame aj vlastne riesenia no zatial je to nepostacujuce. Tiez mame demona ktory killuje slow queries pripadne zbytocne sleep connections.
14.2.2012 14:13 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: Ako monitorovat mysql queries podla uzivatelov
Na prevenciu proti 'sleep connections' odporucam nastavit 'wait_timeout' (my to mame na 120 sekund).

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.