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

So analysieren und optimieren Sie die Speichernutzung in Redis

Redis ist ein In-Memory-Datenspeicher, was bedeutet, dass der gesamte Datensatz im Arbeitsspeicher (RAM) gespeichert wird. Dies ist zwar großartig für die Leistung, aber wenn die Größe der Daten zu wachsen beginnt, muss immer mehr RAM hinzugefügt werden, um all diese Daten zu speichern. Dies kann schnell unerschwinglich teuer werden, und ehe Sie sich versehen, schießen die Serverkosten in die Höhe, sodass Sie sich Sorgen darüber machen, ob Redis für Sie kostengünstig skalieren kann.

Dies ist natürlich ein häufiges Problem bei jeder Datenbank, schmerzt aber mehr bei In-Memory-Datenbanken wie Redis, da RAM teurer ist als Sekundärspeicher wie Festplatten und SSDs. Wir müssen jedoch bedenken, dass Redis nicht dazu gedacht ist, Terabytes an Daten für Ihre Anwendung zu speichern. Vielmehr soll es verwendet werden, um speziell die Daten zu speichern, die mit einer sehr hohen Rate gelesen (und in geringerem Maße geschrieben) werden müssen, während der Rest Ihrer Daten auf plattengestützten herkömmlichen Datenbanken gespeichert werden kann. Zu diesem Zweck wird Redis am häufigsten als Cache verwendet, der nur die aktivsten Daten mit hohen Anforderungen an den Lese-/Schreibdurchsatz enthält (denken Sie an Anzeigetafeln und Echtzeit-Chat-Nachrichten). Daher ist der Hauptgrund für die übermäßige Speichernutzung mit Redis das Anwendungsverhalten. Ihre Anwendung speichert möglicherweise unnötige Daten, die nicht davon profitieren, in Redis zu sein, oder sogar vollständig redundante Daten, d. h. Daten, die niemals für irgendeinen Zweck verwendet werden, wie es dieser Benutzer getan hat.

Um Probleme mit übermäßiger Speichernutzung zu diagnostizieren, müssen wir natürlich herausfinden, welche Schlüssel den meisten Speicher verwenden, damit wir anfangen können, darüber nachzudenken und zu verstehen, welche Verhaltensweisen der Anwendung das Problem verursachen. Denken Sie daran, dass vorzeitige Optimierung die Wurzel allen Übels ist, und Redis ist da keine Ausnahme. Wir brauchen unbedingt Einblick in die Speichereigenschaften unseres Datensatzes, um überhaupt darüber nachzudenken, wo das Problem liegt und wie wir es beheben können. Im Folgenden untersuchen wir einige der verfügbaren Optionen, um einen Blick in unsere Redis-Daten zu werfen und die Bereiche zu finden, die von einer Optimierung auf Anwendungsebene profitieren können.

Der Befehl MEMORY USAGE

Dieser treffend benannte Befehl ist seit Redis 4.0.0 verfügbar und ist der erste Schritt zum Debuggen von Speicherproblemen mit Redis. Aus der Dokumentation:

Der Befehl MEMORY USAGE meldet die Anzahl der Bytes, die ein Schlüssel und sein Wert benötigen, um im RAM gespeichert zu werden. Die gemeldete Nutzung ist die Summe der Speicherzuweisungen für Daten und administrative Overheads, die ein Schlüssel für seinen Wert benötigt.

Hier ist ein Beispiel:

MEMORY USAGE users_by_reputation
(integer) 2923419

Es wird eine einfache Ganzzahl zurückgegeben, die die Anzahl der Bytes darstellt, die zum Speichern des Schlüssels, des Werts und des internen Overheads verwendet werden. Einfacher geht es nicht, um schnell die Speicherauslastung einer bestimmten Taste zu ermitteln.

Zwei mögliche Nachteile sind:

  1. Dieser Befehl ist nur in Redis 4.0.0 und höher verfügbar. Dies schließt die meisten Cloud-Anbieter aus.
  2. Er teilt Ihnen nur den Speicher mit, der von einer einzelnen Taste verwendet wird. Wenn Sie also nicht im Voraus wissen, welche Taste oder Tasten das Problem verursachen, hat dieser Befehl nur sehr begrenzten Nutzen.

redis-rdb-tools

redis-rdb-tools ist ein raffiniertes kleines Befehlszeilentool, das über die bescheidene MEMORY USAGE hinausgeht Befehl, den wir oben besprochen haben. Es ist ein beliebtes und leistungsstarkes Speicherprofilierungstool, das speziell für Redis entwickelt wurde und eine Redis-Dump-Datei (.rdb) analysiert und ein detailliertes Speicherprofil für jeden Schlüssel im Dump generiert, einschließlich Details wie verwendeter Speicher, Datentyp, Anzahl der Elemente, usw. Es ermöglicht Ihnen auch, die verarbeiteten Schlüssel zu filtern, sodass Sie die Analyse optional für einen bestimmten Schlüssel oder eine Teilmenge von Schlüsseln ausführen können, die einem bestimmten Muster entsprechen. Die Ausgabe der Analyse ist eine CSV-Datei mit Spalten für Schlüssel, verwendeter Speicher, Datentyp, Anzahl der Elemente usw.

