MySQL v.5.5: nuove funzionalita'

La versione 5.5 di MySQL introduce nuove funzionalita' nell'RDBMS Free piu' diffuso al mondo.
In questo documento sono riportati i principali nuovi elementi introdotti dalla versione 5.5:

Ma le novita' non sono solo queste... continuate a leggere!

Replicazione semi-sincrona

La replication di MySQL e' molto utilizzata per la sua semplicita' ed efficienza. La tecnica utilizzata e' basata sul logging degli statement SQL con applicazione asincrona. Il Master si occupa di registrare su file (bin-log file) tutti gli statement che vengono eseguiti sulla base dati e che operano una qualche modifica ai dati (DML e DDL). Lo Slave si collega con un thread al Master, raccoglie il contenuto dei bin-log, lo trasferisce in locale e quindi si occupa di applicarlo alla base dati.
Dalla versione 5.1, oltre alla modalita' STATEMENT, e' stata introdotta la modalita' ROW con la quale vengono riportate le le righe modificate da ogni statement. Anche con tale modalita' tuttavia la replicazione resta asincrona ed il master prosegue con le transazioni sucessive non appena effettuata la scrittura sul binary log.

Dalla versione 5.5 e' disponibile la modalita' di replicazione semi sincrona, che incrementa la data integrity. Con la replicazione semi sincrona il master attende che almeno uno slave abbia raccolto la transazione prima di confermare il commit dei dati.
La replicazione semi sincrona e' implementata mediante due plug-in (uno per il master ed uno per gli slave):

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Che vanno quindi abilitati con:
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> SET GLOBAL rpl_semi_sync_master_timeout = N;
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
Infine vanno riavviati gli I/O thread con STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;

La replicazione semi sincrona introduce un ritardo nelle transazioni. Va quindi utilizzata nei casi in cui sia necessario disporre del massimo livello di data integrity.

Performance Schema

Il performance schema, disponibile dalla versione 5.5, permette di monitorare gli eventi che avvengono sulla base dati e che hanno un impatto sulle prestazioni. Vi sono diversi tipi di eventi disponibili, alcuni dei quali a basso livello (eg. mutex, I/O). L'architettura consente inoltre di aggiungere nel tempo nuovi eventi ed un supporto via via piu' ampio su tutti gli storage Engine.

Il performance schema deve essere configurato nel build ed e' disabilitato per default. Per abilitarlo:

[mysqld]
performance_schema
Se tutto avviene correttamente la variabile performance_schema e' impostata ad ON ed e' disponibile un Engine PERFORMANCE_SCHEMA. Le viste disponibili sono:
cond_instances                              
events_waits_current                        
events_waits_history                        
events_waits_history_long                   
events_waits_summary_by_instance            
events_waits_summary_by_thread_by_event_name
events_waits_summary_global_by_event_name   
file_instances                              
file_summary_by_event_name                  
file_summary_by_instance                    
mutex_instances                             
performance_timers                          
rwlock_instances                            
setup_consumers                             
setup_instruments                           
setup_timers                                
threads                                     

InnoDB

InnoDB e' l'Engine di default dalla versione 5.5, in precedenza il default engine era MyISAM.
L'Engine InnoDB e' il motore che, dalla storica versione 3.23 di MySQL, supporta le funzionalita' piu' complete ed avanzate per la gestione dati. E' infatti ACID compliant e supporta transazioni, referential intergrity, MVCC, ... Nella versione 5.5 viene fornita la versione piu' aggiornata (InnoDB 1.1) che utilizza una nuova struttura dati (chiamata Barracuda). Con Barracuda e' disponibile la funzionalita' di compressione dei dati che, oltre ad un risparmio di spazio, ottimizza l'accesso all'I/O. Per attivare il nuovo file format vanno utilizzati i parametri (dinamici) innodb_file_format=Barracuda ed innodb_file_per_table. Per utilizzare la compressione su una tabella va utilizzata la clausola ROW_FORMAT=COMPRESSED oppure KEY_BLOCK_SIZE=8. Viene comunque fornita la completa compatibilita' all'indietro verso la precedente struttura di file (Antilope).
Nella versione 5.5 sono state raccolte tutte le migliorie prestazionali realizzate sul Plug-in InnoDB nelle versioni successive alla 5.1 mai emesse come production. Il Plug-in era stato realizzato per migliorare la scalabilita' su sistemi multicore (eg. su Hardware SUN Sparc) e richiedeva in precedenza un'installazione specifica. La differenza di prestazioni e' significativa nella gestione dei lock e della memoria, con notevoli miglioramenti alla crescita del carico transazionale.

L'INFORMATION SCHEMA e' stato arricchito di nuove viste che consentono di controllare in modo piu' semplice la gestione delle transazioni e dei lock su InnoDB: INNODB_TRX, INNODB_LOCKS e INNODB_LOCK_WAITS.

Ma davvero e' piu' veloce la versione 5.5? Un test emp7 (test in lettura) mi dava addirittura risultati leggermente peggiori... Poiche' non mi fidavo ho eseguito un piccolo benchmark effettaundo l'upgrade dalla versione 5.1 alla versione 5.5 con il TPC-B (tipico test transazionale). Ecco il risultato:

MySQL 5.1/5.5 TPC-B Benchmark

Considerato che non ho eseguito alcun tuning specifico ed ho utilizzato lo stesso file format con un semplice upgrade... non c'e' paragone: InnoDB 1.1 e' molto piu' veloce su tutti i livelli di carico!!!

Varie ed eventuali

I paragrafi precedenti hanno presentato solo le principali novita' introdotte dalla versione 5.5. Ma vanno anche riportati:

Molte altre funzionalita' erano state introdotte nelle versioni precedenti: MySQL 5.1, MySQL 5.0! Un breve riassunto delle funzionalita' introdotte nel tempo si trova su Introduzione a MySQL!


Testo: MySQL v.5.5: nuove funzionalita'
Data: 31 Novembre 2010
Versione: 1.0.2 - 14 Febbraio 2013
Autore: mail@meo.bogliolo.name