title: BLACKHOLE
text: # BLACKHOLE
  
  BLACKHOLE è uno storage engine presente in MySQL e nei suoi fork (ad eccezione di Drizzle). Non è abilitato per default, ma è attivabile o disattivabile con una semplice istruzione SQL. Se si compila MySQL dai sorgenti, BLACKHOLE non viene compilato per default.
  
  La particolarità di questo storage engine consiste nel disabilitare l'immissione dei dati nella tabella. Nel momento in cui una tabella viene convertita in BLACKHOLE, essa viene implicitamente svuotata. Ne consegue che ogni query su una tabella BLACKHOLE restituisce un insieme di risultati vuoto, mentre nessuna riga sarà scritta, cancellata e modificata.
  
  Una tabella BLACKHOLE non ha un file dei dati né un file degli indici. Esiste solo il file .frm che contiene la definizione della tabella.
  
  I Trigger BEFORE INSERT funzionano sulle tabelle BLACKHOLE, mentre non funzionano quelli AFTER INSERT perché nessun dato può essere inserito. I trigger su UPDATE e DELETE non vengono mai eseguiti.
  
  ## Uso di BLACKHOLE
  
  Gli scopi di questo storage engine possono essere vari:
  
  * Debug: le istruzioni non hanno effetto, ma se contengono errori questi verranno segnalati. Inoltre, se si prova a inserire righe, viene indicato il numero di righe che si è tentato di inserire - questo può essere utile nel caso di comandi che inseriscono una grande quantità di tuple in una volta sola.
  * Misurare le performance di uno storage engine. Per farlo, in linea di principio, bisognerebbe eseguire una serie di operazioni, misurare il tempo totale impiegato e sottrarre quello impiegato da altri componenti indipendenti dallo storage engine: l'ottimizzatore, il controllo dei permessi, etc. Si può quindi eseguire un benchmark su due tabelle, di cui solo una è BLACKHOLE: siccome questo storage engine non fa alcunché, impiega un tempo pressoché nullo. Le prestazioni di una tabella BLACKHOLE, pertanto, sono le prestazioni dell'intero database server escluso lo storage engine.
  * Inserimento di dati negli slave ma non nel master, o viceversa. In circostanze piuttosto rare, può essere utile per risolvere alcuni problemi.
  * Il master potrebbe replicare i dati su un unico slave, che a sua volta replica i dati su diversi altri slave. Se però il primo slave deve anche registrare i dati su disco, le sue prestazioni potrebbero essere troppo scarse: questo problema si può risolvere convertendo tutte le sue tabelle (o parte di esse) a BLACKHOLE. Pur migliorando la velocità e consentendo un numero di slave più elevato, questa tecnica introduce un pericolo: se la connessione tra il master e uno slave di primo livello si interrompe, tutti gli slave che da esso dipendono cesseranno di replicaree i dati.
  