Ich habe eine Software, die viele INSERTs ausführen muss. In einer Produktionsumgebung wird es einiges an Optimierung und Tests und ähnlichem geben, aber jetzt, wenn ich es testen muss, möchte ich die Inserts so weit wie möglich beschleunigen. Daher meine Frage: Gibt es eine Möglichkeit, MySQL so zu optimieren, dass es nicht viel Festplatten-E/A ausführt, sondern alles im RAM behält und selten mit der Festplatte synchronisiert (sagen wir etwa alle n Sekunden?)
Antwort1
Insert Delayed kann hilfreich sein (nur MyISAM), da es das Einfügen in großen Mengen ermöglicht (wofür MyISAM gut geeignet ist).
Die Partitionierung Ihrer Tabelle kann ebenfalls hilfreich sein.
Wenn Ihr Speicher es zulässt (und das ist, was Sie verlangen), können Sie eine Speichertabelle verwenden. Stellen Sie einfach sicher, dass die Einstellungen max_heap_table_size und tmp_table_size für die Daten ausreichen.
Ein kleiner Trick wäre, (unter Linux) TMPFS zu verwenden und Ihre Datendatei dort abzulegen (mithilfe von Symlinks).
Antwort2
Siehe die Antwort im MySQL-HandbuchHier. Um Ihre spezielle Frage zu beantworten, prüfen Sie, INSERT DELAYED
welches genau das tut, was Sie wollen. Sie können sein Verhalten mit delayed_insert_limit
und anpassen delayed_queue_size
.
Wenn Sie die INSERTs stapelweise ausführen können, geht das sogar noch schneller; verwenden Sie entweder das Tool zum Masseneinfügen oder geben Sie mehrere VALUES-Listen an, z. B.:INSERT INTO table (column) VALUES (val1),(val2),(val3)
Antwort3
wie Daniel im zweiten Teil seiner Antwort sagt - Batch-Einfügungen werden Ihnen viel bringen. prüfenDasPräsentation. Ihr Maßstab ist wahrscheinlich viel kleiner, aber ich denke, Sie werden es trotzdem interessant finden.