2010-12-13 13 views
5

Ich las this post auf dem MySQL-Leistungsblog.InnoDB-Optimierung - "Transaktionen bei Aktualisierungen verwenden" - warum?

Unter Anwendung Tuning heißt es:

zunächst sicher, dass Sie Transaktionen verwenden, wenn Updates tun

Ich bin derzeit nur Transaktionen an Orten, an denen es mehrere Einfügungen oder Aktualisierungen an der gleiche Zeit. d.h. mehr als eine Tabelle.

Sollte ich daher jede UPDATE ändern, um es in eine Transaktion zu ändern?

Was ist der Unterschied zwischen:

prepare sql 
bind params 
commit 

und:

begin transaction 
prepare sql 
bind params 
execute statement 
commit transaction 

in Hinblick darauf, was auf Datenbankebene geschieht, dass man schneller als die andere macht?

Antwort

6

InnoDB wird standardmäßig im Autocommit-Modus ausgeführt. Was es bedeutet, ist, dass jede Abfrage in einer eigenen Transaktion ausgeführt wird und sofort commited wird. In InnoDB bedeutet das Schreiben von Daten an zwei Stellen auf der Festplatte (frag mich nicht nach Details - ich schreibe aus dem Speicher, was ich einmal im MySQL Performance Blog gelesen habe;)).

Jetzt, wenn Sie eine update/einfügen/löschen zu einer Zeit, gibt es nicht viel Leistung zu gewinnen. Wenn Sie jedoch mehrere aufeinander folgende Aktualisierungen/Einfügungen/Löschungen durchführen, können Sie einige Zeit auf der Festplatte sparen, indem Sie sie in die Transaktion einbinden und dann alle auf einmal committen.

+2

+1. Technischere Analyse: Es gibt einen Puffer, der das Schreiben in das Protokoll verzögert (innodb_log_buffer_size), das häufiger geleert werden muss, wenn Sie die ganze Zeit festschreiben, was zu schlechterer Leistung führt. Der Puffer wird automatisch alle 1 Sekunde gelöscht. –

Verwandte Themen