Ich werde im Moment davon ausgehen, dass Sie wirklich versuchen, ein Verständnis dafür zu erlangen, was die Datenraten in der realen Welt bestimmen und nicht nur theoretisch. Im Allgemeinen sind alle diese Details heute etwas banal, es sei denn, Sie schreiben Gerätetreiber für das Betriebssystem, wie es meine Firma einmal getan hat, oder das Datenbankmodul selbst. Diese tatsächlichen Details werden meist durch viele Faktoren der Hardware und des Betriebssystems maskiert, gefiltert, kompensiert und verborgen, sodass Sie normalerweise nicht beobachten können, was direkt passiert.
Noch immer zu verstehen, was die Ursachen verursacht und keine Leistungsprobleme verursacht, kann wichtig sein.
Die durchschnittliche "Lesedatenrate" für Datenbanken hängt hauptsächlich von der Größe der E / A ab, die Sie auf einmal verschieben, und davon, ob sie zusammenhängend ist oder nicht. Sie ist auch von der Festplatte selbst abhängig und meldet ihre wahren Hardware-Parameter, die oft nur simuliert werden. (Gibt es beispielsweise wirklich 600 Sektoren pro Spur? Da die Außenspur einer Platte viel größer ist, werden in den letzten 30 Jahren bei jeder Festplatte wesentlich mehr Sektoren auf der Außenspur vorhanden sein als auf der Innenseite.) Hier einige Leistungsbeispiele Das waren die wahren Parameter:
Datenbank-Lesevorgänge: Normalerweise bedeutet das, dass die Sektornummern auf der gesamten Festplatte zufällig gelesen werden (von vermutlich 1024 Bytes von 2 aufeinanderfolgenden 512 Sektoren) und sich keiner der Sektoren im Speicher oder in einem anderen Cache befindet. In diesem Fall beträgt Ihre durchschnittliche Datenrate werde sein:
10 MS = Head Seek Neupositionierung: (Beachten Sie, dass Sie nur 100 Suchvorgänge in einer Sekunde ausführen können. Daher werden 100 KB / Sek. Die schnellsten sein, die Sie je nach Zufall 1024 lesen können.)
1? MS = Command Overhead = unbekannt: Dies war bisher signifikant, bis zu 8 MS. Heute ist es wahrscheinlich mehr abhängig von Ihrem Betriebssystem, das Ihre Anfragen effizient verarbeitet. Wenn Ihr System auch viele MB auf die Festplatte auslagert, führt dies zu einer erheblichen Verlangsamung. Die IO von und zu den Festplatten sind heute wahrscheinlich weniger als eine MS. Dies kann leicht mit einer SSD getestet werden, um den Bus- und Firmware-Overhead einer sich drehenden HD zu simulieren. Hier eingeschlossen ist normalerweise die Zeit zum Wechseln der Leseköpfe, vorausgesetzt, Sie waren bereits auf der richtigen Spur oder dem richtigen Zylinder. Dies beinhaltet auch die Rückgabe der verschobenen Daten an das Betriebssystem. Achten Sie darauf, dass die Gesamtunterbrechungszeit der CPU <1% bleibt, was auf ein Problem mit der Festplattenhardware hinweisen kann. Wilde Vermutung? <1 MS, was noch signifikant sein könnte.
3,3 MS = Drehen, bis sich der Sektor unter den Köpfen befindet: 9000 U / min / 60 s = 6,67 MS. Die Wahrscheinlichkeit, am nächsten oder am weitesten entfernt zu sein, beträgt 50%. Daher beträgt die Verzögerung für jede IO 3,33 MS. Hinweis: Das bedeutet, dass ein zufälliger Lesevorgang, wenn der Kopf bereits über der korrekten Spur positioniert ist, immer noch 3,33 MS beträgt und dass Ihre maximale Datenrate bei 1k IO niemals 300 KB / Sek.
0,022 MS = Kopflesezeit: 6,67 MS / 600 Sektoren * 2 = 1024 Lesen ==> 0,022 MS. Dies bedeutet, dass die maximale Datenrate dieser Platte 1 / 0,022 MS = 45.000 * 1024 = 46 MB / Sek beträgt. Für Datenbanklesevorgänge / -abfragen ist dies völlig unerheblich. Wenn Sie jedoch die gesamte Datenbank verschieben, ist dies der wichtigste Faktor.
In diesem Fall liegt Ihre "Datenbank-Lesegeschwindigkeit" bei ~ 14.355 MS = 70 KB / Sek. Beachten Sie, dass die Rate die Hälfte ist, wenn der IO 512 war (die 022-MS ignoriert). Mit 2.048 ist der Preis doppelt. Der wichtigste Parameter ist also die Größe der zusammenhängenden Sektoren, bis Sie eine vollständige Spurablesung erhalten (vorausgesetzt, alle Plattensektoren selbst sind zusammenhängend.)