La cache di MySql – Migliora la velocità delle query
29 Giugno 2017

La cache di MySql – Migliora la velocità delle query

Un comportamento intrinseco (se abilitato) di MySql, è la possibilità di cachare (passatemi l’italianismo) le query.

In questo modo, dopo aver eseguito la prima volta una query, questa verrà “memorizzata” internamente e alla prossima chiamata, noterete una bella differenza in termini di velocità. La prima cosa da fare è verificare che la vostra versione di MySql supporta la cache. Per fare ciò ci servirà una shell Linux nella quale dovremmo collegarci al nostro server MySql:

mysql -u NOME_UTENTE -p

In questo modo vi collegherete al server mysql che avete in locale. Se dovete collegarvi a un server remoto usate l’opzione -h. Dopo aver premuto invio vi verrà chiesta la password. A questo punto usiamo il seguente comando per verificare se la versione di MySql installata supporta la cache:

show variables like 'have_query_cache';

Se tutto va bene dovremmo avere un output del genere:

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| have_query_cache | YES   |
+------------------+-------+

Come vedete, dopo la variabile have_query_cache ci deve essere YES. Prima di procedere all’attivazione dobbiamo verificare che non sia già attiva (che di default potrebbe essere) e soprattutto che ci siano altri requisiti rispettati. Usiamo quindi il seguente comando:

show variables like 'query%';

risultato:

+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| query_alloc_block_size       | 8192     |
| query_cache_limit            | 1048576  |
| query_cache_min_res_unit     | 4096     |
| query_cache_size             | 0        |
| query_cache_type             | ON       |
| query_cache_wlock_invalidate | OFF      |
| query_prealloc_size          | 8192     |
+------------------------------+----------+

Non importa che tutti i valori siano uguali, ma quello più importante è query_cache_size. Se è impostato a 0 vuol dire che la cache è disabilitata. Vediamo quindi come attivare la cache. Dobbiamo dare un valore diverso da 0 a query_cache_size calcolando la dimensione della cache che vogliamo usare. Per usare ad esempio 64 Mb di cache faremo: 1024 * 1024 * 64 = 67.108.864. Una volta calcolato il valore che volete, usare i seguenti comandi:

SET GLOBAL query_cache_size = 67108864;
SET GLOBAL query_cache_limit = 1048576;
SET GLOBAL query_cache_type = 1;

Così facendo abbiamo attivato la cache per MySql ma rimane da attivarla nel file di configurazione dato che potremmo perdere tutto il lavoro fatto fin’ora se venisse riavviato il server. Aprite quindi il file di configurazione di Mysql. Per chi usa una distribuzione Debian, il file è /etc/mysql/my.cnf. Apriamo il file (io uso vim, ma va bene un qualsiasi editor di testo):

vim /etc/mysql/my.cnf

Identificate e valorizzate queste tre righe:

query_cache_size = 67108864
query_cache_type=1
query_cache_limit=1048576

Se non ci sono aggiungetele, se sono commentate togliete i marcatori dei commenti e mettete i valori che avete settato precedentemente.

Ora facciamo un controllo finale per vedere che tutto sia ben configurato e impostato. Eseguite il seguente comando (chiaramente dopo esservi collegati a MySql come indicato sopra):

SHOW STATUS LIKE 'Qc%';

Questo produrrà qualcosa del genere (chiaramente voi avrete i vostri valori):

+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Qcache_free_blocks      | 1        |
| Qcache_free_memory      | 16513176 |
| Qcache_hits             | 2571     |
| Qcache_inserts          | 142      |
| Qcache_lowmem_prunes    | 0        |
| Qcache_not_cached       | 590      |
| Qcache_queries_in_cache | 141      |
| Qcache_total_blocks     | 294      |
+-------------------------+----------+

Bene, tutto è andato a buon fine. Ora, ogni volta che eseguirete una query, questa verrà memorizzata così da accelerarne l’esecuzione per le chiamate successive, tutto in automatico!

 


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *