2 Stimmen

Tuning von MySQL für die schnelle Erstellung von Spalten/Indizes während der Entwicklung

Nehmen wir eine MySQL MyISAM-Tabelle mit einem Gigabyte an Daten und einem Gigabyte an Indizes an.

Gehen Sie außerdem davon aus, dass während der Entwicklung häufig Spalten und Indizes zu der Tabelle hinzugefügt oder aus ihr entfernt werden. Aufgrund der Größe der Datenbank ist die Erstellung von Spalten und Indizes langsam, wenn die nicht angepassten MySQL-Standardeinstellungen verwendet werden.

Welche MySQL-Server-Parameter sollten eingestellt werden, um die Zeit, die für das Hinzufügen neuer Spalten/Indizes benötigt wird, zu minimieren?

4voto

zombat Punkte 89911

Ich glaube, die wichtigsten Einstellungen, die Sie beachten sollten, sind key_buffer_size , myisam_max_sort_file_size y myisam_sort_buffer_size . key_buffer_size ist eine der wichtigsten Einstellungen für MyISAM insgesamt, aber die anderen beiden sind vielleicht etwas erklärungsbedürftig.

から http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html :

myisam_max_sort_file_size

Die maximale Größe des temporären Datei, die MySQL benutzen darf während des Neuerstellens eines MyISAM-Indexes (während REPAIR TABLE, ALTER TABLE oder DATEN IN DATEI LADEN). Wenn die Dateigröße größer als dieser Wert ist, wird der Index unter Verwendung des Schlüssel-Caches erstellt, was langsamer ist. Der Wert wird wird in Bytes angegeben.

Der Standardwert ist 2 GB. Wenn MyISAM Indexdateien diese Größe überschreiten und Speicherplatz Speicherplatz verfügbar ist, kann eine Erhöhung des Wertes kann die Leistung verbessern.

myisam_sort_buffer_size

Die Größe des Puffers, der beim Sortieren von MyISAM-Indizes zugewiesen wird während eines REPAIR TABLE oder beim Erstellen von Indizes mit CREATE INDEX oder ALTER TABLE.

Die maximal zulässige Einstellung für myisam_sort_buffer_size ist 4GB.

Wenn Sie also erwarten, dass Ihre Indizes größer sind als myisam_max_sort_file_size sollten Sie das vielleicht ändern. Wenn nicht, wird die myisam_sort_buffer_size könnte eine gewisse Aufmerksamkeit verdienen.

Beachten Sie, dass das Erstellen von Indizes in einer MyISAM-Tabelle die gesamte Tabelle sperrt. Wenn Sie dies ständig bei großen Tabellen tun, könnten Sie ernsthafte Leistungsprobleme bekommen, egal wie viele Einstellungen Sie ändern.

3voto

Harun Prasad Punkte 611

Im Folgenden finden Sie einige Tipps.

  1. Stellen Sie die key_buffer_size den für die Speicherung des Index benötigten Speicherplatz. Die zugewiesene Größe sollte größer sein als die für die Spalte * Anzahl der Zeilen, die indiziert werden müssen, erforderliche Größe. In Ihrem Fall sollte sie größer sein als 1 GB da Sie erwähnt haben, dass die Indexgröße 1 GB beträgt. Bei der MyISAM-Engine kann der Index im Speicher gespeichert werden, nicht aber die Daten.

  2. Wenn der Index erstellt werden muss auf varchar Feldern die Anzahl der für die Indizierung verwendeten Bytes begrenzen. Wenn eine Spalte zum Beispiel aus varchar(500) Die Erstellung eines Indexes wäre ein Overkill und würde nichts nützen, wenn MySQL in der Lage ist, nur die ersten paar Zeichen zu verwenden, um einige Datensätze zu erfassen. Zum Beispiel 5 Zeichen.

  3. Um neue Spalten hinzuzufügen, müsste MySQL eine temporäre Tabelle erstellen und alle Daten mit dem neuen Spaltenwert kopieren. Um dies zu vermeiden, ist es besser, eine neue Tabelle mit dem Primärschlüssel der Haupttabelle und den neuen Spalten zu erstellen.

Ich hoffe, das hilft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X