Index (2)

Abfrageprozess

1. Durchsuchen Sie im Suchprozess der Abfrageanweisung im Indexbaum zunächst Schicht für Schicht den B+-Baum von der Wurzel des Baums bis zu den Blattknoten und suchen Sie die Datensätze innerhalb der Datenseite mithilfe der Dichotomiemethode.
1) Bei gewöhnlichen Indizes müssen Sie nach dem Finden des ersten Datensatzes, der die Bedingung erfüllt, den nächsten Datensatz finden, bis der erste Datensatz die Bedingung nicht erfüllt.
2) Bei einem eindeutigen Index wird die Suche beendet, nachdem der erste Datensatz abgefragt wurde, der die Bedingungen erfüllt, da der Index die Eindeutigkeit definiert.

2. Der durch die beiden unterschiedlichen Methoden verursachte Leistungsunterschied ist relativ gering. InnoDB-Daten werden in Einheiten von Datenseiten gelesen und geschrieben. Wenn ein Datensatz gelesen werden muss, wird der Datensatz nicht von der Festplatte gelesen, sondern der Datensatz wird gelesen. Die gesamte Datenseite wird in den Speicher eingelesen.
1) In InnoDB beträgt die Standardgröße jeder Datenseite 16 KB.
2) Die normale Indexsuche und Beurteilung des nächsten Datensatzes erfordert nur eine Zeigersuche und eine Berechnung, aber der durchsuchte Datensatz ist zufällig der letzte Datensatz der Datenseite, sodass beim Abrufen des nächsten Datensatzes die nächste Datenseite gelesen werden muss Die Bedienung ist etwas kompliziert.
3) Bei ganzzahligen Feldern kann eine Datenseite fast tausend Schlüssel speichern, und die Wahrscheinlichkeit, die nächste Datenseite zu lesen, ist relativ gering, sodass sie bei der Berechnung des durchschnittlichen Leistungsunterschieds ignoriert wird.

Aktualisierungsprozess

1. Wenn für die Update-Anweisung die Datenseite direkt im Speicher aktualisiert wird, sich die Datenseite jedoch nicht im Speicher befindet, speichert InnoDB die Aktualisierung im Änderungspuffer zwischen, ohne die Datenkonsistenz zu beeinträchtigen.
1) Lesen Sie die Datenseite nicht von der Festplatte, lesen Sie die Datenseite in den Speicher, wenn die nächste Abfrage auf die Datenseite zugreifen muss, und führen Sie dann die mit der Datenseite verbundenen Vorgänge im Änderungspuffer aus, um die Richtigkeit sicherzustellen Datenlogik.
2) Der Prozess des Anwendens der Vorgänge im Änderungspuffer auf die ursprüngliche Datenseite ist die Zusammenführung. Durch den Zugriff auf die Datenseite wird die Zusammenführung ausgelöst, und der Hintergrundthread des Systems wird ebenfalls regelmäßig zusammengeführt, und der Zusammenführungsvorgang wird ebenfalls ausgeführt Die Datenbank ist normalerweise geschlossen.

2. Der Änderungspuffer besteht aus persistenten Daten, die in den Speicher kopiert und auf die Festplatte geschrieben werden.
1) Das Lesen von Daten in den Speicher erfordert einen Pufferpool. Durch die Verwendung von Änderungspuffern können Lesevorgänge auf der Festplatte reduziert, die Ausführungsgeschwindigkeit von Anweisungen verbessert, Speicherbelegung vermieden und die Speichernutzung verbessert werden.
2) Die Speichergröße des vom Änderungspuffer belegten Pufferpools kann dynamisch über den Parameter innodb_change_buffer_max_size festgelegt werden. Wenn er auf 50 eingestellt ist, bedeutet dies, dass er höchstens 50 % des Pufferpools ausmachen kann.

