2016-03-24 3 views
-1

Wir haben festgestellt, dass einige unserer MyISAM .MYD-Dateien (MySQL-Datenbank-Tabellen) extrem langsam kopieren. Sowohl das C: Laufwerk als auch das Laufwerk D: sind SSDs; Die theoretische Grenze liegt bei 500 MB/s Datenrate. Für Timings schalten wir den MySQL-Dienst aus. Hier sind einige Beispiel-Timing für die Datei test.myd mit 6GB:Sehr langsame Kopie von MyISAM .MYD-Datei

NET STOP MYSQL56 
Step1: COPY D:\MySQL_Data\test.myd C:\Temp  --> 61MB/sec copy speed 
Step2: COPY C:\Temp\test.myd D:\temp   --> 463 MB/sec 
Step3: COPY D:\Temp\test.myd c:\temp\test1.myd --> 92 MB/sec 

Seltsame Ergebnisse; Warum sollte die Geschwindigkeit in einer Richtung so anders sein als in der anderen Richtung? Lasst uns versuchen, diese:

NET START MYSQL56 
in MySQL: REPAIR TABLE test; (took about 6 minutes) 
NET STOP MYSQL56 
Step4: COPY D:\MySQL_Data\test.myd C:\Temp  --> 463 MB/sec 
Step5: COPY C:\Temp\test.myd D:\temp   --> 463 MB/sec 
Step6: COPY D:\Temp\test.myd c:\temp\test1.myd --> 451 MB/sec 
  • jemand den Unterschied in der Kopiergeschwindigkeit erklären kann?
  • Was könnte die langsame Kopiergeschwindigkeit an erster Stelle verursacht haben?
  • Was würde REPARATUR einen Unterschied machen, aber OPTIMIZE, die wir zuerst versuchten, machte keinen Unterschied.
  • Würde es irgendeine Art von Leistung auf SQL-Ebene mit der ursprünglichen Version (dh vor der REPARATUR) geben? Entschuldigung, ich habe diese nicht getestet, bevor diese Tests ausgeführt wurden.

Antwort

0
  • REPAIR würde der Tabelle scannen durch und beheben Probleme, die er findet. Dies bedeutet, dass die Tabelle vollständig gelesen wird.

  • OPTIMIZE kopiert die gesamte Tabelle über, dann RENAMEs es zurück zum alten Namen. Das Ergebnis ist so, als wäre die gesamte Tabelle gelesen worden.

  • COPY liest eine Datei und schreibt in die andere Datei. Wenn die Zieldatei nicht existiert, muss sie erstellt werden. Dies ist ein langsamer Prozess unter Windows.

  • Beim Lesen einer Datei werden die Daten von der Festplatte (in Ihrem Fall SSD) geholt und im RAM zwischengespeichert. Ein zweiter Lesevorgang verwendet die zwischengespeicherte Kopie und ist dadurch schneller.

Dieser letzte Aufzählungszeichen kann die Diskrepanzen erklären Sie gefunden.

Eine weitere Möglichkeit ist "wear levelling" und/oder "Erase-before-write" - zwei Eigenschaften von SSDs.

Wear Leveling ist, wenn die SSD Dinge bewegt, um zu viel "Verschleiß" zu vermeiden. Beachten Sie, dass ein SSD-Block "verschleißt", nachdem N in ihn geschrieben hat. Durch das Bewegen von Blöcken wird dieser physikalische Mangel vermieden. (Dies ist eine Eigenschaft von SSDs der Enterprise-Klasse, kann aber bei billigen Laufwerken fehlen.)

Bevor ein Schreibvorgang auf einer SSD erfolgen kann, muss der Punkt zuerst "gelöscht" werden. Dieser zusätzliche Schritt ist lediglich eine physische Voraussetzung für die Funktionsweise von SSDs. Ich bezweifle, ob es in deine Frage eingreift, aber vielleicht.

Ich entferne [mysql] und [myisam] Tags, da die Frage wirklich nur für Datei COPY mit Windows und SSD gilt.

+0

Rick, danke, dass du dir das angeschaut hast. Ich verstehe immer noch nicht, warum die Tabellendatei nach der MySQL REPAIR so viel schneller kopiert wurde. –

Verwandte Themen