Ho bisogno di inserire milioni di righe nel database MySQL (motore InnoDB). Ho un problema con il tempo quando i tavoli hanno grandi dimensioni. Quasi tutto il tempo è speso per inserire query. Forse qualcuno sa come ottimizzarlo?Come ottimizzare MySQL per inserire milioni di righe?
risposta
Per importare grande massa di dati in InnoDB:
set in MySQL configurazione
- innodb_doublewrite = 0
- innodb_buffer_pool_size = 50% + sistema di memoria
- innodb_log_file_size = 512M
- log-bin = 0
- innodb_support_xa = 0
- innodb_flush_log_at_trx_commit = 0
Aggiungi a destra dopo l'inizio dell'operazione:
FOREIGN_KEY_CHECKS SET = 0;
SET UNIQUE_CHECKS = 0;
SET AUTOCOMMIT = 0;
Situato proprio prima della fine dell'operazione:
SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;
Queste ottimizzazioni mi hanno portato a eseguire 10.000 record ogni 10 minuti a 500.000 record, impressionante. – input
Imposta anche 'sync_binlog = 0' nel caso in cui sia impostato a' 1' ('0' è il valore predefinito) – zogby
@zogby con' log_bin = 0' binlog è completamente disabilitato, quindi 'sync_binlog = 0' non fa differenza. – c2h5oh
Se si parla di un gran numero di istruzioni INSERT
, esaminare le transazioni denominate. Sono abbastanza sicuro che la maggior parte (se non tutte) le lingue che eseguono le transazioni di supporto SQL. Accelereranno tutto ciò che riguarda la scrittura sul DB. Un ulteriore vantaggio è che se qualcosa va storto puoi eseguire il rollback delle modifiche.
Sto già utilizzando una transazione :) –
Qual è la tua richiesta allora? –
Cosa intendi? –
Eventuali altre operazioni eseguite sul tavolo mentre si inseriscono i dati? – Kermit