1.6.2018
Testy výkonu MySQL

Na začátku roku se médii prohnala vlna alarmujících zpráv, že je v procesorech Intel vážná bezpečnostní chyba, jejíž oprava na SW úrovni bude stát cca 35% výkonu. Zajímal nás dopad na naši infrastrukturu a jelikož SW, který nejvíce zatěžuje všechny systémové prostředky v našem nasazení, je MySQL, rozhodli jsme se porovnávat výkon právě tohoto SW.
Kromě snahy zjistit vliv oprav Meltdown/Spectre na výkon se nám dostal do rukou i nový HW osazený hned dvěma CPU Intel Xeon E5-2640 v4 @
2,40 GHz s 10 jádry, tak nás samozřejmě zajímal nárůst výkonu oproti současným E3-1270 v6 @ 3,8GHz se 4 jádry/8 vlákny, které pohání poslední generaci Xenů. A jelikož měření probíhala na různých konfiguracích VM a různém nastavení testů, vypadla nám i další zajímavá srovnání.
Než se dostanu k jednotlivým tabulkám, popíšu čím, jak a co jsem testoval, a jak interpretovat výsledky.
Benchmark a testovací parametry
Testovalo se pomocí nástroje sysbench, který je součástí epel repozitáře pro CentOS. Základní podoba příkazu vypadá takto:
sysbench –mysql-socket=/var/lib/mysql/mysql.sock –mysql-user=root –mysql-password=heslo –db-driver=mysql –table_size=5000000 –threads=$THREADS –time=20 /usr/share/sysbench/test.lua run
K dispozici jsou následující předpřipravené testy:
- oltp_insert.lua
- oltp_point_select.lua
- oltp_read_only.lua
- oltp_read_write.lua
- oltp_update_index.lua
- oltp_update_non_index.lua
- oltp_write_only.lua
- select_random_points.lua
- select_random_ranges.lua
- oltp_delete.lua
Benchmarku lze nastavit následující parametry:
- table_size – počet řádků v testovací tabulce. Všechny testy vždy probíhaly nad 5000000 řádky
- time – doba, po kterou test běžel. Pro všechny testy byla vždy nastavena hodnota 20 s
- threads – v kolika vláknech se generovaly dotazy. Tato hodnota se v různých testech lišila
- test – konkrétní test. V každém testovacím cyklu vždy proběhla kompletní sada testů výše
Další proměnné ve hře byly HW konfigurace fyzického serveru a testovací VM. Testovací VM měla vždy 8 GB RAM, 10 GB disk, Mysql 5.7.18 a CentOS 6.9. Měnil se počet virtuálních jader a VM se migrovala mezi xen71 (E3-1270 v6 @ 3,8GHz se 4 jádry/12 vlákny) a testovacím xen33 (E5-2640 v4 @
2,40 GHz s 10 jádry).
Metodika a výstup testování
Testování spočívalo v tom, že se na začátku každého testovacího cyklu smazala testovací data, vytvořila nová (vždy 5 mil. řádků), a následně se sekvenčně spustilo všech 10 testů, vždy ve stejném pořadí. Každý test běžel 20 sekund a výsledkem byl počet operací (dotazů/transakcí), které daná konfigurace za daný čas zvládla. Vyšší číslo tedy znamená lepší výsledek. Tato čísla se pak porovnávala.
Zásadní nedostatek z hlediska statistiky je, že nebyla každá konfigurace testována vícekrát, takže hrozí zahrnutí extrémních hodnot do výsledků a nelze určit chybu měření. Na druhou stranu, VM byla vždy před každým cyklem rebootována, byl vygenerován výchozí testovací dataset a na hostujícím xenu nikdy neběželo nic jiného, tak věřím, že pro orientaci jsou data dostatečná.
Struktura tabulek
Každá tabulka představuje porovnání dvou testovacích cyklů na dvou různých konfiguracích. V nadpisu tabulky je obecně popsané, co srovnání zobrazuje, v záhlaví pak detail konfigurace VM. Obecně xC-yT v záhlaví říká, že daná konfigurace měla x virtuálních jader a benchmark běžel
v y vláknech.
V řádcích jsou testy, jejich výsledky ve dvou konfiguracích a poslední sloupec každé tabulky zobrazuje, o kolik procent se liší druhá konfigurace od první. Pokud je číslo kladné, jde o zlepšení, pokud záporné, výkon se zhoršil. První konfigurace je vždy základ 100%.
Pokud tedy máme v prvním sloupci výsledek A a v druhém výsledek B, delta je počítána vzorcem (B/A-1)*100
Testy
Výkonostní dopad patchů Meltdown/Spectre

Tento test byl proveden na E3-1270 v6 @ 3,8GHz před aplikováním patchů na Meltdown/Spectre a po aplikaci.
Je vidět, že větší dopad na výkon mají patche pouze u write only testu.
Přímé porovnání výkonu E3-1270 v6 @ 3,8GHz a 2 x E5-2640 v4
@ 2,40 GHz

Tento test ukazuje, že MySQL umí využít více jader. Nárůst výkonu v poměru k počtu jader ale rozhodně není 1:1. Dalším aspektem je cena, která je
v případě dvou desetijader víc jak 5x vyšší.
Škálování CPU při použití Hyper threadingu na CPU s malým a velkým počtem jader

Zde je vidět, že na 4 CPU HT výkon zvýší. Na dvacetijádru už je ale režie tak vysoká, že to výkon výrazně degraduje.
Výkon MySQL pod vysokou zátěží

Zde jsme zkusili zatížit MySQL dvojnásobným počtem vláken než je počet CPU na obou konfiguracích. Výsledky ukazují, že CPU mají slušnou výkonovou rezervu.
Dopad na výkon, pokud se VM přiřadí všechna fyzická jádra

Nepsané pravidlo doporučuje nepřiřazovat VM všechna dostupná fyzická CPU jádra. Tento test ukazuje, že se zápisové operace zhorší. Hypervisor nemá dostatek výkonu na virtualizaci. Pokud by na hostu konkurovalo více VM, byl by propad ještě větší.