Mysql
 sql >> Database >  >> RDS >> Mysql

Modifica di grandi tabelle MySQL InnoDB

Modifica 2016: abbiamo recentemente (agosto 2016) rilasciato gh-ost , modificando la mia risposta per rispecchiarla.

Oggi ci sono diversi strumenti che ti consentono di modificare la tabella online per MySQL. Questi sono:

  • modifica 2016: gh-ost :lo strumento di migrazione dello schema senza trigger di GitHub (dichiarazione di non responsabilità:sono l'autore di questo strumento)
  • oak-online- alter-tabella , come parte del openark-kit (disclaimer:sono l'autore di questo strumento)
  • pt-online-schema- cambia , come parte del Percona Toolkit
  • Modifica dello schema online di per MySQL

Consideriamo la "normale" `ALTER TABLE`:

Una tabella di grandi dimensioni richiederà molto tempo per ALTER . innodb_buffer_pool_size è importante, così come altre variabili, ma su un tavolo molto grande sono tutte trascurabili. Ci vuole solo tempo.

Cosa fa MySQL a ALTER una tabella consiste nel creare una nuova tabella con un nuovo formato, copiare tutte le righe, quindi passare. Durante questo periodo il tavolo è completamente bloccato.

Considera il tuo suggerimento:

Molto probabilmente funzionerà peggio di tutte le opzioni. Perché? Poiché stai usando una tabella InnoDB, INSERT INTO tablename_tmp SELECT * FROM tablename effettua una transazione. un enorme transazione. Creerà ancora più carico rispetto al normale ALTER TABLE .

Inoltre, dovrai chiudere la tua applicazione in quel momento in modo che non scriva (INSERT , DELETE , UPDATE ) al tuo tavolo. Se lo fa, l'intera transazione è inutile.

Cosa offrono gli strumenti online

Gli strumenti non funzionano tutti allo stesso modo. Tuttavia, le basi sono condivise:

  • Creano una tabella "ombra" con schema alterato
  • Creano e utilizzano trigger per propagare le modifiche dalla tabella originale alla tabella fantasma
  • Loro lentamente copia tutte le righe dalla tabella alla tabella shadow. Lo fanno in blocchi:diciamo, 1.000 righe alla volta.
  • Fanno tutto quanto sopra mentre sei ancora in grado di accedere e manipolare la tabella originale.
  • Quando sono soddisfatti, si scambiano i due, usando un RENAME .

Il kit openark strumento è in uso da 3,5 anni ormai. Lo strumento Percona ha qualche mese, ma forse più testato del primo. Si dice che lo strumento di Facebook funzioni bene per Facebook, ma non fornisce una soluzione generale per l'utente medio. Non l'ho usato io stesso.

Modifica 2016: gh-ost è una soluzione senza trigger, che riduce significativamente il carico di scrittura del master sul master, disaccoppiando il carico di scrittura della migrazione dal carico normale. È verificabile, controllabile, verificabile. L'abbiamo sviluppato internamente a GitHub e lo abbiamo rilasciato come open source; stiamo eseguendo tutte le migrazioni di produzione tramite gh-ost oggi. Vedi di più qui .

Ogni strumento ha i suoi limiti, guarda attentamente la documentazione.

Il modo conservativo

Il modo conservativo è utilizzare una replica Master-Master attiva-passiva, eseguire ALTER sul server di standby (passivo), quindi cambia ruolo ed esegui ALTER di nuovo su quello che era il server attivo, ora diventato passivo. Anche questa è una buona opzione, ma richiede un server aggiuntivo e una conoscenza più approfondita della replica.