Glots d'étranglement des performances des insertions MySQL InnoDB
L'écart de performances significatif entre les insertions MyISAM et InnoDB, tel qu'observé dans les résultats des tests, peut être attribué à une différence clé dans leur traitement des transactions.
InnoDB, contrairement à MyISAM, prend en charge les transactions, garantissant la cohérence et la durabilité des données. Cependant, si les transactions ne sont pas explicitement gérées, InnoDB utilise par défaut les transactions implicites, ce qui entraîne une pénalité de performances. Pour chaque instruction d'insertion, InnoDB valide la transaction sur le disque, ce qui entraîne une surcharge importante pour un grand nombre d'insertions.
Pour résoudre ce problème, le test doit être modifié pour inclure une gestion explicite des transactions. En démarrant la boucle avec START TRANSACTION et en la terminant avec COMMIT, les opérations d'insertion peuvent être regroupées en une seule transaction, améliorant considérablement les performances. Le code modifié ressemblerait à ceci :
test("InnoDB") # START TRANSACTION start = time.time() for rows in data: db.execute(sql,rows) duration = time.time()-start print "inserting the test data took %0.3f seconds"%duration # COMMIT
Cette optimisation permet à InnoDB de différer les validations de transactions jusqu'à la fin de la boucle, éliminant ainsi le goulot d'étranglement des performances associé aux transactions implicites.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!