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.

Komentáře 11

  1. #1 Prochaine

    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.

  2. #2 Jiří Macich ml.

    Cenzura nebo jsem opět zapomněl potvrdit komentář? No, jestli to teď zmizí, tak je mi to jasné 😄

    Čili znonu. Přijde mi to jako objevování Ameriky.

  3. #3 Radek Hulán autor webu ▲10 ▼0

    [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...

  4. #4 Ondřej Kokeš

    [3] Ono to ovlivnuje jen trochu, ale kdy byla posledni instalace obou systemu? Kolik toho bylo spusteno apod.

  5. #5 Radek Hulán autor webu ▲10 ▼0

    [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.

  6. #6 dgx

    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).

  7. #7 Radek Hulán autor webu ▲10 ▼0

    [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), tak MySQL 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.

  8. #8 johno

    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.

  9. #9 Michal Tuláček

    Kolikrat za sebou se ten test provadel? Je to vysledek jednoho mereni a nebo prumer s vyhozenim viditelne nahodilych hodnot?

  10. #10 Radek Hulán autor webu ▲10 ▼0

    [9] vše je to v článku napsané... je potřeba lépe a pozorněji číst.

  11. #11 Michal Tuláček

    [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á...