Výsledky benchmarku na SSD - TPC-H

Podíváme-li se na srovnání SSD s tradičním pevným diskem v TPC-H části benchmarku, zjistíme že zvýšení výkonnosti je ještě menší než u read-write pgbench zátěže. Například při srovnání m-time (tj. času spotřebovaného pro vyhodnocení stejně naplánovaných dotazů, podrobněji je definováno v článku o výsledcích TPC-H benchmarku na standardním disku) vypadá na SSD s XFS situace takto

výkon XFS (m-time) se SSD diskem

zatímco na standardním rotačním pevném disku takto

výkon XFS (m-time) s tradičním diskem

tj. SSD disk je jen zhruba 1,5x rychlejší než tradiční rotační disk (což je výrazně horší výsledek než u read-only/read-write pgbenche kde byl nárůst 25x/13x). I pro SSD disk nicméně platí pravidlo že nejlepšího výkonu je dosahováno pro velké databázové bloky a velikost bloků souborového systému nehraje příliš zásadní roli.

Výsledky benchmarku / HDD + TPC-H

Minulý týden jsem stručně analyzoval read-only a read-write OLTP část benchmarku, nyní tedy tak přichází na řadu část benchmarku věnovaná DWH/DSS zátěži, založená na TPC-H benchmarku. Nebudu vás napínat, výsledky pro jednotlivé velikosti bloků jsou takovéto

m-score přes všechny souborové systémy

Podrobný popis definice a výpočtu m-score najdete v textu, pro tuto chvíli stačí vědět že vyšší hodnoty znamenají vyšší výkon. Z obrázku je jasně patrné že čím větší bloky (souborového systému i databáze), tím vyšší výkon při vyhodnocování dotazů.

Platí to ale i pro další činnosti obvyklé v DWH aplikacích, tj. load dat, vytváření indexů a cizích klíčů, sběr statistik apod.? A platí to pro všechny souborové systémy nebo existují výjimky?

Výsledky benchmarku / HDD + read-write pgbench

Minule jsem se zabýval výsledky read-only pgbench běhů, tentokrát je tak na řadě read-write zátěž. Průměrná hodnota tps přes všechny souborové systémy vypadá se zapnutými write bariérami takto

průměrný výkon s read-write zátěží a zapnutými write bariérami

Z obrázku je vidět že stejně jako v případě read-only zátěže platí že vyššího výkonu je dosahováno spíše s menšími databázovými bloky, a i tentokrát mezi 1kB a 32kB bloky cca 30%.

Výsledky benchmarku / HDD + read-only pgbench

V předcházejícím postu jsem se stručně zabýval výsledky benchmarku, zejména tomu jak interpretovat generované obrázky. Nyní se konečně dostávám k interpretaci první části výsledků, konkrétně read-only části OLTP zátěže (tj. výsledků read-only běhů pgbenche).

Srovnání TPS přes všechny testované souborové systémy (podrobné srovnání najdete zde), při vynechání XFS (jediný systém s blokem 512B, jen zbytečně komplikuje obrázek) vypadá situace takto

průměrná read-only tps přes všechny souborové systémy

Z obrázku je patrné že nejvyššího výkonu je dosahováno pro malé databázové bloky a velké bloky souborového systému. Závislost na velikosti bloku souborového systému ale není u všech souborových systémů stejně silná - u některých téměř neexistuje, u některých je relativně silná.

Velikost bloku filesystému vs. PostgreSQL

Nedávno jsem byl dotázán jak závisí výkon PostgreSQL na velikosti bloků filesystému a databáze, a zejména jak je to u SSD disků které mají interně 512kB bloky zatímco tradiční HDD mají sektory o velikosti 512B nebo 4096B.

Když podobná otázka padne v pgsql-peformance, standardní odpověď je "Použij 8kB, Luku!" s tím že 8kB je rozumný kompromis a volbou jiné hodnoty se nic moc nezíská. Ale skutečně je to tak? Platí to pro všechny souborové systémy? A platí to univerzálně pro různé typy zátěže? A mění na tom něco SSD disky? A jak je to vlastně s bloky souborového systému?

Zajímavé otázky na které bez pořádných dat nelze odpovědět ... prostě čas na benchmark!

1