[MYSQL]Hoe kan ik queries analyseren?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • van.der.schulting
  • Registratie: Juli 2002
  • Laatst online: 09-08-2024
Gezien de titel hoor ik al mensen roepen: De MySQL Query Analyzer (http://www.mysql.com/products/enterprise/query.html) Probleem is alleen dat deze tool heel duur is (2000 dollar). Ik kwam wel een alternatief tegen; Xaprb, maar die is ook heel erg uitgebreid en ik weet niet zo goed waar ik moet beginnen in dit geval.

Wat ik wil is het volgende:
Een tool die het volgende kan:
1. De uitgevoerde queries kan rangschikken op 'tijd in ms', zodat ik weet welke queries het langst duren.
2. Vertellen hoe vaak een bepaalde query wordt uitgevoerd en de gemiddeld verstreken tijd per query weergeven.
3. Eventueel met adviezen komen hoe ik mijn queries kan verbeteren.

Op basis van punt 1 en 2 kan ik dan bepalen waar ik mijn queries nog moet verbeteren.

In theorie lijkt mij dit niet zo moeilijk, als MySQL in zijn logfiles ook het aantal verstreken ms zet. Volgens mij doet MySQL dit helaas niet. Hooguit dat MySQL een slow query log kent.

Wie weet een goede tool of een goede manier voor mijn drie 'wensen'. Ik kom er niet echt uit.

Acties:
  • 0 Henk 'm!

  • 4VAlien
  • Registratie: November 2000
  • Laatst online: 24-06 09:47

4VAlien

Intarweb!

Is er een reden waarom je niet vanuit je applicatie kan timen?

In eerste instantie kun je natuurlijk ook EXPLAIN gebruiken om te kijken of er niet ergens een cruciale index mist of niet wordt meegenomen.

Acties:
  • 0 Henk 'm!

Verwijderd

Afhankelijk van de website/applicatie die je wilt testen (en hoe deze is gebouwd) kun je natuurlijk gewoon alle queries printen en per keer een timer laten lopen.

Zelf doe ik dit in m'n Database class, waar alles mbt tot SQL langs loopt. Elke query wordt (mits in debug mode) in een array gezet, inclusief de looptijd en het aantal resultaten.
Eventueel kan ik nog controleren hoe vaak een query wordt uitgevoerd (of door de cache wordt afgehandeld), zodat ik het kan verbeteren.

Het vertraagd natuurlijk wel, maar het is alleen op de queries te kunnen zien en te controleren.
Hoe je het dan toont is persoonlijk, maar ik stuur het naar Firebug (dmv FirePHP), maar gewoon printen in een tabel onderaan de pagina is ook mogelijk.


Met deze methode kun je alleen punten 1 en 2 zien; je derde punt zal toch echt handwerk zijn (o.a. met EXPLAIN), tenzij je dit soort queries ook in je debug zet.

Acties:
  • 0 Henk 'm!

  • van.der.schulting
  • Registratie: Juli 2002
  • Laatst online: 09-08-2024
EXPLAIN ga ik proberen; thanks.

M'n applicatie (geschreven in Ruby on Rails) print de queries inclusief tijden en zet het in een logfile, maar het gaat om duizenden queries. De applicatie draait meer dan tien queries per seconde. Ik scroll er zo nu en dan wel doorheen, maar gezien het feit dat het om zoveel queries gaat is de kans heel groot dat ik trage queries over het hoofd zie.

Misschien moet ik mijn vraag iets anders formuleren: Is er een tool om de queries in de logfiles van Ruby on Rails te analyseren?

Acties:
  • 0 Henk 'm!

  • ZpAz
  • Registratie: September 2005
  • Laatst online: 21-09 15:23
Ik weet niet hoe het formaat is van het logbestand, maar het moet niet zo lastig te zijn om daar uit te halen de data waarmee je een simpel script kan maken die de 'x langste queries' toont?

Tweakers Time Machine Browser Extension | Chrome : Firefox


Acties:
  • 0 Henk 'm!

  • van.der.schulting
  • Registratie: Juli 2002
  • Laatst online: 09-08-2024
Daar heb je gelijk in, een simpel scriptje zal zo geschreven zijn die alle queries groter dan x miliseconds eruit haalt.

Als ik echter wil gaan rangschikken, dan wordt het ingewikkelder of als ik de gemiddelde tijd wil berekenen van een query die vaak voorkomt. Dat gaat wel lukken, maar dat kost me best wat tijd, dus als er iemand een tooltje weet die mijn Rails log kan analyseren, scheelt dat mij een hoop gedoe ;)

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21-09 21:47

