Einzellaufwerk gegen mehrere Laufwerke

7

Im Allgemeinen ist der Engpass bei der Leistung von RDBMS (ich bin ein MySQL-Benutzer) der Festplattenzugriff. SSD bietet im Vergleich zu herkömmlichen Spindelantrieben eine hervorragende Leistung.

Frage: Ist es möglich, die Leistung durch Anschließen mehrerer Laufwerke mit reduziertem Speicherplatz zu verbessern, da auf diese Weise mehr Köpfe zum Lesen von Daten verfügbar sind?

Möchten Sie ein 2-TB-Laufwerk mit 7,2.000 U / min durch 4 Laufwerke mit 7,2.000 U / min und 500 GB ersetzen?

Rick James
quelle

Antworten:

7

Dies kann sehr stark von der Speicher-Engine abhängen.

Für MyISAM wäre dies eine großartige Idee, da Sie Daten so zusammenhängend machen können, wie Sie möchten. Dies würde Abfragen mit Massenvorgängen und Scans mit großer Reichweite zugute kommen. Das Toolset zum Komprimieren und Reparieren von MyISAM zur Verbesserung des Tabellenformats kann den Zugriff ebenfalls etwas verbessern. IMHO gleichzeitige INSERTs könnten in einer solchen Festplattenumgebung gedeihen.

InnoDB ist eine ganz andere Geschichte.

Wenn Sie innodb_file_per_table deaktiviert haben, können Daten über ibdata1 verteilt und somit auf mehrere Datenträger verteilt werden. Sie könnten OPTIMIZE TABLE für eine InnoDB-Tabelle ausführen und die Daten- und Indexseiten zusammenhängend machen, dies könnte jedoch zwei Probleme verursachen:

  1. Lässt die ibdata1 wachsen
  2. Verschlechtern Sie die Leistung im Laufe der Zeit

Vergessen Sie nicht die vier Datentypen in ibdata1:

  • Tabelle MetaData
  • Tabellendatenseiten
  • Indexdatenseiten
  • MVCC- Daten

MVCC-Daten werden ständig geschrieben, um die Datenintegrität zu schützen. Es gibt auch eine ständige Interaktion mit ib_logfile0 und ib_logfile1 (Redo-Logs). Alle 10 Sekunden werden ständig Daten aus dem InnoDB-Pufferpool zurück in den gelöscht. Insgesamt kann man mit Sicherheit sagen, dass die Verteilung von Daten auf mehrere Festplatten und die E / A-Leistung eine geringfügige bis bescheidene Leistungsverbesserung zeigen können, bis innerhalb von ibdata1 eine ausreichende Fragmentierung vorliegt.

Wenn nun innodb_file_per_table aktiviert ist, können die Dinge etwas chaotischer sein. Hier ist warum:

Sobald Sie ibdata1 bereinigt und alle InnoDB-Tabellen von ibdata1 getrennt haben , haben Sie ein kleineres ibdata1. Jeder Zugriff auf eine InnoDB-Tabelle erfordert jedoch die ständige Navigation über ibdata1 über Tabellenmetadaten. Sie können die Tabellenmetadaten (ibdata1) buchstäblich nicht semantisch von der Tabelle (.ibd) trennen. Wo immer ibdata1 lebt, müssen Festplatten-E / A immer ibdata1 durchlaufen.

Gesamteffekt: Die Tabellenfragmentierung ist auf .ibd-Dateien beschränkt und kann mit OPTIMIZE TABLE reduziert und neu organisiert werden. Es wird jedoch keine zusätzliche Verbesserung der E / A-Leistung erzielt.

Was ist mit dem Speichern aller .ibd-Dateien auf einem anderen Satz von Datenträgern außer ibdata1 und der Verwendung von Symlinks? Laut Percona schafft das mehr Chaos .

FAZIT

Wenn es darum geht, mehrere Laufwerke über ein einziges Laufwerk zu verwenden, bevorzuge ich MyISAM gegenüber InnoDB.

RolandoMySQLDBA
quelle
5

Ja, mehrere Laufwerke bieten dank der wunderbaren Technologie, die wir RAID nennen, einen besseren Durchsatz. Für eine Datenbank benötigen Sie RAID 10 (gestreifte Spiegel).

Mit 4 (N) Laufwerken würden Sie Ihre Schreibgeschwindigkeit verdoppeln (N / 2) und den sequentiellen Lesedurchsatz vervierfachen (N). Die Suchzeiten bleiben jedoch ungefähr gleich, und Sie verlieren die Hälfte des Speicherplatzes durch Spiegeln.

Eevar
quelle
Wenn der Durchsatz für große Blöcke ein wesentlicher Faktor in einer relationalen Datenbank ist, machen Sie eindeutig etwas falsch. Gespiegelte Datenträger geben Ihnen zwar beim Lesen einen deutlichen Schub, aber Striping ist etwas zwischen ineffektiv und kontraproduktiv.
Simon Richter
Bitte erläutern Sie ..
Eevar
Der Geschwindigkeitsgewinn in einem Striping-Setup resultiert daraus, dass die Köpfe bei großen Lese- / Schreibvorgängen seltener neu positioniert werden müssen. Datenbanken greifen jedoch normalerweise auf kleine Bereiche zu, sodass Suchzeiten der begrenzende Faktor bleiben. Mit dem Spiegel können wir eine Festplatte auswählen, die sich während des Lesens in der Nähe oder im Leerlauf befindet. Während die Suchzeit für einzelne Blöcke gleich bleibt, ist die kumulierte Suchzeit für eine Liste von Blöcken geringer.
Simon Richter
Beim Striping wird eine 1: 1-Zuordnung zwischen Datenträgern und Blöcken beibehalten. Bei einzelnen Datenseitenzugriffen besteht die Möglichkeit, dass Sie an Leistung gewinnen, wenn der Spiegel, auf den der Streifen zugegriffen wird, auf den aktuell zugegriffen wird, über eine inaktive Festplatte verfügt. Für jeden Zugriff über eine Streifengrenze (der wahrscheinlich während eines Index-Scans wahrscheinlich ist) sind jedoch mehrere Festplatten erforderlich um den gesamten Index verfügbar zu machen. Da Sie Ihre Datenbank so optimieren würden, dass Indizes für häufig verwendete Abfragen beibehalten werden, verlangsamt Striping wahrscheinlich häufig auftretende und schnellere Abfragen.
Simon Richter
Es tut mir leid, aber ich habe nie eine signifikante Verlängerung der Suchzeiten aufgrund von Streifen gesehen. Wikipedia schlägt den gegenteiligen Effekt vor .
Eevar