Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL optimisant la vitesse d'INSERT ralentie à cause des indices

Si vous voulez des insertions rapides, la première chose dont vous avez besoin est un matériel approprié. Cela suppose une quantité suffisante de RAM, un SSD au lieu de disques mécaniques et un processeur assez puissant.

Puisque vous utilisez InnoDB, ce que vous voulez, c'est l'optimiser puisque la configuration par défaut est conçue pour les machines lentes et anciennes.

Voici une excellente lecture sur la configuration d'InnoDB

Après cela, vous devez savoir une chose - et c'est ainsi que les bases de données fonctionnent en interne, comment fonctionnent les disques durs, etc. Je vais simplifier le mécanisme dans la description suivante :

Une transaction est MySQL qui attend que le disque dur confirme qu'il a écrit les données. C'est pourquoi les transactions sont lentes sur les disques mécaniques, ils peuvent effectuer 200 à 400 opérations d'entrée-sortie par seconde. Traduit, cela signifie que vous pouvez obtenir 200 requêtes d'insertion par seconde en utilisant InnoDB sur un lecteur mécanique. Naturellement, c'est une explication simplifiée , juste pour décrire ce qui se passe, ce n'est pas le mécanisme complet derrière la transaction .

Étant donné qu'une requête, en particulier celle correspondant à la taille de votre table, est relativement petite en termes d'octets, vous gaspillez effectivement de précieux IOPS sur une seule requête.

Si vous encapsulez plusieurs requêtes (100 ou 200 ou plus, il n'y a pas de nombre exact, vous devez tester) dans une seule transaction, puis la validez, vous obtiendrez instantanément plus d'écritures par seconde.

Les gars de Percona réalisent 15 000 inserts par seconde sur un matériel relativement bon marché. Même 5 000 inserts par seconde ne sont pas mauvais. La table comme la vôtre est petite, j'ai fait des tests sur une table similaire (3 colonnes de plus) et j'ai réussi à atteindre 1 milliard d'enregistrements sans problèmes notables, en utilisant une machine de 16 Go de RAM avec un SSD de 240 Go (1 disque, pas de RAID, utilisé à des fins de test).

TL;DR :- suivez le lien ci-dessus, configurez votre serveur, obtenez un SSD, encapsulez plusieurs insertions en 1 transaction et profitez-en. Et ne désactivez pas et ne réactivez pas l'indexation, cela ne s'applique pas toujours, car à un moment donné, vous passerez du temps de traitement et d'E/S pour les créer.