MySQL “insert”: Windows nebo Linux?
V několika dalších článcích bych se chtěl zaměřit na srovnání rychlosti MySQL, PHP, Apache, PostgreSQL a Javy pod Windows XP SP2 a SuSE Linux 9.1.
V tomto prvním článku budu testovat rychlost MySQL, a to konkrétně insertů do tabulky, s fulltext klíčem.
Veškeré testy jsou prováděny na této konfiguraci počítače:
CPU: Pentium-4/HT 3.4 GHz RAM: 2x512MB DDR443 HDD: SATA 7.200rpms, 8MB cache Lin: SUSE 9.1, kernel 2.6.8.1, ReiserFS Win: WinXP Pro SP2, NTFS
Vlastní test provádí desetkrát po tisíci insertech do MySQL databáze, a potom zobrazí výsledky, pro měření je jako základ použit skript Jána Suchala.
function test(&$s){ mysql_query("insert into `test` (body) values ('$s')"); } $iterationsCount = 10; $subIterationsCount = 1000; // stress test @set_time_limit(1200); $link = mysql_connect('localhost','root',''); if($link==false) die("Cannot connect to MySQL DB.."); mysql_select_db('blogcms') or die("Cannot select blogcms DB..."); mysql_query("drop table if exists `test`"); mysql_query("CREATE TABLE `test` ( `id` int(11) NOT NULL auto_increment, `body` text NOT NULL, PRIMARY KEY (`id`), FULLTEXT KEY `kbody` (`body`) ) TYPE=MyISAM; "); // large string val $s=''; for ($i=0;$i<1000;$i++) $s.=strval($i).' '; // testing for($i = 0; $i < $iterationsCount; $i++) { $timer->start(); for($j = 0; $j < $subIterationsCount; $j++) test($s); $test->add($timer->stop()); } mysql_close($link); // print results echo '<pre>'; $test->getResults(); echo '</pre>';
Výsledky - Windows XP SP2:
WindowsXP Average: 0.188359689712524 Standard deviation: 0.002431358802221
Výsledky - SuSE Linux 9.1:
SuSE Linux 9.1 Average: 0.111869907379150 Standard deviation: 0.006455050875860
Je vidět, že výkon Linuxu je sice poněkud méně vyrovnaný než Windows XP (vyšší standardní odchylka), nicméně, v průměru je práce s MySQL (insert), 1.7x rychlejší pod SuSE Linuxem, než pod Windows XP.
V testu byl použit Apache 2.0.52, PHP 5.0.2 a MySQL 4.0.21, v případě SuSE Linuxu vše kompilované ze zdroje, podle tohoto článku, v případě Windows XP jsou použity ty samé verze serverů, nicméně, jejich standardní binární podoba.
U distribuce MySQL je v adresáři /banch prostředek na testování rychlosti databáze. Sám jsem chtěl něco podobného tento týden otestovat.
Cenzura nebo jsem opět zapomněl potvrdit komentář? No, jestli to teď zmizí, tak je mi to jasné :-D
Čili znonu. Přijde mi to jako objevování Ameriky.
[2] komentáře, které nejsou v ničem přínosné, mažu, ale asi ti jej tu nechám, jako ukázkový případ komentáře v ničem přínosného...
Ale k věci: jsou lidé, co věří, že Linux je rychlejší, a jsou lidé, co testují v čem přesně, pokud vůbec, je rychlejší. ;-) To, že na stejném HW je v tomto konkrétním testu Linux rychlejší 1.7x, to je dost extrém, je to strašně moc...
[3] Ono to ovlivnuje jen trochu, ale kdy byla posledni instalace obou systemu? Kolik toho bylo spusteno apod.
[4] kromě vlastního OS a serverů nebylo pochopitelně spuštěno nic jiného, tedy, až pár deamons na Linuxu.. Obě instalace obsahovaly PHP 5.0.2, Apache 2.0.52 a MySQL 4.0.21, což jsou nejnovější věci, instalované před pár dny. Zítra vyzkouším rychlost PHP, tam očekávám, že by takové rozdíly být neměly.
velmi zajímavé. Jen bych se chtěl Radku zeptat, jestli máš linux a mysql zkompilovaný s optimalizací přímo pro Tvůj počítač (samozřejmě to by ten dramatický rozdíl rychlostí nevysvětlovalo).
[6] ano, mám jak zkompilovaný ze zdroje a optimalizovaný
kernel 2.6.8.1
(jen věci a moduly, co potřebuje moje PC), takMySQL 4.0.21
a další celky (Apache, PHP) zkompilované ze zdroje.. Na Windows je binárka, standardní.Toto jsem použil pro kompilaci:
export CFLAGS="-march=pentium4 -mfpmath=sse -msse2 -s -pipe -O2 -fomit-frame-pointer"
, gcc verze 3.3.3.Som ani netušil, že sa ti ten skript tak zapáči.
No asi deň po tom čo som to nakódoval som našiel v PEARe balíky Math_Stats a Benchmark . To naštve.
Kolikrat za sebou se ten test provadel? Je to vysledek jednoho mereni a nebo prumer s vyhozenim viditelne nahodilych hodnot?
[9] vše je to v článku napsané... je potřeba lépe a pozorněji číst.
[10] Jako pravda, přehlédl jsem větu Vlastní test provádí desetkrát po tisíci insertech do MySQL databáze, ale stejně mě zajímá, jestli ten test (vcelku) běžel jednou a nebo vícektrát.... (nemyslím tím tedy to že to najednou testne desetkrat, ale cele provednei testu)
To neberte že rýpu do výsledků, prostě mě to dost zajímá...