Dieses Tool ist so großartig, weil es im Gegensatz zu MEMORY USAGE Befehl, der nur auf einem einzigen Schlüssel funktioniert, analysiert dieses Tool den gesamten Datensatz und spuckt das Ergebnis im CSV-Format aus, was bedeutet, dass Sie es in jede beliebige SQL-Datenbank laden und beliebige Abfragen durchführen, sortieren und filtern können, wie Sie es wünschen , mit der ganzen Leistungsfähigkeit von SQL, wodurch Sie einen guten Einblick in die Speicherkosten Ihrer Daten erhalten. Als Bonus können Sie, wenn Sie Redis-Versionen vor 4.0.0 verwenden, dieses Tool weiterhin verwenden, um einzelne Schlüssel zu analysieren, wenn Sie möchten, da dieses Tool den von Redis erzeugten Binär-Dump analysiert, anstatt sich auf Redis zu verlassen Speicherauslastung melden. Auf der anderen Seite bedeutet dieser unterschiedliche Ansatz, dass die berechnete Speichernutzung eher eine Schätzung als eine genaue Zahl ist, wie in der Projektdokumentation erwähnt. Dies ist jedoch kein wirkliches Problem, wenn unser Ziel darin besteht, Speichernutzungsprobleme zu identifizieren, da wir mehr an relativen Größen der Schlüssel interessiert sind und Schlüssel identifizieren, die deutlich mehr Speicher verbrauchen, als sie verwenden sollten, also ein paar Bytes hier oder da ist wirklich irrelevant.

RDBTools

RDBTools ist ein webbasiertes Tool, das mehrere Tools zur Verwaltung und Optimierung von Redis bietet, wobei der Schwerpunkt auf der Speicheroptimierung liegt. Es wurde aus dem oben besprochenen Open-Source-Projekt redis-rdb-tools geboren. Damit können wir mühelos die Speichernutzung unseres Redis-Servers analysieren, indem wir einfach auf unsere Instanz zeigen und auf „Analysieren“ klicken. Das Tool lädt einen Dump von der laufenden Instanz herunter und analysiert ihn und präsentiert Ihnen eine elegante Benutzeroberfläche zum Filtern und Sortieren Ihrer Schlüssel basierend auf verschiedenen Parametern wie Speichernutzung, Datentyp, Codierung, Anzahl der Elemente usw., ähnlich der Befehlszeile Tool, aber ohne den manuellen Aufwand, der mit dem Erstellen eines Dumps, dem Erstellen des Speicherprofils, dem Einrichten einer Datenbank, dem Importieren des Profils, dem Schreiben und Ausführen von Abfragen usw. verbunden ist.

Abgesehen davon generiert RDBTools auch mehrere Diagramme und Grafiken aus dem Speicherprofil, die Ihnen einen noch besseren Einblick in Ihre Daten ermöglichen, zusammen mit Empfehlungen zur Optimierung der Konfiguration Ihres Redis-Servers, basierend auf Industriestandards und jahrelanger Erfahrung bei der Optimierung von Redis noch mehr Speichereinsparungen. Abgesehen von der Speicheroptimierung gibt es eine Vielzahl anderer Funktionen, die für jeden nützlich sind, der Redis verwendet, wie z

RDBTools ist als Docker-Image verfügbar, im Docker-Hub verfügbar und kann auf Ihrem eigenen Computer ausgeführt werden, sodass Sie sich keine Sorgen über den Verlust sensibler Daten machen müssen. Eine Testversion ist für immer kostenlos verfügbar, mit einigen Nutzungsbeschränkungen. Weitere Informationen zu den verschiedenen verfügbaren kostenpflichtigen Plänen finden Sie auf der Preisseite.

Schlussfolgerung

Arbeitsspeichermangel ist ein unvermeidliches Problem bei der Verwendung von In-Memory-Datenbanken wie Redis. Wie bei allen Optimierungsproblemen besteht der erste Schritt darin, das Problem richtig zu diagnostizieren. Es ist wichtig, der Versuchung zu widerstehen, auf der Grundlage unbestätigter Hypothesen voreilige Schlüsse zu ziehen. „Messen, messen, messen“ ist der Name des Spiels, wenn es um Optimierung geht, und es gibt verschiedene Methoden und Tools, um einen Einblick in Ihre Redis-Speicherprobleme zu erhalten. Welche die beste ist, hängt von Ihren spezifischen Bedürfnissen ab und davon, wo Sie sich im Entwicklungsprozess befinden. Für jemanden, der gerade anfängt, Redis zu verwenden, könnte es ausreichen, einzelne Tasten im Auge zu behalten, während es für starke Benutzer von Redis sicherlich sinnvoll ist, sich für ein dediziertes GUI-Tool mit allem Schnickschnack zu entscheiden, um später Schmerzen zu vermeiden. Wie auch immer Sie sich entscheiden, stellen Sie immer sicher, dass Sie die Wurzel Ihres Problems verstehen, bevor Sie versuchen, es zu lösen, und denken Sie daran, dass Sie bei Speicherproblemen mit Redis wahrscheinlich mehr Speicher verwenden, als Sie wirklich benötigen.