- printf("Map size: %zu \n", mei.me_mapsize);
- printf("Last transaction ID: %zu\n", mei.me_last_txnid);
- printf("Last page used: %zu\n", mei.me_last_pgno);
- printf("Max readers: %u\n", mei.me_maxreaders);
- printf("Number of readers used: %u\n", mei.me_numreaders);
+ printf("Environment Info\n");
+ printf(" Map address: %p\n", mei.me_mapaddr);
+ printf(" Map size: %zu\n", mei.me_mapsize);
+ printf(" Page size: %u\n", mst.ms_psize);
+ printf(" Max pages: %zu\n", mei.me_mapsize / mst.ms_psize);
+ printf(" Number of pages used: %zu\n", mei.me_last_pgno+1);
+ printf(" Last transaction ID: %zu\n", mei.me_last_txnid);
+ printf(" Max readers: %u\n", mei.me_maxreaders);
+ printf(" Number of readers used: %u\n", mei.me_numreaders);
+ }
+
+ if (freinfo) {
+ MDB_cursor *cursor;
+ MDB_val data;
+ size_t pages = 0, *iptr;
+
+ printf("Freelist Status\n");
+ dbi = 0;
+ rc = mdb_cursor_open(txn, dbi, &cursor);
+ if (rc) {
+ printf("mdb_cursor_open failed, error %d %s\n", rc, mdb_strerror(rc));
+ goto txn_abort;
+ }
+ rc = mdb_stat(txn, dbi, &mst);
+ if (rc) {
+ printf("mdb_stat failed, error %d %s\n", rc, mdb_strerror(rc));
+ goto txn_abort;
+ }
+ while ((rc = mdb_cursor_get(cursor, NULL, &data, MDB_NEXT)) == 0) {
+ iptr = data.mv_data;
+ pages += *iptr;
+ }
+ mdb_cursor_close(cursor);
+ prstat(&mst);
+ printf(" Free pages: %zu\n", pages);