Hlavní navigace

Výkon databáze na různých souborových systémech

19. 10. 2015
Doba čtení: 5 minut

Sdílet

Který souborový systém mám použít pro produkční server, na kterém poběží PostgreSQL? Tuto otázku si klade řada správců serverů, ale ptají se na to i zákazníci nebo začátečníci rozhlížející se po světě serverů. Je v tom vůbec nějaký rozdíl? Vyplatí se řešit výhody různých systémů či jejich parametrů?

Běžná otázka zákazníků při nasazování aplikací je, jaký souborový systém mají nasadit na provoz databáze. Obvyklou odpovědí je něco jako: „my máme benchmarky z roku 2003 a podle nich…“ Takový přístup naprosto ignoruje vývoj, který je ohromně rychlý. V roce 2003 tu z pohledu souborových systémů byli ještě dinosauři, začal svou přednášku na LinuxDays Tomáš Vondra. Dlouhodobě se zabývá návrhem a správou databází a snaží se změřit dopady různých souborových systémů, které se velmi rychle vyvíjí a v posledních letech nabízí mnoho různých novinek. Stejně tak podle Vondry velkou revoluci znamenala SSD úložiště, která mají úplně jiné parametry než rotační disky a kdo dnes nenasazuje flashové disky, dělá obrovskou chybu.

Čtěte: SSD na serveru: výhody, zkušenosti a mýty

Moderní souborové systémy jsou vyzrálé, mají moderní funkce a jsou schopné využít výhod nových úložišť. Mezi běžné zástupce patří Ext3/4 nebo XFS, které mají tradiční design a jsou velmi spolehlivé. Jejich nevýhodou je, že je třeba nasazovat další komponenty na provoz na více fyzických discích, LVM nebo správu snapshotů. To je tradiční přístup, ale zvyšuje komplexitu řešení a propojení samostatných komponent neumožňuje provádět některé věci jednoduše.

Tomáš Vondra, LinuxDays 2015

V posledních deseti letech se prosazují nové souborové systémy jako ZFS nebo Btrfs, které mají výrazně odlišný návrh a už dnes jsou vlastně prověřené časem a provozem, protože dávno nejde o žhavou novinku. Integrují různé vrstvy, čímž zjednodušují správu. Navíc jsou připravené na běžný hardware, na kterém jsou chyby běžné. Součástí linuxového jádra je Btrfs, které podle Vondry ale zatím není připraveno na produkci, i když ho některé distribuce už používají jako výchozí. Proti tomu ZFS je prověřené a velmi stabilní, ale je potřeba ho doinstalovat jako samostatný modul distribuovaný pod licencí CDDL, která je nekompatibilní s GNU GPL.

Souborové systémy nabízejí celou řadu optimalizačních voleb, které mají větší či menší dopad na výkon na nich nainstalovaných databází. U Btrfs je možné například vypnout podporu copy-on-write (CoW), což zvýší výkon, ale přijdete například o kontrolu integrity pomocí kontrolních součtů. Dále je možné nastavovat volby určené speciálně pro SSD. Bohužel v dokumentaci se nepíše, jaké volby to jsou. Kromě toho umí Btrfs spekulativní kompresi, která se zapíná jen na datech, na kterých to má smysl.

U ZFS je možné měnit velikost stránky, ovlivnit práci se ZIL nebo natavit omezení velikosti vlastní ARC cache. Pozor na nastavování cache, PostgreSQL výrazně závisí na cache implementované v souborovém systému. Velikost paměťové stránky může také ovlivnit výsledek, důležité je vědět, že PostgreSQL interně používá 8KB stránky, které je možné nastavit i na souborovém systému.

