Frage

Betrachten Sie eine indizierte MySQL-Tabelle mit 7 Spalten, wobei ständig abgefragt und geschrieben. Was ist die ratsam Anzahl der Zeilen, die in dieser Tabelle enthalten erlaubt sein sollte, bevor die Leistung verbessert werden, würde die Daten weg in anderen Tabellen durch die Spaltung?

War es hilfreich?

Lösung

Unabhängig davon, ob Sie einen Performance-Gewinn erhalten würde die Daten durch Partitionieren ist abhängig von den Daten und den Fragen, die Sie auf es laufen wird. Sie können viele Millionen von Zeilen in einer Tabelle speichern und mit gutem Indizes und gut gestalteten Abfragen es wird immer noch super-schnell. Nur Partitionierung zu berücksichtigen, wenn Sie bereits sicher sind, dass Ihre Indizes und Abfragen so gut sind, wie sie sein können, da es mehr Mühe als sein Wert sein kann.

Andere Tipps

Es gibt keine magische Zahl, aber es gibt ein paar Dinge, die Leistung insbesondere betreffen:

  • Indexkardinalität: nicht die Mühe eine Reihe Indizierung, die 2 oder 3 Werte (wie ein ENUM) hat. Auf einem großen Tisch, wird der Abfrageoptimierer diese ignorieren.
  • Es gibt einen Kompromiss zwischen Schreib- und Indizes. Je mehr Indizes Sie haben, nehmen Sie die längeren schreibt. Nicht nur Index jede Spalte. Analysieren Sie Ihre Anfragen und sehen, welche Spalten benötigen für Ihre Anwendung indiziert werden.
  • Disk-IO und ein Speicher eine wichtige Rolle spielen. Wenn Sie Ihre gesamte Tabelle in den Speicher passen, nehmen Sie Disk IO aus der Gleichung (sobald die Tabelle zwischengespeichert wird, sowieso). Meine Vermutung ist, dass Sie eine große Leistungsänderung sehen werden, wenn Sie Ihren Tisch zu groß ist im Speicher zu puffern.
  • Betrachten Sie Ihre Server Partitionierung basiert auf der Verwendung. Wenn Ihr Transaktionssystem ist das Lesen / Einzel Zeilen schreiben, können Sie wahrscheinlich etwas Zeit, sich durch die Daten in einem Nur-Lese-Server für die aggregierte Berichterstattung zu replizieren.

Wie Sie wahrscheinlich wissen, Tischleistungsänderungen auf der Basis der Datengröße. Halten Sie ein Auge auf den Tisch / Abfragen. Sie wissen, wann es Zeit für einen Wechsel ist.

MySQL 5 hat Partitionierung gebaut und ist sehr nett. Was schön ist, ist Sie können festlegen, wie Ihre Tabelle aufgeteilt werden sollte. Zum Beispiel, wenn Sie meist auf einem Benutzer-ID Abfrage können Sie Ihre Tabellen basierend auf Benutzer-ID partitionieren, oder wenn Sie nach Terminen sind Abfragen tun es nach Datum. Was ist das schön ist, dass MySQL genau wissen, welche Partitionstabelle durchsuchen Ihre Werte zu finden. Der Nachteil ist, wenn Sie auf einem Feld suchen sind, dass die Partition nicht definiert, wird sein Gehen durch jede Tabelle zu scannen, was möglicherweise die Leistung verringern könnte.

Während nach der Tat Sie auf die Tabellengröße zeigen könnte, bei der Leistung ein Problem geworden, ich glaube nicht, dass Sie es vorhersagen kann, und schon gar nicht von den Informationen auf einer Website wie diese gegeben!

Einige Fragen, die Sie sinnvoll, sich vielleicht fragen:

  • Ist die Leistung derzeit akzeptabel?
  • Wie wird die Leistung gemessen - ist eine Metrik?
  • Wie können wir erkennen, inakzeptable Leistung?
  • Haben wir messen die Leistung in einer Weise, könnte es uns ermöglichen, eine prognostizierbar Problem?
  • Sind alle unsere Fragen mit ein effizienter Index?
  • Haben wir extreme Belastungen und Volumen auf dem System simuliert?

den MyISAM-Engine verwendet, werden Sie in eine 2 GB harte Grenze auf Tabellengröße ausgeführt, wenn Sie die Standardeinstellung zu ändern.

Nicht immer eine Optimierung anwenden, wenn Sie nicht denken, es gebraucht wird. Im Idealfall soll dies durch Tests bestimmt werden (wie bereits von anderen erwähnt).

Horizontale oder vertikale Partitionierung kann die Leistung verbessern, sondern auch Sie Anwendung erschweren. Tun Sie es nicht, wenn Sie sicher sind, dass Sie es brauchen, und es wird auf jeden Fall helfen.

Die 2G Daten MyISAM Dateigröße ist nur ein Standard und kann bei der Tabellenerzeugung zeit geändert werden (oder später durch eine ALTE, aber es muss die Tabelle neu zu erstellen). Sie gilt nicht für andere Motoren (z InnoDB).

Eigentlich ist dies eine gute Frage für die Leistung. Haben Sie Jay Pipes lesen? Es gibt nicht eine bestimmte Anzahl von Zeilen, aber es gibt eine bestimmte Seitengröße für liest und es kann gute Gründe für die vertikale Partitionierung sein.

Überprüfen Sie seine Kung-Fu-Präsentation und einen Blick durch seine Beiträge haben. Ich bin sicher, Sie werden feststellen, dass er für einige hilfreiche Tipps zu diesem Thema geschrieben.

Sind Sie mit MyISAM? Planen Sie mehr als ein paar Gigabyte speichern? Achten Sie auf MAX_ROWS und AVG_ROW_LENGTH.

Jeremy Zawodny hat einen ausgezeichneten write-up , wie dies zu lösen Problem dar.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top