In der Couchbase-Dokumentation heißt es: "Mit der Festplattenpersistenz können Sie Sicherungs- und Wiederherstellungsvorgänge durchführen und Ihre Datasets größer als die integrierte Caching-Ebene erweitern", aber ich kann nicht erreichen, dass sie funktioniert.
Ich teste Couchbase 2.5.1 auf einem Cluster mit drei Knoten, wobei insgesamt 56,4 GB Speicher für den Bucket konfiguriert sind. Nach ~ 124.000.000 100-Byte-Objekten - etwa 12 GB Rohdaten - hört auf, weitere Puts zu akzeptieren . 1 Replikat ist konfiguriert.
Gibt es eine Magie "weitermachen und auf die Festplatte verschütten", die ich vermisse? Im Fehlerprotokoll sind keine verdächtigen Einträge vorhanden.
Es werden Daten unterstützt, die größer als der Speicher sind - siehe Ejection und Working-Set-Management im Handbuch.
Welche Fehler erhalten Sie in Ihrer Instanz von Ihrer Anwendung? Wenn Sie beginnen, das Wasserzeichen mit niedrigem Speicherinhalt zu erreichen, müssen die Objekte aus dem Speicher ausgeworfen werden, um Platz für neuere Objekte zu schaffen.
Abhängig von der Geschwindigkeit / Geschwindigkeit der eingehenden Daten kann dies dazu führen, dass TEMP_OOM
-Fehler an den Client zurückgeschickt werden - es muss vor der Ausführung des Satzes vorübergehend zurückgesetzt werden, aber diese sollten in den meisten Fällen selten sein . Details zum Umgang mit diesen finden Sie im Entwicklerhandbuch .
Ich vermute, dass nicht die rohen Daten Ihren Speicher füllen, sondern die damit verbundenen Metadaten. Couchbase 2.5 benötigt 56 Bytes pro Schlüssel. In Ihrem Fall wären das ungefähr 7 GB Metadaten, also viel weniger als Ihr Speicherkontingent.
Aber ... Metadaten können im Speicher fragmentiert werden. Wenn Sie alle 124M-Objekte in einer sehr kurzen Zeit stapelweise einfügen würden, würde ich annehmen, dass Sie eine Fragmentierung von mindestens 90% erhalten haben. Das bedeutet, dass mit nur 7GB nützlichen Metadaten der benötigte Speicherplatz Ihren Arbeitsspeicher mit vielen ungenutzten Teilen in jedem zugewiesenen Block gefüllt hat.
Die Lösung für Ihr Problem besteht darin, die Daten zu defragmentieren. Es kann entweder manuell oder bei Bedarf ausgelöst werden:
Wenn Sie weitere Informationen darüber benötigen, warum Komprimierung erforderlich ist, können Sie diesen Blogartikel von Couchbase .
Auch wenn keines Ihrer Dokumente im RAM gespeichert ist, speichert CouchBase immer noch alle Dokumenten-IDs und Metadaten im Speicher (dies wird sich in Version 3 ändern) und benötigt auch etwas verfügbaren Arbeitsspeicher, um effizient zu laufen. Der relevante Abschnitt in den Dokumenten: Ссылка
Beachten Sie, dass Sie bei Verwendung eines Replikats doppelt so viel RAM benötigen. Die Formel lautet grob:
(56 + avg_size_of_your_doc_ID) * nb_docs * 2 (Replikat) * (1 + Headroom) / (high_water_mark)
Je nach Konfiguration ist es durchaus möglich, dass 124.000.000 Dokumente 56 GB Speicher benötigen.
Tags und Links couchbase