2010-12-13 6 views
5

Je lisais this post sur le blog de performance de MySQL.InnoDB optimisation - "utiliser les transactions lors de mises à jour" - pourquoi?

Dans l'application mise au point, il dit:

d'abord, assurez-vous que vous utilisez les transactions lorsque vous faites des mises à jour

Je suis actuellement seulement des transactions dans des endroits où il y a plusieurs insertions ou des mises à jour à la en même temps. c'est-à-dire plus d'une table.

Dois-je donc modifier chaque UPDATE pour le transformer en une transaction?

Quelle est la différence entre:

prepare sql 
bind params 
commit 

et:

begin transaction 
prepare sql 
bind params 
execute statement 
commit transaction 

en termes de ce qui se passe au niveau de la base de données, qui fait une plus rapide que l'autre? InnoDB fonctionne en mode autocommit par défaut.

Répondre

6

Cela signifie que chaque requête s'exécute dans sa propre transaction et est validée immédiatement. Dans InnoDB, cela signifie écrire des données en deux endroits sur le disque (ne me demandez pas de détails - j'écris de mémoire ce que j'ai lu sur MySQL Performance Blog une fois;)). Maintenant, si vous faites une mise à jour/insertion/suppression à la fois, il n'y a pas beaucoup de performance à gagner. Toutefois, si vous effectuez plusieurs mises à jour/insertions/suppressions consécutives, vous pouvez économiser du temps sur le disque dur en les regroupant dans une transaction, puis en les validant toutes en même temps.

+2

+1. Analyse plus technique: il y a un tampon qui retarde l'écriture dans le journal (innodb_log_buffer_size) qui doit être vidé plus fréquemment si vous vous engagez tout le temps, ce qui conduit à des performances moins bonnes. Le tampon est également rincé automatiquement toutes les secondes. –

Questions connexes