Tomáš Vondra pak představil vlastní benchmarky, které prováděl na počítači se čtyřjádrovým Intel i5, 8 GB RAM, SSD Intel, distribucí Gentoo a PostgreSQL 9.4. Při testech používal nástroj pgbench, který se snaží udělat co nejvíce různě velkých transakcí. Tento provoz se dá přirovnat k jednoduché webové aplikaci, kdy si uživatelé zobrazují jednotlivé články. Je možné také volit objem dat: od malého (200 MB), přes střední (50 % RAM) až po velký (200 % RAM). U malých velikostí prakticky nehraje roli IOPS, protože je vše v cache. Je možné provést různé mixy testů, při kterých si otestujete čtení, zápis a různé varianty zátěže. Zatím mám otestováno asi 40 kombinací nastavení a souborových systémů a každý benchmark běžel přibližně čtyři dny. Veškerá data jsou k dispozici na gitovém repozitáři.

Při read-only testech na malých datech se stírá rozdíl mezi souborovým systémem jednoduše proto, že se s disky vůbec nepracuje. Pokud máte malou databázi a jen z ní čtete, vůbec vás souborové systémy nemusí zajímat.

U velkých dat se k diskům už začne přistupovat a objeví jisté rozdíly. Například ZFS ve výchozím stavu vůbec neškáluje a má obrovské problémy. Stačí ale nastavit velikost bloku na 8kB a situace se výrazně změní. Btrfs je na tom velmi podobně jako takto nastavené ZFS a vypnutím CoW dojde k malému zlepšení. Celkově si ale souborové systémy při čtení vedou velmi podobně.

Při zápisech už jsou rozdíly výrazně větší, protože databáze musí čekat na to, až souborový systém vrátí informaci o tom, že data byla bezpečně zapsána. Úplně nejlépe v těchto testech dopadají Ext4 a XFS, pokud je dobře nastavíte. Tomáš Vondra udělal na vyžádání také testy s ReiserFS, který dopadl mírně hůře. Ukazuje to, že takový ten hype kolem tohoto souborového systému byl zbytečný.

Při čtení i zápisu velkých dat jsou rozdíly už obrovské a například ZFS už začíná zaostávat. I když jsem se snažil ZFS vyladit, stejně jsem nedostal ani polovinu výkonu proti Ext. Je to daň za vlastnosti tohoto souborového systému, který si dává záležet na konzistenci dat. Vondra sám říká, že to pro něj bylo zklamání.

Tyto testy ukazují jen na datovou propustnost souborového systému, ale nezohledňují variabilitu jednotlivých transakcí. Máte sice velký výkon, ale velmi záleží na jednotlivých transakcích: některá trvá milisekundu, jiná deset. Vy ale chcete pokud možno rovnoměrné rozložení. To vám říká, že databáze každou sekundu vyřídí konstantní množství transakcí. S tím má typicky problém copy on write souborový systém Btrfs, kterému pravidelně padá výkon a databáze čeká. Při vypnutí CoW se situace zlepší, proti tomu ZFS podává už ve výchozím stavu lepší výsledky. Nejlépe podle očekávání opět dopadly jednoduché souborové systémy Ext4 a XFS.

root_podpora

Souborové systémy Ext4 a XFS podávají prakticky stejné výkony, liší se jen minimálně a dá se to pravděpodobně ještě změnit ještě pomocí konfigurace. Ext4 nabízí vyšší propustnost, ale má vyšší rozptyl latencí; XFS má síce mírně nižší propustnost, ale podává stabilní výkony. Zásadní vliv mají „write barriers“, ale při jejich vypnutí je třeba mít dobré disky a RAID řadiče. Naopak menší vliv má TRIM, ovšem u něj zase záleží na typu disku a především jeho zaplnění. Pokud benchmark disk nezaplní a výrobce SSD nechává ještě kapacitní rezervu, dokáže se řadič vyrovnat i s vypnutým TRIM.

Přímé porovnání Btrfs a ZFS je zase závislé na CoW technikách, které znamenají přibližně poloviční výkon. Z hlediska výkonu je stále lepší kombinovat LVM a jednoduchý souborový systém jako Ext4 nebo XFS. ZFS je sice v linuxovém jádře trochu vetřelcem, ale je podle Vondry značně vyzrálejší než Btrfs. Všechny problémy, které jsem při testech měl, jsem měl s Btrfs. Má značně nestabilní a nekonzistentní chování, které nechci vidět na produkčním serveru.

Odkazy

Byl pro vás článek přínosný?

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.