Fórum Root.cz

Hlavní témata => Server => Téma založeno: adlow 19. 01. 2012, 16:54:27

Název: Zjištění neoptimalizovaných SQL dotazů
Přispěvatel: adlow 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.
Název: Re:Zjisteni neoptimalizovanych sql dotazu pro mysqld na serveru
Přispěvatel: Pavel Rauš 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 ...
Název: Re:Zjisteni neoptimalizovanych sql dotazu pro mysqld na serveru
Přispěvatel: Kit 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.
Název: Re:Zjištění neoptimalizovaných SQL dotazů
Přispěvatel: adlow 19. 01. 2012, 21:18:04
mysqld mi v adresari /tmp vytvari stomegove soubory...
Název: Re:Zjištění neoptimalizovaných SQL dotazů
Přispěvatel: repli2dev 20. 01. 2012, 08:12:55
Ty "stomegové soubory" jsou úložiště DB (tabulky s enginem InnoDB)
Název: Re:Zjištění neoptimalizovaných SQL dotazů
Přispěvatel: Pavel Rauš 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.
Název: Re:Zjisteni neoptimalizovanych sql dotazu pro mysqld na serveru
Přispěvatel: Mareg 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
Název: Re:Zjištění neoptimalizovaných SQL dotazů
Přispěvatel: Pavel Rauš 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 ;-)
Název: Re:Zjištění neoptimalizovaných SQL dotazů
Přispěvatel: Kit 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.
Název: Re:Zjištění neoptimalizovaných SQL dotazů
Přispěvatel: Tomas Matejicek 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).