Creepy

Tactical Espionage Splatterer

Hooguit dat MySQL een slow query log kent.
[
Die kent MySQL: Dus de log_slow_queries optie gebruiken waar MySQL zelf de langzame queries in logt (dus de volledige query, begintijd, duur, aantal records bekeken, aantal records returnt). Met de log_query_time optie kan je in seconden bepalen vanaf welke tijd dat moet gebeuren.

Maar waarom heb je dat zelf al niet even gecontroleerd of deze optie er is en even getest? En kom op, een logfile parsertje schrijven is echt geen rocket science. We zitten hier wel in de Devschuur waar we zelf devven he ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • van.der.schulting
  • Registratie: Juli 2002
  • Laatst online: 09-08-2024
Creepy schreef op maandag 11 juli 2011 @ 17:17:
Maar waarom heb je dat zelf al niet even gecontroleerd of deze optie er is en even getest? En kom op, een logfile parsertje schrijven is echt geen rocket science. We zitten hier wel in de Devschuur waar we zelf devven he ;)
Die slow_query_log had ik gevonden (dat bedoelde ik, maar misschien wat knullig geformuleerd).
En wel of geen devschuur, ik vind het een beetje zonde van mijn tijd om iets te gaan schrijven als iemand anders het al eens heeft gedaan en wellicht zelfs veel beter dan ik...

Acties:
  • 0 Henk 'm!

  • Speedener
  • Registratie: September 2000
  • Laatst online: 08:54
Je kunt ook kijken naar Maatkit. Hiermee kan je querylogs analyseren.

Vanaf MySQL versie 5.1 (volgens mij) kun je ook on the fly mysql query log aanzetten. Zodat je gedurende een periode alle queries kan loggen (kan uiteraard alleen als je zelf de mysql server beheerd).

LG Therma V Split WP: HU143MA.U33-HN1636M NK5


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Speedener schreef op maandag 11 juli 2011 @ 18:49:
Je kunt ook kijken naar Maatkit. Hiermee kan je querylogs analyseren.
Die noemde hij 'Xaprb' (de maker van maatkit).

Met de slow query log vindt je geen queries die 500x per seconde worden uitgevoerd maar snel zijn. Met mk-query-digest en tcpdump lukt dat wel. Dat is echt een ideale combinatie.
3. Eventueel met adviezen komen hoe ik mijn queries kan verbeteren.
Met adviezen red je het niet, lees een boek als High Performance MySQL.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
GlowMouse schreef op maandag 11 juli 2011 @ 20:16:
[...]
Met de slow query log vindt je geen queries die 500x per seconde worden uitgevoerd maar snel zijn. Met mk-query-digest en tcpdump lukt dat wel. Dat is echt een ideale combinatie.
Je moet ergens beginnen... TS geeft al aan dat sommige tools te uitgebreid of te duur zijn, dan komt het wmb al snel neer op huidige onkunde en nu resultaten willen hebben (aka hobbyen / quickfixen)
[...]
Met adviezen red je het niet, lees een boek als High Performance MySQL.
Ik ken het boek niet, maar is dat niet wat te hoog ingeschaald?
Persoonlijk zou mijn advies zijn : Parse eerst maar eens de slow-query logs en kijk wat je daar uit kan halen.
Haal je daar niet echt meer iets uit, dan kan je een nivo verder gaan.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Dat boek leest nog best makkelijk weg en je mag wel heel lang 'hobbyen' als je hetzelfde wilt leren als in dat boek van een paar tientjes staat. :z

{signature}

Pagina: 1