Come ottimizzare mysql server con il tuning
Riprendo e sintetizzo in italiano l’articolo “What to tune in MySQL Server after installation” del blog www.mysqlperformanceblog.com, un sito davvero interessante curato nei contenuti dagli autori del libro “High performance MySQL”.
Il file di configurazione di Mysql offre la possibilità di gestire molte variabili, che permettono di configurare un database ottimizzato per le esigenze di chi lo utilizza, anche in base all’hardware che si dispone sulla macchina che ospita il db.
Vediamo le principali:
- key_buffer_size – Questa proprietà ha valore con tabelle di tipo MyISAM e, se si usano solo questa tipologia di tabelle, si consiglia di settarla al 30-40% della memoria disponibile. Bisogna infatti ricordarsi che MyISAM usa la cache del sistema operativo per memorizzare i dati e quindi bisogna far bene le proprie valutazione nello scegliere il valore da assegnare a questa variabile, il calcolo va fatto soprattutto in base alla quantità di indici e dati per evitare di sottrarre troppe risorse al sistema operativo stesso. Il valore minimo consigliato per ottenere risultati decenti è comunque sui 16-32MB.
- innodb_buffer_pool_size – Questa proprietà è molto importante utilizzando tabelle di tipo InnoDB. Utilizzando InnoDB dati e indici vengono memorizzati dal pool, quindi si può pensare di portare al 70-80% questa proprietà. E’ inoltre consigliato di non superare i 2-3,5 GB sulle macchine a 32bit, perchè sopra una certa soglia il rendimento non aumenta.
- innodb_additional_mem_pool_size – Questa proprietà pare non influire moltissimo sulle performance, si consiglia un valore massimo di 20MB o poco più (il default è 2MB).
- innodb_log_file_size – Questa proprietà definisce la grandezza massima del file di log per tabelle InnoDB. Pur essendo vero che maggiore è la dimensione, migliori sono le prestazioni, è anche vero che bisogna fare i conti con le dimensioni del server. A seconda di tale considerazione si consiglia un tuning di questa variabile tra i 64 e i 512MB.
- innodb_log_buffer_size – Il default per questa variabile è 1MB e per sistemi con poche trasnizioni ed un traffico medio potrebbe bastare. Non va settato un valore troppo alto perchè è il buffer è flushato ogni secondo ed esagerare significherebbe sprecare memoria. Solitamente sono più che sufficienti 8-16 MB.
- innodb_flush_log_at_trx_commit – Se sembra che InnoDB sia più lento di MyISAM è possibile che questo valore sia stato configurato male. Il default (1) significa che ad ogni commit di una transizione (o statement fuori dalla stessa) necessita di fare flush del log su disco, un’operazione piuttosto costosa se molto frequente. Settare il valore a 2 significa fare il flush del log solo tramite cache del sistema operativo. Il valore 0 è più veloce, ma è rischioso perchè si possono perdere dati durante le transizioni nel caso di un crash di MySQL Server. Anche il valore 2 è rischioso se il sistema operativo va in crash.
- table_cache – Aprire tabelle è costoso e per mantenere tabelle in memoria è utile avere una cache abbastanza spaziosa. 1024 MB è un buon valore se si ha un sistema sotto le 200 tabelle, ricordandosi sempre che ogni connessione si porta via la propria quantità di memoria.
- thread_cache – La creazione e distruzione di thread è dispendiosa e avviene ad ogni connessione e disconnessione dal db. Il valore consigliato è di almeno 16, con l’obbiettivo di non avere crezione di thread durante le normali operazioni.
- query_cache_size – Utile per applicazioni con molti dati in lettura. Valori compresi tra i 32 e i 512 MB sono i migliori, a seconda della potenza della vostra macchina.
Al momento in cui scrivo le considerazioni valgono per MySQL Server 5 (io le ho provate su MySQL Server 5.1) e sono comunque suggerimenti da utilizzare con criterio e in base alle possibilità della propria macchina.
E’ necessario rammentare infatti che queste appena descritte sono tutte variabili definite a livello globale, quindi ragionate bene sulle disponibilità della vostra macchina e sulle necessità delle applicazioni che ci gireranno sopra prima di esagerare, rischiando di peggiorare le performance.
A voi la responsabilità delle vostre.. configurazioni.
Oracle, il gigante americano dell’omonimo database, compra per circa 7,4 miliardi di dollari Sun Microsystem, azienda della Sylicon Valley che produce software, semiconduttori e altro ancora. Cosa significa questo acquisto per il mondo dell’Information Technology? Significa che Oracle (sconfiggendo IBM, altro possibile acquirente della società californiana) ha comprato Solaris, Java e Mysql. Un affarone e vediamo perchè.
Follow Me!