Ono pro relační databázi není moc příležitostí jak je využít. I to anoncované použití je mikrooptimalizace, která dává pár procent ve specializovaných best case benchmarcích. To, co můžete urychlit v databázi s řádkovým uložením dat je počítání kontrolních součtů, porovnávání řetězců a operace nad UTF8 kódováním. Kontrolní součty jsou hw akcelerované už delší dobu, porovnání stringů dělají externí knihovny, a teď se optimalizovaly i operace nad UTF8. V relačních databázích se většinou nepracuje s tak dlouhými stringy aby se vám vyplatilo použití SIMD instrukcí. Něco jiného jsou analytické in memory sloupcové databáze jako je např. MonetDB. Ale to jsou databáze absolutně jiného typu než je Postgres. Postgres - optimalizace na kombinaci multi uživatelský SELECT/UPDATE - data jsou primárně na disku, Monet - optimalizace na jednouživatelský SELECT (agregace), data jsou primárně v RAM (a více méně omezená RAM).
SIMD se zavedly pro podporu zpracování obrazu, videa, náročné numerické výpočty, maticové výpočty. Co z toho děláte v relační transakční databázi?
V GoodData jsem viděl, že JIT některé dotazy zrychlovalo o 30% na jedno CPU. JIT v Postgresu aktuálně optimalizuje jen výrazy, takže vám signifikantně pomůže jen tehdy, pokud používáte dlouhé komplexní výrazy - stovky CASE větví atd. V multidimenzionální analýze se takové dotazy objevují. Pokud multidimenzionální analýzu neděláte, tak se s tím nesetkáte. Těch 30% je na jedno CPU, pokud se použije více n CPU, tak je benefit zhruba 30/n %. Podpora JITu zdaleka není hotová - chybí cacheování přeloženého kódu, chybí JIT executoru. Sám JIT má ale dost velký (a někdy patogický overhead).
K tomu JITu bych jen posnul tento link:
Já dělal na jiné DB, kde SIMD pomohl hodně, ale byla to úplně jiná architektura. Ono když pro zpracování jednoho řádku se provede 100 volání nějakých pomocných funkcí, tak SIMD opravdu nedává smysl. Ale zpracovat třeba několik řádků současně, pokud to jde, to už smysl dává.
MonetDB, Vector Wise (dneska Actian Vector) jsou databáze, které už jsou optimalizované na CPU. MonetDB je klasika. Tam to pomáhá. Jde ale o úplně jinou architekturu - sloupcové uložení dat a také o jiný typ zátěže OLAP x OLTP.
V rámci výzkumu se zkouší hromada věcí, které se pak někdy přetransformují do startupů, v OLTP tam žádný extra progres není. Zkoušelo se, zkouší se např. využití grafických karet, ale nevím o žádném projektu, který by v OLTP udělal díru do světa. Něco jiného je analytika (OLAP), ale to je úplně jiný svět, úplně jiný typ zátěže.
17. 9. 2023, 18:20 editováno autorem komentáře
Ještě doplním - režie se implementací optimalizujícího planneru, zajištění perzistence dat a implementace ACIDu má ohromnou režii - jedno jestli je to MySQL, PostgreSQL nebo Oracle nebo MSSQL. Rychlost čtení dat z in memory databáze, která má jednoduchý protokol může být o řád nebo dva řády rychlejší - viz výkon Redisu nebo memcached.