mysql

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 compra Sun: ergo acquista Solaris, Java e Mysql

Oracle compra SunOracle, 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è.

Solaris: un sistema operativo con “migliaia di applicazioni software di terze parti a disposizione, supporto dai cicli di vita superiori a 10 anni, per implementazioni stabili e a lungo termine, aggiornamenti per le installazioni di Solaris già esistenti, offerte di supporto impareggiabili per le aziende”, da sempre ben integrato col database Oracle e in competizione (seppure relativamente flebile) con Windows e Linux.

Java: uno dei linguaggi di programmazione più diffusi al mondo, utilizzato da sempre con enorme successo lato server e non (e negli ultimi anni anche per la creazione di RIA), con cui Oracle stessa ha costruito buona parte delle sue applicazione middleware e da poco supportato da Google App Engine.

Mysql: il database più diffuso tra quelli dalla versione opensource, grande rivale di Oracle, comprato da Sun per un miliardo di dollari lo scorso anno. Tutti si chiedono che fine farà, anche se è probabile che non sparirà dalla circolazione, soprattutto per via della sua elevatissima diffusione. Il supporto commerciale continuerà indubbiamente ma è facile pensare che, anche se con risorse limitate, continuerà anche l’approccio open source.

Oracle è adesso in grado di fornire un pacchetto davvero completo alle aziende clienti. Chi lo fermerà?

phpMyAdmin arriva alla versione 3.1

Vi segnalo l’uscita in questi giorni della nuova versione di phpMyAdmin, il celebre tool gratuito per la gestione di database MySQL tramite interfaccia web, interamente scritto in PHP e da anni diffusissimo in tutto il mondo dello sviluppo web.

Nello specifico sia arrivati a phpMyAdmin 3.1.0, nuova versione che risolve bug di sicurezza, introduce migliorie ad alcune funzioni (esportazioni, setup script, autenticazione ed altro ancora) e aggiornamenti per le lingue in cui è utilizzabile il tool.

La lista completa delle release notes vi darà i dettagli più infimi.
Questa è invece la pagina per il download.

Importare un file CSV in una tabella MySQL

Spessissimo le grosse quantità di dati dei clienti, quando ancora non esiste un supporto come il database, sono memorizzate su fogli excel. Questi strumenti sono pratici da gestire per tenere traccia di dati, segnare movimenti e fare conti di ogni sorta.

Naturalmente, nella quasi totalità dei casi una applicazione web o uno script necessita di recuperare dati da db. Come fare per importare velocemente dei dati da un foglio excel ad una tabella sul database?

Ci viene in aiuto il formato CSV (Comma Separated Values), una particolare tipologia di file di testo in cui tutti i fogli excel possono essere salvati. Questo tipo di salvataggio riporta i dati delle colonne excel su un file testuale, raggruppando il contenuto di ogni singola cella (solitamente tramite le virgolette “) e separando ogni riga tramite un carattere speciale (generalmente la virgola).
Questo permette di creare una regola, un criterio con cui effettuare l’importazione dei dati all’interno di una tabella.

Per quanto riguarda i database MySQL, l’importazione avviene tramite una query di questo tipo:

load data local infile 'myFile.csv' into table User
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
(first_name, last_name, birth_date)

Come si può vedere, alla query viene specificato il nome del file CSV (myFile.csv) che contiene i dati da importare, la tabella in cui riversarli (User), il separatore delle righe (la virgola), il separatore delle colonne (le virgolette “) e i campi sulla tabella corrispondenti alle colonne del foglio excel.

Fate attenzione a che ci sia corrispondenza nell’ordine dei dati presi dall’excel con le colonne della tabella: nel nostro esempio, la prima colonna verrà riversata su first_name, la seconda su last_name e così via.

In questo modo il motore del database utilizza il criterio suggerito per distribuire coerentemente i dati all’interno della tabella indicata. Questo procedimento permettere di risparmiare molto tempo nell’importazione di dati da fogli excel, soprattutto se in grande quantità.

Ricordo che esistono molti tool per database (e alcuni software per la gestione dei db) che permettono di fare queste operazioni in modo semi-automatico. Uno su tutti? Aqua Data Studio.

 Scroll to top