MySQL Tuning
Con l’installazione di default la configurazione del servizio mysql viene impostata ad un livello “standard” che va piu’ o meno bene su tutti i server.
In questo articolo vedremo come ottimizzare il valore associato alle variabili presenti nella configurazione, ottimizzandola in base alla memoria e all’hardware disponibile sul nostro server.
key_buffer_size
Indica la quantita’ di indici (i file con estensione MYI) delle tabelle di tipo MYISAM mantenuti in memoria.
L’ideale sarebbe quello di poter contenere in RAM tutti i file di questo tipo.
Il valore attribuito a questa variabile non deve superare la meta’ di tutta la RAM dedicata al servizio mysqld.
Se non potete mettere in memoria tutti i file MYI potrete fare questa ottimizzazione:
Accedete nella console di mysql ed eseguite questa query
show status like ‘%key_read%’;
Dividete il valore di key_read_requests per key_read;
Il risultato deve essere maggiore di 100.
Si imposta nella sezione [mysql] ad es.
[mysqld]
key_buffer_size = 64M
table_cache
Quando mysql accede ad una tabella, la carica in cache. La migliore delle situazioni sarebbe quella di avere una cache talmente grande da contenere
tutte le tabelle aperte in un dato momento.
Per verificare quante tabelle sono aperte in un determinato istante eseguiamo questa query
show status like ‘open_tables’;
Analizzando questo valore nel tempo, possiamo valutare i picchi massimi
Possiamo verificare anche quante tabelle sono state aperte dall’esecuzione del servizio mysql
show status like ‘opened_tables’;
Avremo modo cosi’ di capire se open_tables e’ “attendibile” oppure momentaneamente superiore/inferiore alla media.
Si imposta nella sezione [mysql] ad es.
[mysqld]
table_cache = NUMERO
thread_concurrency
Questa variabile limita il numero di thread avviati simultaneamente. Il valore da impostare e’ questo
2 * (numero di CPU)
Si imposta nella sezione [mysql] ad es.
[mysqld]
thread_concurrency = 4
read_rnd_buffer_size
Viene utilizzata a seguito di una query che prevede un ordinamento delle righe, il classico ORDER BY per intenderci.
E’ consigliabile impostare 1Kb per ogni MB di memoria destinata al servizio mysqld.
Si imposta nella sezione [mysql] ad es.
[mysqld]
read_rnd_buffer_size = 256k
tmp_table_size
Il valore associato a questa variabile indica la dimensione massima delle tabelle temporanee create in memoria.
Si riferisce alle tabelle di tipo MyIsam e quando e’ insufficente la tabella verra’ creata sul disco, con conseguente perdita di performance.
Eseguendo questo comando
mysqladmin -uroot -pPASSWORD processlist -i1
si puo’ verificare se ci sono tabelle temporanee gestite lentamente. Se dovesse essere questo il caso, e’ necessario (memoria permettendo) aumentare tmp_table_size
Si imposta nella sezione [mysql] ad es.
[mysqld]
tmp_table_size = 96M
innodb_buffer_pool_size
Come tmp_table_size ma per le tabelle di tipo InnoDB. Si puo’ impostare questo valore pari al 70/80% della memoria dedicata al servizio mysql
skip-innodb
Se non state utilizzando tabelle di tipo innodb, aggiungete questa direttiva nella sezione [mysqld] della configurazione del servizio
Utilizzare la cache per le query
Per abilitare la cache sulle query impostare
query-cache-type = 1
query-cache-size = 16777216
(questo valore e’ espresso in byte)
Adesso nella console di mysql eseguite questo:
show status like ‘%qcache%’;
e guardate il valore di
Qcache_free_memory
Qcache_lowmem_prunes
Qcache_free_memory indica la memoria disponibile che potra’ essere ancora utilizzata per la cache.
Il valore di Qcache_lowmem_prunes viene aumentato ogni qualvolta che viene rimossa una query dalla cache. Se vedete aumentare questo valore molto rapidamente, dovrete aumentare query-cache-size.
N.B. query_cache_limit indica la dimensione massima del risultato di una query. Se viene superato quella query non sara’ inserita nella cache
Per ripulire la cache bastera’ eseguire questo comando dalla console di mysql
RESET QUERY CACHE


