Commenti(0)
Gestire gli Storage Engine
Gli Storage Engine questi sconosciuti, ecco un interessante ricetta che consente di muoversi con dimestichezza nel mondo degli SE
Prima di tutto, una questione terminologica. Storage Engine (SE) è il termine utilizzato nelle versioni recenti di MySQL per indicare ciò che in versioni più vecchie veniva chiamato Table Types. Attualmente quest’ultimo termine è da considerarsi obsoleto.
A partire dalla versione 5.1, MySQL possiede un’architettura a plugin. Ogni plugin consente a un qualsiasi sviluppatore C/C++ di scrivere una libreria che implementi una certa funzionalità utilizzata dal server; questa libreria potrà poi essere installata e utilizzata all’occorrenza.
Gli Storage Engine sono librerie che implementano tutte le funzioni delle tabelle: la registrazione e la ricerca dei dati, l’indicizzazione, etc. Anche prima che MySQL possedesse una vera e propria architettura a plugin esistevano diversi Table Types, ognuno dei quali possedeva funzionalità particolari oppure si rivelava più adatto (performante, affidabile…) in determinate casistiche.
Gli SE ufficiali (sviluppati da MySQL AB / Sun Microsystems) sono i seguenti:
- MyISAM – è lo SE di default. Non gestisce le transazioni ma è molto performante. Supporta le ricerche FULLTEXT e i tipi geospaziali.
- Mrg_MyISAM – serve a creare tabelle che siano la fusione di più tabelle di tipo MyISAM.
- InnoDB – E’ transazionale, ma ciò nonostante si rivela più performante di MyISAM in certe situazioni.
- Memory – tabelle in memoria, non registrate su disco.
- Archive – tabelle compresse di sola lettura.
- CSV – tabelle registrate in formato CSV, particolarmente adatti per l’importazione e l’esportazione di dati.
- BLACKHOLE – per disabilitare la scrittura dei dati; la lettura è abilitata, ma restituisce sempre recordset vuoti.
- Fedarated – un “ponte” verso tabelle che si trovano su un altro server MySQL.
- IBMDB2I – utilizza lo stesso formato del DB2 di IBM, sviluppato per compatibilità.
MariaDB include anche altri SE:
- Maria – un’evoluzione di MyISAM, opzionalmente transazionale.
- PBXT – transazionale, sviluppato dalla PrimeBase come incrocio tra MyISAM e InnoDB.
- XtraDB – sviluppato dalla Percona, basato su InnoDB.
- FederatedX – evoluzione di Federated.
Drizzle non include BLACKHOLE e lo SE di default è InnoDB. Le build fornite da OurDelta includono gli stessi SE di MySQL e MariaDB, senza aggiunte.
Alcuni altri SE sviluppati da terze parti sono:
- InfiniDB (http://infinidb.org/)
- SolidDB (http://www-01.ibm.com/software/data/soliddb/)
- memcache_engine (http://tangent.org/index.pl?node_id=506)
- Spider (http://spiderformysql.com/)
Altri:
- ndbcluster – SE concepito per il cluster.
- ISAM – obsoleto, è l’antenato di MyISAM.
- BDB – obsoleto, transazionale, sviluppato da Sleepy Cat (ora Oracle) sulla base del DBMS embedded BerkeleyDB; presente per default nelle vecchie versioni di MySQL.
- Falcon – SE ufficiale transazionale in fase di sviluppo; alcune vecchie preview sono state scaricabili per un certo periodo.
- Gemini – vecchio SE transazionale sviluppato da terze parti, incompatibile con l’API attuale di MySQL.
Metainformazioni
Per sapere quali SE sono presenti è possibile utilizzare una delle seguenti istruzioni (che sono sinonimi):
- SHOW ENGINES;
- SHOW STORAGE ENGINES;
O, in alternativa, si può visualizzare il contenuto della tabella ENGINES contenuta nell’INFORMATION_SCHEMA.
In entrambi i casi, verranno restituiti i seguenti campi (che sono scritti in maiuscolo nell’INFORMATION_SCHEMA e con solo la prima lettera maiuscola con il comando SHOW):
- ENGINE – nome del plugin.
- SUPPORT – se il plugin è supportato (DEFAULT = supportato e utilizzato di default, YES = supportato, NO = non supportato, DISABLED = supportato ma disabilitato)
- COMMENT – breve descrizione dello SE.
- TRANSACTIONS – se supporta le transazioni SQL.
- XA – se supporta le transazioni XA.
- SAVEPOINTS – se supporta i savepoint all’interno delle transazioni SQL.
Abilitare uno SE
Per gli SE ufficiali, esistono variabili di sistema chiamate have_nome_se che indicano appunto se lo SE è presente – può avere gli stessi valori del campo SUPPORT di ENGINES. Esempio:
1SHOW VARIABLES LIKE 'have_archive';
A volte per abilitare uno SE è necessario eseguire il comando UNIX configure con una determinata opzione. Ad esempio per Archive, dopo la compilazione di MySQL eseguire:
1configure --with-archive-storage-engine
Altre volte gli SE vengono abilitati per default, ma possono essere disabilitati con l’opzione:—skip-nome_se (esempio:—skip-archive).
Per installare un plugin si può eseguire il seguente comando:
1INSTALL nome_plugin;Per disinstallare un plugin, si può eseguire:
1UNINSTALL nome_plugin;Quando si crea una tabella, si specifica lo SE da utilizzare tramite la clausola ENGINE:
1CREATE TABLE nome_tabella (definizione) ENGINE = InnoDB;
Per cambiare lo SE di una tabella esistente:
1ALTER TABLE nome_tabella ENGINE = InnoDB;
Quando non si specifica lo SE, viene utilizzato quello di default. Esso è indicato nella variabile di sistema storage_engine, che può essere modificata in questo modo:
1SET storage_engine = InnoDB;
Anche all’avvio di mysqld è possibile specificare il valore iniziale di tale variabile tramite il parametro—default-storage-engine. Se si lascia invariato il valore di default, questo è MyISAM per MySQL e Maria per MariaDB.
Informazioni su uno SE
Generalmente, gli SE utilizzano una serie di variabili di sistema, modificabili dall’amministratore, che ne influenzano il comportamento. Il loro nome, per convenzione, inizia con il nome del plugin seguito da un underscore. Per ottenerne un elenco, quindi, si può eseguire:
1SHOW VARIABLES LIKE 'nome_plugin_%';
Per conoscere lo stato attuale dei log e le statistiche riguardanti uno specifico SE, si può utilizzare il comando SHOW ENGINE STATUS, a patto che esso sia supportato dal plugin.
I comandi attualmente supportati dai SE ufficiali sono:
- SHOW ENGINE INNODB STATUS;
- SHOW ENGINE BDB LOGS;
- SHOW ENGINE NDB STATUS;
- SHOW ENGINE NDBCLUSTER STATUS
Condividi su:
Esprimi un voto:
Argomenti chiave:

MySQL Report un tool di shell per tenere tutto sotto controllo