Reaguji na to co napsal Tomáš Crhonek.
Pod pojmem SSD Samsung pro mi to najde jen tohle
https://www.alza.cz/samsung-990-pro-1tb-d7516911.htmCož není ani serverový disk. Já používám tohle
https://www.alza.cz/wd-red-sn700-nvme-1tb-d6998050.htmKapacita 1TB, životnost 2000TBW. Tedy disk lze cca 2000 krát přepsat. Dříve to byly disky s kapacitou 512 GB s životností cca 600 TBW. Všechny disky vydržely to co měli v popisu.
Oni jsou to ale dva různé problémy. Jeden problém byl v tom, že ZFS mělo v mém případě více jak desetinásobnou write applification oproti tomu, jakou by mělo mít dle všech pouček a návodů.
To jsem nyní vyřešil přechodem z Linuxu na FreeBSD. Tam to na stejném hardware a při stejném zatížení prostě nedělá. Přechod na FreeBSD má i další podstatné výhody, např. že mi přijde že ve FreeBSD je vše jednodušší a lépe zdokumentované, tedy nemám už potřebu příliš zkoumat, kdy přesně a proč se to násobné zapisování v Linuxu vyskytuje.
Druhý problém na který jsem narazil a který z prvním souvisí jen okrajově a o kterém je tohle vlákno je ten, že při defaultním nastavení innoDB jsou zápisy více jak 10 krát pomalejší než než u defaultního nastavení MyISAM.
Výsledek je, že když importuji CSV soubor do nové databáze se 264 milióny záznamy, tak na to místo dvou hodin potřebuji celý víkend. Rozdíl je možné srovnat vhodným nastavením innoDB. Změna nastavení nespočívá ve vypínání sync!
Pokud by zkombinoval
ZFS write amplification a neoptimální nastavení databáze, zničí to v mém provozu pravděpodobně i ty nejlepší disky a poběží to pomaleji, než kdyby databáze jela na deset let starém hardware. Řešit to lepším hardware je nesmysl.
MySQL/MariaDB neumožňuje vypnout sync, píše se, že tato možnost je jen pro testování. To bych mohl vypnout jen nastavením ZFS, aby ZFS sync jen předstíralo. Což ale není nutné i když u repliky databáze by to nijak nevadilo, ta se dá za pár minut nahodit znovu z posledního snapshotu.
Ostatní změny nastavení InnoDB konzistenci dat tak zásadně neohrožují. Např. z toho, že se provádí automatický comit po každém jednotlivém přidání záznamu, žádná výhoda neplyne, jen je vše mnohonásobně pomalejší.
Např. zde je návod jak nastavit InnoDB pro monitoring hovorů. Nastavení je docela brutální, ale brutálně to také zvýší propustnost a sníží zápisy na disk. S tímto nastavením to zvládá ukládat více jak 15 000 hovorů za vteřinu (CPS =calls per second). A to každý hovor vyžaduje více záznamů!
https://www.voipmonitor.org/doc/Scaling#SSDsZe zkušenosti vím, že pravděpodobnost, že budou data po výpadku elektřiny nebo pádu kernelu poškozena i při tomto nastavení, není velká.
Jaký přesně mají vliv jednotlivé parametry, i když je to věc naprosto zásadní, zůstává nedokumentováno.
Budu nucen si to nějak vyzkoušet např. vypínáním elektřiny nějakému klonu a zvolit vhodný kompromis.
V případě poškození dat je vždy možné se vrátit v čase 5 minut a začít od posledního snapshotu, což není žádná katastrofa. Navíc zápisy v mezičase budou uchovány na klonech, tedy je možné je doplnit později.
Kdykoli čtu srovnání MyIsam a InnoDB, vždy se píše o výhodách InnoDB, ale to že je v InnoDB defaultně cca 10 krát pomalejší pro zápis, v podstatě vždy zapomene propagátor zmínit. Porovnávám výkon v defaultní konfiguraci. InnoDB je možné zrychlit na úroveň MyISAM, ale důsledky pro bezpečnost dat nejsou řádně dokumentovány. To je pro mne dost překvapivé, když jedním z hlavních výhod InnoDB má být lepší bezpečnost dat a fakt, že se tabulky opraví sami, rychle a plně automaticky.