it-swarm.com.de

MySQL-Transaktionsgröße - wie groß ist zu groß?

Ich habe einen Importprozess, der von Zeit zu Zeit ausgeführt wird, und ich möchte, dass es sich um ein Alles-oder-Nichts-Geschäft handelt, auch bekannt als: eine Transaktion.

Es gibt viele Aspekte, und die Importe können zwischen 100.000 und 1 Mio. + Datensätzen liegen. Dies entspricht einer Nutzlast von mehreren MB bis zu einigen hundert MB Daten.

Ich weiß, dass temporäre Tabellen eine weitere Option sind - aber diese Methode scheint so praktisch zu sein.

Gibt es Vorbehalte bezüglich dieser Art von Vorgehensweise mit einer großen Menge an Datenmanipulation zwischen Commits? (Außerhalb des typischen Schreib-/Indizierungslast-Bursts nach dem Festschreiben)

23
thinice

Ein zu beachtender Engpass ist der InnoDB-Protokollpuffer. Die Größe wird durch innodb_log_buffer_size festgelegt. In der MySQL-Dokumentation heißt es dazu:

Die Größe des Puffers in Byte, den InnoDB zum Schreiben in die Protokolldateien auf der Festplatte verwendet. Der Standardwert ist 8 MB. Ein großer Protokollpuffer ermöglicht die Ausführung großer Transaktionen, ohne dass das Protokoll vor dem Festschreiben der Transaktionen auf die Festplatte geschrieben werden muss. Wenn Sie also große Transaktionen haben, spart das Vergrößern des Protokollpuffers Festplatten-E/A.

Der InnoDB-Protokollpuffer sollte nicht mit dem InnoDB-Pufferpool verwechselt werden. Der Hauptunterschied zwischen ihnen ist ihr Zweck. Der InnoDB-Protokollpuffer zeichnet grundsätzlich kurzfristige Änderungen auf, die in die Redo-Protokolle (ib_logfile0, ib_logfile1) geschrieben werden. Der InnoDB-Pufferpool (Größe von innodb_buffer_pool_size ) speichert Daten und Indexseiten zwischen, die festgeschrieben (wenn die Seiten verschmutzt sind) und schließlich auf die Festplatte geschrieben werden sollen. Nach dem Festschreiben bleiben die Änderungsseiten in RAM, bis sie über LRU-Regeln entfernt werden.

Große Transaktionen müssen durch den Protokollpuffer geleitet werden. Wie bereits erwähnt, reduziert ein größerer Protokollpuffer die Festplatten-E/A. Nur ein großes Commit würde einen Engpass darstellen.

Möglicherweise möchten Sie andere zu konfigurierende InnoDB-Optionen untersuchen.

Ich habe andere Beiträge zur Optimierung von InnoDB für die weitere Forschung

20
RolandoMySQLDBA