2009-11-16 4 views
8

Ich mache viele INSERTs über LOAD DATA INFILE auf MySQL 5.0. Nach vielen Einfügungen, sagen wir ein paar hundert Millionen Zeilen (InnoDB, PK + ein nicht eindeutiger Index, 64 Bit Linux 4GB RAM, RAID 1), verlangsamen sich die Einfügungen beträchtlich und erscheinen IO gebunden. Werden Partitionen in MySQL 5.1 wahrscheinlich die Leistung verbessern, wenn die Daten in separate Partitionstabellen fließen?Werden Partitionen die MySQL INSERT-Geschwindigkeit verbessern?

+0

, die sicherlich viele Zeilen ist. Welche Tischmaschine verwendest du? MyISAM oder InnoDB? – Asaph

+0

Haben Sie Indizes für diese Tabelle (weil sie Einfügungen verlangsamen)? – Asaph

+0

Welches Betriebssystem? Welches Dateisystem? Wie viel Speicher hat die Box? – Asaph

Antwort

3

Die vorherige Antwort ist falsch in seinen Annahmen, dass dies die Leistung verringern wird. Ganz im Gegenteil.

Hier ist ein langwieriger, aber informativer Artikel und warum und wie Partitionierung in MySQL zu tun:

http://dev.mysql.com/tech-resources/articles/partitioning.html

Partitioning typischerweise verwendet wird, wie erwähnt, zu einer Gruppe wie-Daten zusammen. Auf diese Weise werden Ihre Tabellen nicht fragmentiert, wenn Sie sich dafür entscheiden, eine Partition zu archivieren oder zu zerstören. Dies schadet jedoch der Leistung nicht, es kann sie tatsächlich erhöhen. Sehen Sie, es sind nicht nur Deletionen, die Fragmente, Updates und Inserts können das auch tun. Durch das Partitionieren der Daten weisen Sie dem RDBMS die Kriterien (Indezes) zu, nach denen die Daten manipuliert und abgefragt werden sollen.

-5

Wenn die INSERT-Spalten überprüft werden (zum Beispiel Primärschlüssel), wird dies nur die Geschwindigkeit verringern: MySQL muss zusätzlich über die Partitionierung entscheiden.

Alle Abfragen werden nur durch Hinzufügen von Indizes verbessert. Die Partitionierung ist nützlich, wenn Sie viele sehr alte Daten haben (z. B. Jahr < 2000), die nur selten verwendet werden: Dann ist es nett, eine Partition für diese Daten zu erstellen.

Prost!

+0

Die Leistung aller Abfragen wird durch Indexierung nicht unterstützt: Leistung von INSERTs werden durch Indizierung verletzt. – nicolaskruchten

1

Bearbeiten: SiLent SoNG ist korrekt. DISABLE/ENABLE KEYS funktioniert nur für MyISAM, nicht für InnoDB. Ich wusste das nie, aber ich ging und las die Dokumente. http://dev.mysql.com/doc/refman/5.1/en/alter-table.html#id1101502.

Aktualisieren von Indizes möglicherweise was verlangsamt werden. Sie können während der Aktualisierung Indizes deaktivieren und sie wieder aktivieren, damit sie einmal für die gesamte Tabelle generiert werden können.

 
ALTER TABLE foo DISABLE KEYS; 
LOAD DATA INFILE ... ; 
ALTER TABLE ENABLE KEYS; 

Dies führt dazu, dass alle Indizes auf einmal und nicht pro Zeile aktualisiert werden. Dies führt auch zu ausgeglicheneren BTREE-Indizes.

+0

der bereits erwähnte Asker InnoDb. Schlüssel deaktivieren und Schlüssel aktivieren InnoDb nicht unterstützen. –

+0

@SiLent SoNG: Danke, ich wusste nicht, dass es nur MyISAM ist. Beitrag bearbeitet um zu reflektieren. – Slashterix

Verwandte Themen