2016-11-09 1 views
3

Lors de la création d'un environnement lmdb, je peux spécifier la taille de la carte. Existe-t-il un moyen de déterminer à quel point la taille de la carte est utilisée? En d'autres termes, j'ai besoin de savoir combien il reste d'espace libre pour résoudre le problème du manque d'espace avant qu'il ne se produise. La seule chose à laquelle je pourrais penser est de parcourir toutes les bases de données et d'utiliser mdb_env_stat pour obtenir le nombre de pages de branches, de feuilles et de débordements. Faites le somme de tous les dbs (taille de la page fois) et comparez-la à la taille actuelle de la carte. Est-ce la bonne façon de calculer l'espace utilisé?lmdb: comment déterminer l'espace libre restant?

Répondre

4

C'est en effet l'approche que j'utilise aussi (et la seule que j'ai pu trouver).

Pour chaque base de données:

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);