Änderungspuffer
1, der eindeutige Index verwendet den Änderungspuffer nicht, der gemeinsame Index jedoch.
1) Eindeutiger Index. Bei allen Aktualisierungen muss zunächst die Einzigartigkeit des Index beurteilt werden. Wenn Sie beispielsweise Daten einfügen, müssen Sie beurteilen, ob der Schlüssel in der Tabelle vorhanden ist, und dann die Datenseite in den Speicher einlesen. Wenn kein Konflikt vorliegt , fügen Sie die Daten ein und die Anweisungsausführung endet. Es ist nicht erforderlich, den Änderungspuffer zu verwenden.
2) Gewöhnliche Indizes können den Änderungspuffer verwenden, und die Aktualisierung wird im Änderungspuffer aufgezeichnet und die Ausführung der Anweisung endet.

2. Das Lesen von Daten von der Festplatte in den Speicher erfordert einen zufälligen E/A-Zugriff, was einen der kostspieligsten Vorgänge in der Datenbank darstellt. Der Änderungspuffer reduziert den zufälligen Festplattenzugriff und die Aktualisierungsleistung wird erheblich verbessert.

3. Zusammenführen ist der eigentliche Datenaktualisierungsprozess. Vor dem Zusammenführen der Datenseite ist die Leistungsverbesserung umso offensichtlicher, je mehr Änderungen im Änderungspuffer aufgezeichnet werden.
1) Im Abrechnungs- und Protokollgeschäft mit mehr Schreibvorgängen und weniger Lesevorgängen ist die Wahrscheinlichkeit eines unmittelbaren Zugriffs nach dem Schreiben der Seite gering und die Wirkung des Änderungspuffers gut.
2) Abfrage unmittelbar nach der Geschäftsaktualisierung, die Aktualisierung wird im Änderungspuffer aufgezeichnet, aber der sofortige Zugriff auf diese Datenseite löst den Zusammenführungsprozess aus, die Anzahl der Direktzugriffs-E/As wird nicht reduziert, wohl aber die Wartungskosten des Änderungspuffers erhöht werden, und der Änderungspuffer kann geschlossen werden.
3) Gewöhnliche Indizes und eindeutige Indizes sollten so weit wie möglich gewöhnliche Indizes auswählen und den Änderungspuffer gemeinsam verwenden, damit die Aktualisierungsoptimierung offensichtlich ist.

Ändern Sie Puffer und Redo-Protokoll
1 und führen Sie eine Aktualisierungsanweisung aus:
1) Wenn sich die Datenseite im Speicher befindet, aktualisieren Sie den Speicher direkt und zeichnen Sie gleichzeitig im Redo-Protokoll auf. Führen Sie dann den Abfragevorgang aus und kehren Sie direkt aus dem Speicher zurück.
2) Wenn sich die Datenseite nicht im Speicher befindet, aktualisieren Sie sie. Es wird im Änderungspufferbereich des Speichers aufgezeichnet und im Redo-Protokoll aufgezeichnet. Anschließend wird der Abfragevorgang ausgeführt. Es ist erforderlich, die Datenseite zu lesen Von der Festplatte in den Speicher übertragen, dann den Änderungspuffervorgang anwenden und schließlich das richtige Ergebnis zurückgeben.

2. Eine Aktualisierungsanweisung fügt mehrere Datensätze ein, schreibt sie gemäß den oben genannten Prinzipien in den Speicher oder Änderungspuffer, schreibt zwei Speicherorte, schreibt mehrere Datensätze nacheinander in das Redo-Protokoll und schreibt einmal auf die Festplatte.

3. Das Redo-Protokoll speichert hauptsächlich den E/A-Verbrauch beim zufälligen Schreiben auf die Festplatte (konvertiert in sequentielles Schreiben), und der Änderungspuffer speichert hauptsächlich den E/A-Verbrauch beim zufälligen Lesen der Festplatte.

おすすめ

転載: blog.csdn.net/mei_true/article/details/127539909