Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Redis-Speicher und CPU-Spitzen

Wenn ich weiter damit experimentiere und etwas über Redis-Persistenz lese, denke ich, dass die folgenden Beobachtungen gemacht werden können:

  • Wenn Sie RDB verwenden (die Standardeinstellungen), wird Redis jedes Mal einen Fork geben, wenn ein save wird Vorgang ausgelöst wird, der (standardmäßig) auf mindestens alle 15 Minuten eingestellt ist . Wenn mehr Schreibvorgänge in Redis durchgeführt werden, dann sind RDB-Schreibvorgänge so häufig wie einmal alle 60 Sekunden .
  • Jeder Fork verwendet eine "Copy-on-Write"-Speicherzuweisung, was bedeutet, dass sich der Speicher zwar nicht verdoppelt, aber bei Tools wie ps so erscheint , htop und dergleichen.
  • Der Fork selbst kann eine ziemlich CPU-intensive Operation sein, insbesondere auf xen-basierten virtuellen Hosts (was wir derzeit verwenden).
  • Der Schreibvorgang scheint vollständig zu überschreiben die vorhandene RDB-Datei. Es werden nicht nur die Änderungen geschrieben, sondern gesamt abgelegt Datensatz auf Festplatte.

Auf einem bescheidenen virtuellen Host mit 4 GB RAM und einem Datensatz von etwa 750 MB (als ich die Frage gestellt habe) wird dies also ziemlich "teuer". Wir haben diese CPU/Speicher-Spitzen sowie erhöhte E/A beobachtet, selbst bei relativ mäßiger Last/Redis-Nutzung.

Um meine eigene Frage zu beantworten - dies scheint das "erwartete" Verhalten zu sein.

Um die Situation zu verbessern, haben wir uns entschieden, unsere Konfiguration auf eine Kombination aus RDB und AOF umzustellen. AOF (Append Only File), scheint nur Änderungen zu schreiben auf Festplatte. Sie können (und sollten) die AOF-Datei immer noch so konfigurieren, dass sie neu geschrieben wird (mithilfe von auto-aof-rewrite-percentage und auto-aof-rewrite-min-size die Einstellungen). Es ist auch ratsam, RDB weiterhin für Snapshots zu verwenden. In dieser Konfiguration können Sie jedoch wahrscheinlich seltener vollständige Neuschreibungen/Snapshots durchführen und dennoch eine ziemlich gute Leistung und eine noch bessere Haltbarkeit aufrechterhalten.