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

MySQL ottimizza la velocità INSERT rallentata a causa degli indici

Se vuoi inserimenti veloci, la prima cosa di cui hai bisogno è un hardware adeguato. Ciò presuppone una quantità sufficiente di RAM, un SSD invece di unità meccaniche e una CPU piuttosto potente.

Dato che usi InnoDB, quello che vuoi è ottimizzarlo poiché la configurazione predefinita è progettata per macchine lente e vecchie.

Ecco un'ottima lettura sulla configurazione di InnoDB

Dopodiché, devi sapere una cosa:ecco come i database fanno le loro cose internamente, come funzionano i dischi rigidi e così via. Semplificherò il meccanismo nella seguente descrizione:

Una transazione è MySQL in attesa che il disco rigido confermi di aver scritto i dati. Ecco perché le transazioni sono lente sulle unità meccaniche, possono eseguire 200-400 operazioni di input-output al secondo. Tradotto, ciò significa che puoi ottenere 200 query di inserimento al secondo utilizzando InnoDB su un'unità meccanica. Naturalmente, questa è una spiegazione semplificata , solo per delineare cosa sta succedendo, non è il meccanismo completo alla base della transazione .

Poiché una query, in particolare quella corrispondente alla dimensione della tua tabella, è relativamente piccola in termini di byte, stai effettivamente sprecando preziosi IOPS su una singola query.

Se esegui il wrapping di più query (100 o 200 o più, non esiste un numero esatto, devi testare) in una singola transazione e quindi esegui il commit, otterrai immediatamente più scritture al secondo.

I ragazzi di Percona stanno ottenendo 15.000 inserti al secondo su un hardware relativamente economico. Anche 5k inserisce un secondo non è male. La tabella come la tua è piccola, ho fatto dei test su una tabella simile (3 colonne in più) e sono riuscito ad arrivare a 1 miliardo di record senza problemi evidenti, utilizzando una macchina di ram da 16gb con un SSD da 240GB (1 drive, no RAID, utilizzato a scopo di test).

TL; DR:- segui il link sopra, configura il tuo server, ottieni un SSD, avvolgi più inserti in 1 transazione e guadagna. E non disattivare e riattivare l'indicizzazione, non è sempre applicabile, perché a un certo punto impiegherai tempo di elaborazione e IO per crearli.