Zum Hauptinhalt springen

Protokollkomprimierung

Wenn Garnet mit der Konfiguration für die Speicherung mithilfe von EnableStorageTier oder --storage-tier ausgeführt wird, werden Daten, die nicht in den Speicher passen, in den Plattenspeicher ausgelagert. Daten auf der Festplatte werden in Segmente aufgeteilt, wobei für jedes Segment eine physische Datei vorhanden ist. Die Größe jedes Segments wird mithilfe von SegmentSize oder --segment für den Hauptspeicher und ObjectStoreSegmentSize oder --obj-segment für den Objektspeicher konfiguriert.

Mit der Zeit werden weiterhin Dateisegmente erstellt und hinzugefügt, sodass wir eine Möglichkeit benötigen, ältere Segmente zu löschen. Hier kommt die Komprimierung ins Spiel.

Auslösen der Komprimierung

Sie können CompactionFrequencySecs oder --compaction-freq konfigurieren, wodurch eine Aufgabe erstellt wird, die sich in regelmäßigen Abständen meldet, um die Komprimierung zu versuchen. Wenn die Anzahl der Segmente auf der Festplatte CompactionMaxSegments oder --compaction-max-segments überschreitet, wird die Komprimierung mit der angegebenen Strategie ausgeführt, sodass wir höchstens CompactionMaxSegments aktive Segmente haben. Die ältesten Segmente sind unsere ausgewählten Kandidaten für die Komprimierung. Für den Objektspeicher ist der entsprechende Schalter ObjectStoreCompactionMaxSegments oder --obj-compaction-max-segments.

Komprimierungsstrategie

Die Kandidatensegmente für die Komprimierung werden mithilfe einer Strategie verarbeitet, die mit dem Schalter CompactionType oder --compaction-type angegeben wird. Verfügbare Optionen sind

  • Keine: Es wird keine Komprimierung durchgeführt.
  • Verschieben: Die inaktiven Segmente werden einfach zum Löschen markiert.
  • Scannen: Das gesamte Protokoll wird gescannt, um zu prüfen, welche Datensätze in den zu komprimierenden Kandidatensegmenten "live" sind, und diese Live-Datensätze werden an das Ende des Protokolls (im Speicher) kopiert.
  • Nachschlagen: Für jeden Datensatz in den zu komprimierenden Kandidatensegmenten führen wir eine zufällige Nachschlageoperation durch, um zu prüfen, ob er live ist. Wie zuvor werden die Live-Datensätze an das Ende des Protokolls (im Speicher) kopiert.

Segmentlöschung

Nachdem die Komprimierungsstrategie auf die Kandidatensegmente angewendet wurde, sind diese inaktiv und können gelöscht werden. Die inaktiven Segmente werden jedoch standardmäßig nicht sofort von der Festplatte gelöscht, da dies bei einem Serverabsturz vor dem nächsten Checkpoint zu Datenverlust führen kann (und AOF deaktiviert ist). Stattdessen wird beim nächsten Checkpoint automatisch die Löschung der inaktiven Segmente veranlasst.

Wenn Sie keine Checkpoints erstellen und die physische Löschung von inaktiven Segmenten erzwingen möchten, unmittelbar nachdem die Komprimierungsstrategie angewendet wurde, können Sie den Überschreibungsschalter CompactionForceDelete oder --compaction-force-delete angeben. Beachten Sie, dass diese Option bei der Wiederherstellung zum vorherigen Checkpoint zu Datenverlust führen kann, wenn AOF deaktiviert ist.