Mysql Query Cache Tuning

05/06/2006 by - Linux, Mysql

Utilizzo e tuning della Query Cache

mysql

Autore Boyd Hemphill , libera traduzione di Tenivella Enrico.

Mysql implementa un meccanismo per cashare i risultati delle query al fine di poterli riutilizzare senza interrogare di nuovo il DB. Questo meccanismo e’ estremamente utile quando una appz utilizza massivamente le stesse query.

Parametri di configurazione:

Il file di configurazione my.cnf contiene le direttive per settare tutte le opzioni che interagiscono col meccanismo di cache.

Prestare attenzione a query_cache_size e query_cache_type.

have_query_cache

* Indicates that the server supports the query cache
* Specified as Boolean (YES or NO)
* Available as of 4.0.2

query_cache_limit

* Maximum size of a cacheable result set
* Specified in megabytes
* Available as of 4.0.1

La query cache e’ stata introdotta per poter cachare il numero di query maggiore possibile, non il risultato delle query piu’ corpose. Dovrebbe essere settato ad un valore relativamente basso

query_cache_min_res_unit

* Minimum block size of the query cache
* Specifed in kilobytes
* Available as of 4.1

query_cache_size

* Memory allocated to the query cache
* Specified in megabytes
* Available as of 4.0.1

Se il valore impostato e’ 0 il caching e’ disabilitato. Se il valore e’ > 0 ma la direttiva query_cache_type e’ 0 oppure OFF, la memoria dedicata al caching viene utilizzata ma non viene effettivamente letta dal mysql

query_cache_type

* Sets the query cache state
* Specified as an integer (0,1,2)
* Available as of 4.0.3

Se e’ impostato a 0 non viene messo nell cache nulla, ma la memoria dedicata viene lo stesso sporcata(wasted)

Se e’ impostato a 1 i risultati della query con dimensione minore di query_cache_limit vengono cachati, a meno che la query non contenga la direttiva SQL_NO_CACHE

Se e’ impostato a 2 i risultati della query con dimensione minore di query_cache_limit vengono cachati, a meno che la query contenga la direttiva SQL_CACHE

query_cache_wlock_invalidate

* Controls locking aspects of tables with rows in the cache
* Specified as integer value of 1
* Available as of 4.0.19
* Specific to MyISAM

Se le tabelle interrogate stanno subendo operazioni e sono in stato di “lock” settando questo parametro a 1 i risultati in cache vengono eliminati e non si ha il rischio di ottenere risultati non piu’ validi.

Abilitare la Query Cache

Per abilitare la cache query basta settare :

query_cache_type a 1 oppure 2
query_cache_size > 0

E’ importante settare correttamente entrambi i parametri, altrimenti si rischia di allocare memoria che non verra’ utilizzata.

Mysql necessita di un minimo di 40Kb di memoria per poter avviare il meccanismo di cache. Se non ce’ abbastanza memoria nel file di log viene inserito un warning

Tuning Query Cache

* FLUSH QUERY CACHE > deframmenta la struttura della memoria, non elimina nessuna query nella cache

* RESET QUERY CACHE > svuota la cache

* SHOW STATUS LIKE ‘qcache_%’ per vedere le statistiche

Qcache_lowmem_prunes -> contiene il numero di query e results sets rimossi dalla cache per far posto a nuovi dati.
Per verificare in generale l’efficienza della cache query si dovrebbe far riferimento a quel valore, se cresce costantemente nel tempo la cache memory non sta fornendo un servizio utile ai fini della velocita’ e dovrebbe essere disabilitata.

Se i valori di Qcache_hits e Qcache_lowmem_prunes crescono rapidamente, bisognerebbe aumentare la query_cache_size

Qcache_not_cached indica il numeri di query eseguite ma non messe in cache

In generale e’ dovuto al valore superato di query_cache_limit.

Aumentare la query_cache_limit puo’ essere utile, bisogna pero’ considerare il rapporto fra Qcache_hits e Qcache_lowmem_prunes, se scende e’ opportuno farlo.



Lascia un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.