Perché query_cache_type è disabilitato di default a partire da MySQL 5.6?


28

Abbiamo effettuato l'aggiornamento a MySQL 5.6 e abbiamo iniziato a vedere un aumento significativo del caricamento del server db, e alla fine abbiamo scoperto che il query_cache_typedefault è spento a partire da 5.6.

L'abbiamo abilitato di nuovo e vediamo diminuire il caricamento, perché questo valore è disabilitato di default a partire da MySQL 5.6? Non riesco a vedere il problema abilitato.

Risposte:


39

Hai bisogno della storia di InnoDB per capire il perché. Eccolo:

STORIA DELLA GUERRA

InnoDB e la cache delle query sono in costante stato di guerra. InnoDB tende ad essere molto pesante quando si ispezionano le modifiche nel pool di buffer InnoDB e si esegue il controllo incrociato della cache delle query per le stesse modifiche.

TRATTATO DI PACE

Prima di MySQL 5.0, la cache delle query era disabilitata per InnoDB. Ora, InnoDB interagisce con esso. Per semplificare le cose, puoi semplicemente disabilitare la cache delle query impostando query_cache_size su 0.

Secondo la documentazione MySQL su query_cache_time

Se il server viene avviato con query_cache_type impostato su 0, non acquisisce affatto la cache della query mutex, il che significa che la cache della query non può essere abilitata in fase di esecuzione e si riduce l'overhead nell'esecuzione della query.

CONDIZIONI DEL SOSTENITORE

L'impostazione di query_cache_size su 0 non è una soluzione adatta a tutti.

Il motivo della guerra, in primo luogo, è il sovraccarico. InnoDB controllerà sempre le modifiche. Una cache di query più grande renderà InnoDB molto più difficile. Disabilitando la cache delle query, InnoDB e Query Cache saranno felici. Tuttavia, tu (lo sviluppatore / DBA) potresti essere una vittima di quella guerra con cattive prestazioni di interrogazione, anche con un simile trattato di pace in atto.

A seconda di quanto segue

  • Carico di lavoro
  • Frequenza delle modifiche
  • Frequenza di lettura degli stessi dati

dovresti impostare query_cache_size sul numero che ritieni aumenti le prestazioni (equivale a iniziare un movimento clandestino).

EPILOGO

Nel caso ti stia chiedendo dove mi sia venuta in mente questa storia di guerra, per favore vedi il mio vecchio post

Leggilo attentamente perché l'ho imparato dalle pagine 209-215 di MySQL ad alte prestazioni (2a edizione)

Ho consigliato di disabilitare la cache delle query ad altri prima

NOTA: mi rendo conto che la domanda riguardava query_cache_type . Ha un effetto sulla cache delle query. La disabilitazione della cache schiaccia il dominio di InnoDB su di essa. L'impostazione manuale di query_cache_type forza semplicemente lo sviluppatore / DBA a riflettere attentamente sul tipo di query che la cache delle query incontrerà.


Ciao, ho letto tutti i tuoi link. In realtà ho provato a disattivare di nuovo la cache delle query e il caricamento aumenta di nuovo in modo significativo, quindi è necessario riaccenderlo. Non sto dicendo ciò che dici sia sbagliato, forse solo la nostra applicazione è letta pesantemente e la cache delle query è molto utile per ridurre il caricamento .. (Il nostro sito esegue WordPress)
Yoga

3
Se solo più post SO leggessero così (grazie per la divertente analogia)! Scommetto che i bambini fortunati di Rolando ricevono storie sulla buona notte di MySQL come questa ogni notte! ;)
rinogo,

2
"Pagine 209-215 di MySQL ad alte prestazioni (2a edizione)" si riferisce a un capitolo chiamato "La cache delle query MySQL", da "Quando la cache delle query è utile" e fino alla fine. Ciò corrisponde alle pagine 320-329 della 3a edizione.
Peter V. Mørch,


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.