Autor Zpráva
MyFlower
Profil
Ahoj,

mám problém s MySQL serverem, který se snažím vyřešit už přes týden. Po provedení update celé databáze (přepsání víceméně všech dat) a nebo po restartu daemona (mysqld) mi první načtení libovolné stránky připojující se do databáze trvá neuvěřitelně dlouho. Jakmile se (nejspíš) vytvoří cache, server začne odpovídat běžnou rychlostí a vše je bez problémů až do dalšího restartu / update.

Netušíte, co s tím? Mohu zkusit řešení na straně serveru (Debian), klidně i nějaký příkaz MySQL, případně i PHP - fantazii se moc meze nekladou :-D

Předem díky :-)
Kajman
Profil
Zkuste si změřit jednotlivé části stránky, co tam dlouho trvá. Zda je to připojení, či nějaký konkrétní dotaz.
MyFlower
Profil
Kajman:
Dlouho trvají dotazy na vypsání stromové struktury [~230 strukturovaných záznamů]. Dotaz je odladěný, po prvním načtení trvá několik milisekund, zatímco první načtení trvá asi 50 sekund... Ale stejně zpomalené jsou i jiné složitější SELECT dotazy (s jedním a více JOIN / WHERE). Jedině obyčejný SELECT x FROM y je rychlý,
Kajman
Profil
Když po restartu spustíte ty dotazy mimo webovou aplikaci, tak jsou taky pomalé?

A když ty odlaněné dotazy pustíte s vypnotou sql cachí, tak jsou stále svižné?
select no_sql_cache ...

Možná by se dalo do startovacích procedur přidat po nastartování mysql serveru i něco jako
ANALYZE TABLE `tabulka1`, `tabulka2`
Což neodstraní příčinu ale alespoň ten první dlouhý přístup k tabulkám udělá automaticky.
MyFlower
Profil
Kajman:
I když dotazy spustím přímo na serveru, jsou stejně pomalé. Svižné jsou pouze se zapnutou cache, jakmile ji vypnu, jsou pomalé stejně jako při prvním načtení. ANALYZE TABLE bohužel nepomáhá.

Nemohu si ani nijak "předvygenerovat" výstup, protože pro každého uživatele je odlišný a ukládat strom pro každého uživatele jednotlivě se mi nezdá jako validní řešení...
candiess
Profil
a nebo byjsye mohl vyzkouset optimalizaci (OPTIMIZE TABLE table), kde se defragmentuje db a je to pak dycky o neco rychlejsi :)
MyFlower
Profil
candiess:
OPTIMIZE TABLE má bohužel téměř nulový efekt :-)
Keeehi
Profil
MyFlower:
S těmi složitými dotazy se nedá už nic jiného dělat? Máš indexy na správných sloupcích? Máš správně navržené tabulky? Číslo 230 zmiňované v [#3] není vůbec velké. 50 sekund na 230 záznamů se mi zdá vážně moc. Asi to nebude tak optimalizované jak si myslíš.
Kajman
Profil
Pokud jsou dotazy s vypnutu sql cache pomalé i později, tak nejsou "odladěné", jak uvádíte.

Mrkněte u nich na explainy, zkuste využít indexy.
MyFlower
Profil
Díky všem za odpovědi. Nakonec jsem vše obešel pomocí PHP, odstranil tak X poddotazů a díky třídám vše spároval. Řešení pomocí SQL jsem nenalezl.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: