2016-11-09 7 views
3

Beim Erstellen von LMDB-Umgebung kann ich die Größe der Karte angeben. Gibt es eine Möglichkeit, zu irgendeinem Zeitpunkt festzustellen, wie viel von der Kartengröße verbraucht ist?lmdb: Wie kann man freien Speicherplatz bestimmen?

Mit anderen Worten, ich muss herausfinden, wie viel freier Speicherplatz übrig ist, um das Problem des Platzmangels zu lösen, bevor es passiert.

Das einzige, was mir einfällt, ist, alle Datenbanken zu durchsuchen und mdb_env_stat zu verwenden, um die Anzahl der Zweig-, Blatt- und Überlaufseiten zu erhalten. Summiere alles über alle dbs (mal Seitengröße) und vergleiche mit der aktuellen Kartengröße. Ist das der richtige Weg, um genutzten Raum zu berechnen?

Antwort

4

Das ist in der Tat der Ansatz, den ich auch verwende (und das einzige, was ich finden konnte).

Für jede Datenbank:

MDB_stat stat; 
mdb_stat(d->transaction, d->dbi, &stat); 
auto dbSize = stat.ms_psize * (stat.ms_leaf_pages + stat.ms_branch_pages + stat.ms_overflow_pages); 
Verwandte Themen