MySQL carica dati in infusione – accelerazione?

a volte, devo reimportare i dati per un progetto, leggendo quindi circa 3,6 milioni di righe in una tabella MySQL (attualmente InnoDB, ma in realtà non sono limitato a questo motore). “Carica infile dati …” si è dimostrata la soluzione più veloce, tuttavia ha un compromesso: – quando si importa senza chiavi, l’importazione stessa richiede circa 45 secondi, ma la creazione della chiave richiede anni (già in esecuzione per 20 minuti .. .). – L’importazione con le chiavi sulla tabella rende l’importazione molto più lenta

Ci sono le chiavi su 3 campi della tabella, facendo riferimento a campi numerici. C’è un modo per accelerare questo?

Un altro problema è il seguente: quando termino il processo che ha avviato una query lenta, continua a essere eseguito sul database. C’è un modo per terminare la query senza riavviare mysqld?

Grazie mille DBa

se utilizzi innodb e caricamento in blocco, ecco alcuni suggerimenti:

ordina il tuo file csv nell’ordine della chiave primaria della tabella di destinazione: ricorda che inthodb utilizza chiavi primarie in cluster, quindi verrà caricato più velocemente se è ordinato!

utilizzo tipico dei dati di caricamento che utilizzo:

truncate ; set autocommit = 0; load data infile  into table 
... commit;

altre ottimizzazioni che puoi utilizzare per aumentare i tempi di caricamento:

 set unique_checks = 0; set foreign_key_checks = 0; set sql_log_bin=0; 

dividere il file CSV in blocchi più piccoli

statistiche di importazione tipiche che ho osservato durante i carichi alla rinfusa:

 3.5 - 6.5 million rows imported per min 210 - 400 million rows per hour 

Questo post sul blog ha quasi 3 anni, ma è comunque pertinente e contiene alcuni buoni suggerimenti per ottimizzare le prestazioni di “LOAD DATA INFILE”:

http://www.mysqlperformanceblog.com/2007/05/24/predicting-how-long-data-load-would-take/

InnoDB è un buon motore. Tuttavia, si basa molto sull’essere “sintonizzati”. Una cosa è che se i tuoi inserti non sono nell’ordine di aumentare le chiavi primarie, innoDB può richiedere più tempo di MyISAM. Questo può essere facilmente superato impostando innodb_buffer_pool_size più alto. Il mio suggerimento è di impostare il 60-70% della RAM totale su una macchina MySQL dedicata.