MariaDB query cache a InnoDB

fos4

MariaDB query cache a InnoDB
« kdy: 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 :)
« Poslední změna: 28. 02. 2024, 14:56:02 od Petr Krčmář »


Re:MariaDB query cache a InnoDB
« Odpověď #1 kdy: 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.
« Poslední změna: 01. 03. 2024, 17:49:52 od Petr Gajdusek »

Re:MariaDB query cache a InnoDB
« Odpověď #2 kdy: 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.