Sante Caserio
pubblicato più di 2 anni fa

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:

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:

  • Current rating: 0.0/5
  • 1
  • 2
  • 3
  • 4
  • 5

Argomenti chiave:

Ultimi commenti Ultimi commenti

Esegui il Login oppure registrati per scrivere un commento.
Cerca nel sito...
Ultime recipes

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL MySQL Report un tool di shell per tenere tutto sotto controllo

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL


Vai alla recipe

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL MySQLSniffer sniffare il traffico TCP di MySQL

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL


Vai alla recipe

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso myisamchk riparare file MyISAM

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso il file myisamchk


Vai alla recipe

Un tool per comprimere le tabelle MyISAM fino a oltre il 50% myisampack comprimere file MyISAM

Un tool per comprimere le tabelle MyISAM fino a oltre il 50%


Vai alla recipe

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun mysqlshow visualizzare le informazioni sul database MySQL

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun client


Vai alla recipe

Utilizzando UNION / UNION ALL su campi int unsigned zerofill,
ho notato che MysqlUNION / UNION ALL su campi int unsigned zerofill. di DebUsr
Vai al tip

Utilizzo di funzioni come alias di campo tramite l'impiego di prepared statementReport con alias di campo dinamici di john_revelator
Vai al tip

Può capitare che sia necessario eseguire un dump di database in formato Comma SeparatedEsecuzione dump in formato CSV (tabelle in engine MyIsam esportate in formato CSV) di ghigomatto
Vai al tip

E' possibile eseguire le query SQL contenute in un file di testo. Questo è utileEseguire le query da un file di testo di Sante Caserio
Vai al tip

Se vogliamo fare il backup di tutti i database con mysqldump, e ne abbiamo parecchiFare il backup di tutti i database di Sante Caserio
Vai al tip

Salve,vorrei chiedervi un aiutino per una query che mi infastidisce un pò.
Ho 4 aiuto per una query! di fighterdorico Vai al topic

Salve,vorrei chiedervi un aiutino per una query che mi infastidisce un pò.
Ho 4 aiuto per una query! di fighterdorico Vai al topic

Salve,vorrei chiedervi un aiutino per una query che mi infastidisce un pò.
Ho 4 aiuto per una query! di fighterdorico Vai al topic

Salve a tutti.

Ho una tabella con lettere accentate.
Le lettere vengono visualizzate ordinamento tabelle di ditch Vai al topic

Salve a tutti.

Ho una tabella con lettere accentate.
Le lettere vengono visualizzate ordinamento tabelle di ditch Vai al topic