Zjištění neoptimalizovaných SQL dotazů

adlow

Zjištění neoptimalizovaných SQL dotazů
« kdy: 19. 01. 2012, 16:54:27 »
Ahoj,

chtel bych jeste poprosit o radu. Mam na serveru mysqld a v na nem par (cca 20) databazi a webu. Zrejme nektery web pouziva obcas nejake neoptimalizovane sql dotazy, protoze mysqld zacne hodne swapovat a ukladat data.

Jak mam najit uzivatele a ten narocny sql dotaz?
Da se nejak zapnout logovani vsech dotazu a jejich casove a pametove naroky?

Koukal jsem, ze existuje mytop, ale tim se pripojim jen k jedne databazi, takze bych ho musel mit pusteny dvacetkrat?

Diky moc za postrceni.

P.
« Poslední změna: 19. 01. 2012, 18:43:01 od Petr Krčmář »


Re:Zjisteni neoptimalizovanych sql dotazu pro mysqld na serveru
« Odpověď #1 kdy: 19. 01. 2012, 17:10:18 »
log_slow_queries = /....
long_query_time = 1 ( novejsi mysql umi i desetinna cisla, starsi jen integer, je to ve vterinach )

pokud to nepomuze tak pridat

log-queries-not-using-indexes

pripadne optimalizovat zdroje u mysql ... ono ne kazdy problem muze znamenat spatne sql query.

good luck ...

Kit

Re:Zjisteni neoptimalizovanych sql dotazu pro mysqld na serveru
« Odpověď #2 kdy: 19. 01. 2012, 18:09:12 »
Podle mne největší zátěží pro SQL servery nejsou komplikované dotazy, ale obrovské množství primitivních dotazů, které jsou některé aplikace schopny vygenerovat kvůli zobrazení jedné stránky. Někteří webmasteři si MySQL pletou s key->value store a dokáží databázový server zahltit. Na takové pak může platit FUP omezující počet dotazů za hodinu.

adlow

Re:Zjištění neoptimalizovaných SQL dotazů
« Odpověď #3 kdy: 19. 01. 2012, 21:18:04 »
mysqld mi v adresari /tmp vytvari stomegove soubory...

repli2dev

Re:Zjištění neoptimalizovaných SQL dotazů
« Odpověď #4 kdy: 20. 01. 2012, 08:12:55 »
Ty "stomegové soubory" jsou úložiště DB (tabulky s enginem InnoDB)


Re:Zjištění neoptimalizovaných SQL dotazů
« Odpověď #5 kdy: 20. 01. 2012, 08:33:01 »
Ne!!! Ty stomegove soubory v tmp jsou docasne tabulky ktere se vytvareji na disku. Zkuste zvednout tmp_table_size, aby se to delalo v ramce. Dotazy ktere to delaji pujdou snadno identifikovat ze slow_query logu. Urcite je to zhavy kandidat na optimalizaci - vytvareni tmp tabulky obvykle znamena chybejici index ( bud sloupec podle ktereho se radi nebo dela join ) nebo spatnou konstrukci query.

Mareg

Re:Zjisteni neoptimalizovanych sql dotazu pro mysqld na serveru
« Odpověď #6 kdy: 20. 01. 2012, 10:01:40 »
Podle mne největší zátěží pro SQL servery nejsou komplikované dotazy, ale obrovské množství primitivních dotazů, které jsou některé aplikace schopny vygenerovat kvůli zobrazení jedné stránky. Někteří webmasteři si MySQL pletou s key->value store a dokáží databázový server zahltit. Na takové pak může platit FUP omezující počet dotazů za hodinu.
No já mám skoro pocit, že je to naopak. Zátěží není ani tak množství jednoduchých dotazů, jako komplikované dotazy, při kterých si server musí vytvářet tmp tabulky ať už v RAM nebo na disku.

Je tu někdo, kdo to má ověřené?

Díky.
--
Mareg

Re:Zjištění neoptimalizovaných SQL dotazů
« Odpověď #7 kdy: 20. 01. 2012, 21:57:27 »
I spousta kratkych jednoduchych sql muze samozrejme snizit vykonnost databaze. Ale typicky stav je, ze kdyz se zbavite top 10 nejoslivejsich sql query, zatez serveru klesne o pulku ;-)

Kit

Re:Zjištění neoptimalizovaných SQL dotazů
« Odpověď #8 kdy: 21. 01. 2012, 14:21:34 »
I spousta kratkych jednoduchych sql muze samozrejme snizit vykonnost databaze. Ale typicky stav je, ze kdyz se zbavite top 10 nejoslivejsich sql query, zatez serveru klesne o pulku ;-)
Pokud se tady bavíme o normálních SQL dotazech, tak ty komplikovanější budou asi zatěžovat databázi víc, než ty jednodušší. To je logické. Ovšem často se setkávám s dotazy méně normálními. Například pokud někdo vytáhne z databáze hodnotu, upraví ji a zase uloží. Dva dotazy místo jednoho. A to nejlépe v cyklu. Vytahování příspěvků fóra podle jednotlivých ID, opět v cyklu. Prostě dotazy, kterým by se vedlo mnohem lépe v databázích jiného typu.

Re:Zjištění neoptimalizovaných SQL dotazů
« Odpověď #9 kdy: 21. 01. 2012, 17:31:30 »
Jak uz bylo receno, daji se logovat 'slow queries'. To ale asi neodhali majitele webu, jehoz skripty to delaji (pokud jde o sdileny hosting). Dal je take mozne zrovna v moment kdy to 'zatezuje', tak sql dotazem SHOW PROCESSLIST nebo SHOW FULL PROCESSLIST nechat vypsat aktualne provadene dotazy a dotazy cekajici ve fronte.

Jsou situace, kdy samotne MySQL dotazy optimalizovat neni mozne (zvlast kdyz je dela nejaka hloupa closed source aplikace). Pak je jedinou moznosti navysovani vykonu stroje nebo pridani RAM, a nasmerovani adresare pro tohle docasne ukladani pomocnych souboru na nejaky rychlejsi filesystem (napr. rychle raid pole) nebo do RAM (tmpfs).