News

MariaDB corregge una regressione InnoDB del 2020: fino a 2,8× di query in più

Una regressione nata con MariaDB 10.5 penalizzava i carichi InnoDB che stanno tutti in RAM. La patch è confermata per 11.8.10, 12.3.4 e 13.1.2.

Redazione UptimeMag · 28 ottobre 2026 · 2 minuti di lettura

MariaDB corregge una regressione InnoDB del 2020: fino a 2,8× di query in più

Chi gestisce un database MariaDB con un dataset che sta quasi tutto in RAM ha pagato, senza saperlo, una tassa nascosta dal 2020. Un'analisi tecnica pubblicata il 27 ottobre sul blog di MariaDB.org ricostruisce una regressione di prestazioni in InnoDB nata con la versione 10.5 e ora corretta.

Cosa è successo

Con MariaDB 10.5, Marko Mäkelä rimosse le istanze multiple del buffer pool InnoDB (MDEV-15058), passando a un'unica lista LRU e un unico mutex per l'intero server. L'intenzione era buona: in molti casi un buffer pool singolo si comportava almeno quanto istanze multiple. Ma un effetto collaterale di altre due modifiche dello stesso periodo ha finito per far scattare, molto prima del previsto, l'orologio interno che regola la gestione della lista LRU, costringendo anche i carichi che stanno interamente in memoria a pagare il costo della promozione delle pagine, mutex incluso.

Mark Callaghan, che esegue sysbench su ogni release di MariaDB e pubblica risultati e script, ha aperto la segnalazione nel 2024. Un test successivo con una SELECT su una lista IN di 100 valori sulla chiave primaria, 8 tabelle da 10 milioni di righe, 40 thread su 48 core, ha fotografato il crollo:

Versione QPS
10.4.34 73.106
10.5.29 29.832
10.7.8 29.104
10.8.8 76.104 (anomalia)
10.9.8 27.182
11.8.3 26.044
12.1.1 25.916

Il dato di 10.8.8 si è rivelato un falso segnale: quella release aveva un bug di perdita di pagine undo che teneva il buffer pool pieno, mascherando il problema per caso.

La correzione

La patch, discussa nel ticket MDEV-33966, toglie il mutex del buffer pool dalla promozione di una pagina al momento dell'accesso: la decisione viene registrata con un bit atomico, e lo spostamento effettivo nella lista avviene solo quando un altro thread ha già in mano il mutex per operazioni di flush o eviction. Nei test di Mark Callaghan il guadagno è stato di circa 2,8 volte, da 20.326 a 57.052 query al secondo; una seconda verifica indipendente, condotta da Jonathan Miller su un altro host, ha confermato miglioramenti ancora maggiori su 11.8, 12.3 e 13.1, con la versione 11.8 corretta che risulta circa 7-9% più veloce della vecchia 10.4.34 di riferimento.

Secondo il tracker ufficiale di MariaDB, la correzione è destinata alle release 11.8.10, 12.3.4 e 13.1.2. Chi è ancora su 10.5 non riceverà la patch: quella serie è fuori manutenzione dal 24 giugno 2025. La 11.8, dove il fix arriverà per primo tra le LTS, resta supportata fino a giugno 2028.

Per chi non può attendere la minor release, l'articolo originale indica anche un palliativo senza ricompilare: impostare innodb_old_blocks_time a un valore molto alto riduce la promozione delle pagine vecchie, ma funziona solo quando i dati stanno comunque nel buffer pool.

Testo redatto con il supporto dell'intelligenza artificiale e verificato dalla redazione (AI Act, art. 50).