[?] Zatížení MySQL, jak zjistit?

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Martin007 27. 7. 2005 11:22

Zdravím Vás.

Mám server, na který přijde denně cca 5 tis čtenářů (cca 45,000 shlédnutých stran). Vše běží na Apache + PHP + MySQL, celý systém jsem programoval já. A zde je problém. Vše vznikalo v době, kdy jsem měl návštěvníků podstatně méně a tak kód obsahuje milion a jeden neotimalizovaných dotazů na MySQL. Rád bych je teď začal alespoň lehce upravovat, ať serveru ulehčím, ale chtěl bych při tomto "ladění" mít nástroj, který mi ukáže, jak ta či ona změna zatížení změnila. Existuje něco takového?

Moje představa je nainstalovat něco, co mi ukáže, kolik dotazů při reloadu stránky na databázi přišlo a jak moc ji to zatížilo, abych viděl jasný číselný rozdíl, jak změna (ne)pomohla.

Omlouvám se za svůj dotaz, nejsem profesionální programátor, tzn. se ptám možná na něco, co je pro jiné samozřejmost...

Děkuji.
Martin007
Kolemjdoucí

Odeslat příspěvekod Lemur 27. 7. 2005 22:13

Existuje nastroj mytop, ktery se chova jako klasicky top ale misto procesu vypisuje MySQL vlakna a ukazuje co delaji.

A na zjistovani dotazu staci hodit logovani do souboru - staci do konfiguracniho souboru pridat do asekce [mysqld] patrametr log=/cesta/k/soboru/soubor_s_logem. Ale dost to snizuje vykonnost, doporucuju pouzivat jen pri ladeni.
Lemur
VIP uživatel
Uživatelský avatar

Odeslat příspěvekod netrunner 27. 7. 2005 22:35

A co takhle nastudovat výstup dotazu "SHOW STATUS". Tam je dokonce i kolik proběhlo dotazů do databáze a různý fičurky. Pak by stálo za to změřit dobu načítání skriptu, no a tak 10x refreshovat, aby si dostal relevantní výsledek a máš to ;)
Tak zkouším mnou napsané fce, prostě je v cyklu proženu X tisíckrát a měřím jak dlouho to trvá. :)
netrunner
Junior
Uživatelský avatar

Odeslat příspěvekod Martin007 28. 7. 2005 10:51

Děkuji, vše uvedené vyzkouším.
Martin007
Kolemjdoucí

Odeslat příspěvekod btos 29. 7. 2005 17:12

Mytop je docela fajn programek, ale jestli te zajimaji pomale dotazy tak mysql umoznuje primo zapnout logovani sql dotazu ktere trvaji dele nez nejaka hodnota v konfiguraku - http://dev.mysql.com/doc/mysql/en/slow-query-log.html
btos
Kolemjdoucí

Odeslat příspěvekod tark 1. 8. 2005 17:06

Mno, jde to i jinak ... Nějaký databázový layer asi nepoužíváš, co? (myslím tím, že třeba místo mysql_connect(...), mysql_query(...) apod. používáš třeba $db->query(...))

jestli bys ho používal, tak si uprav fci query() ...

Kód: Vybrat vše
function query($query) {
  global $dblog;
  $dblog[] = $query;

  return mysql_query($query);
}


A potom si nech třeba někde vypisovat tohle:

echo '<pre>';
print_r($dblog);
echo '</pre>';

Každopádně elegantněji by to šlo udělat objektově, já to třeba dělám takhle: http://kanevinternetu.blacksuns.net/ite ... ove-layery ...
tark
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků