MySql, come sappiamo, è un sistema di gestione dei database, utilizzato da buona percentuale dei siti web dinamici. Quando un linguaggio dinamico esegue delle query nei database MySql impiega ovviamente qualche millisecondo, se non di più. Durante questa operazione interpella direttamente il database. Ma se le informazioni risiedessero in un posto più veloce da interpellare, più veloce da trovare?
Abilitando la funzione di cache presente nativamente in MySql è possibile memorizzare le query nella memoria del computer, in questo modo il tuo sito web sarà più veloce in quanto le query sono già state eseguite e memorizzate e non dovrà ri-eseguirle.
Verifichiamo che il nostro MySql supporti la cache
MySql implementa nativamente una funzione per la cache, che richiede pochi e veloci passaggi per essere attivata. Innanzitutto apri il prompt dei comandi di Linux o Windows (Start>Esegui>Cmd) e collegati a MySql in questo modo:
mysql -u UTENTE -p
Al posto di UTENTE metti il nome utente che usi per accedere a MySql. Quindi ti uscirà la scritta Enter Password: e dovrai inserire la password del relativo utente.
Prima di attivare la cache dobbiamo verificare che la versione di MySql che hai supporti la cache (al 95% dovrebbe supportarla, altrimenti dovrai scaricare l’ultima versione), quindi, una volta collegati a MySql, scriviamo il comando:
show variables like ‘have_query_cache’;
E avremo la seguente risposta (ci deve essere YES dopo have_query_cache):
+——————+——-+
| Variable_name | Value |
+——————+——-+
| have_query_cache | YES |
+——————+——-+
A questo punto sappiamo che la cache è supportata e, prima di attivarla, dobbiamo verificare che non sia già attiva e anche che siano presenti tutte le impostazioni necessarie, quindi eseguiamo quest’altro comando:
show variables like ‘query%’;
E avremo la seguente risposta
+——————————+———+
| 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 |
+——————————+———+
Se qualche numero è diverso non c’è problema. Il dato più importante qui sopra è query_cache_size, se è 0 significa che la cache è disattivata.
Attiviamo la cache
Dopo aver verificato di avere i requisiti per attivare la cache di MySql dobbiamo innanzitutto dare un valore in bytes diverso da 0 a query_cache_size, che sarebbe la dimensione della cache. Quindi facciamo il calcolo 1024 * 1024 * (numero di megabyte che vogliamo). Ad esempio 1024 * 1024 * 8 = 8388608 = 8mb. Ed eseguiamo questo comando
SET GLOBAL query_cache_size = 8388608;
La risposta sarà Query Ok, 0 rows affected. In caso di risposta contraria allora avere sbagliato a copiare qualcosa.
Ora eseguiamo altri due comandi meno importanti, uno dopo l’altro. Query_cache_limit è il massimo di query in bytes di cui vogliamo eseguire la cache mentre query_cache_type indica il tipo di cache che va sempre messo su 1.
SET GLOBAL query_cache_limit = 1048576;
SET GLOBAL query_cache_type = 1;
La risposta sarà sempre Query Ok
Attiviamo la cache nel file di configurazione di MySql
Abbiamo attivato la cache per MySql, ma le informazioni potrebbero andare perse dopo un riavvio o qualcos’altro se non aggiorniamo anche il file di configurazione dei nostri database. Questa operazione la puoi fare anche col MySql Workbench Tool, una volta entrato nel tuo server instance, dentro il pannello Options file e quindi dentro la sezione Performance trovi le varie opzioni della cache nel file di configurazione.
Qualunque mezzo tu utilizzi, il metodo più artigianale e veloce è quello di modificare direttamente il file di configurazione di MySql con un semplice editor di testo (es. Blocco Note in Windows). Una volta trovato il tuo file my.cnf o my.ini (di solito si trovano dentro la cartella MySql che si trova dentro la cartella dei Programmi). Una volta entrato, dovrai cercare le tre opzioni seguenti, se esistono e sono commentate con il cancelletto eliminalo, se non esistono aggiungile alla fine del file.
query_cache_size = 268435456
query_cache_type=1
query_cache_limit=1048576
Ovviamente i valori potrebbero essere diversi nel tuo file, se tali opzioni già esistono.
Controlliamo che la cache sia attiva
Sempre dal MySql Workbench Tool esiste una statistica chiamata MySql Cache Hit Rate, se la percentuale è superiore a 0% allora la cache sta funzionando. Altrimenti esiste un comando da inserire nel prompt dei comandi che ti restituisce tutte le statistiche della cache e da esse puoi verificare se essa sta funzionando. Il comando è il seguente (dovrai ovviamente essere collegato a MySql)
SHOW STATUS LIKE ‘Qc%’;
La nostra risposta è stata la seguente
+————————-+———-+
| Variable_name | Value |
+————————-+———-+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 26774672 |
| Qcache_hits | 129621 |
| Qcache_inserts | 73761 |
| Qcache_lowmem_prunes | 20270 |
| Qcache_not_cached | 2899 |
| Qcache_queries_in_cache | 2674 |
| Qcache_total_blocks | 5387 |
+————————-+———-+