Fórum Root.cz

Hlavní témata => Server => Téma založeno: fos4 28. 02. 2024, 13:59:02

Název: MariaDB query cache a InnoDB
Přispěvatel: fos4 28. 02. 2024, 13:59:02
Ahoj všichni,

obecná otázka, má smysl dneska ještě zapínat query cache na MariaDB/Mysql pokud jsou data pouze v InnoDB (a vlezou se do RAM) a jede to na vícejádrovém procesoru? Není zapnutí kontraproduktivní?

Na produkci jsem ji vypnul a nevidím žádné zhoršení (poměr read/write je 70/30). Na vývoji mám "on demand" ale vlastně je to hloupost, protože stejně se musí DB dívat do cache zda tam něco není (přičemž SELECT SQL_CACHE se v aplikaci nachází vyjímečně).

Jde mně o bottlenecky způsobené sdílením prostorem query cache.

Díky za odpovědi :)
Název: Re:MariaDB query cache a InnoDB
Přispěvatel: Petr Gajdusek 01. 03. 2024, 17:44:30
To záleží na workloadu. Pro časté a náročné selecty na málo se měnících tabulkách je cache výhodná. Někdy přímo mariadb query cache, někdy maxscale cache plugin, někdy proxysql query cache. Pokud nebudeme mluvit o úplně oddělených aplikačních non-sql cache jako např. redis nebo memcached.

MaxScale ani ProxySQL nemají problém s mutexy, ale proxysql neinvaliduje cache jinak než pomocí TTL (nebo ručně celou cache najednou), Maxscale invaliduje i po DML příkazech (update, insert, delete), ale nezachytí zápisy např. z triggerů nebo stored procedures.

on DEMAND query cache je často používaný kompromis.

mysql 8.0 query cache odstranilo, naproti tomu mariadb ji dále podporuje a vyvíjí. Pokud vím, např. nahradili globální mutex vícero lokálními rozpartišnováním cache, umožňující tak částečný paralelní workload.

30% je celkem vysoký poměr zápisu, jestli to jsou ty zápisy i selecty rovnoměrně rozloženy v čase, tak cachovat selecty nad dotčenými tabulkami má sotva smysl.
Název: Re:MariaDB query cache a InnoDB
Přispěvatel: Petr Gajdusek 01. 03. 2024, 17:56:17
Ještě jsi psal, že ti jde o bottleneck u sdílené cache, tak jen dodám, že MaxScale může mít shared cache nebo per thread.