[\c
.BR \-e ]
[\c
-.BR \-f [ f ]]
+.BR \-f [ f [ f ]]]
[\c
.BR \-n ]
[\c
Display information about the database environment.
.TP
.BR \-f
-Display information about the environment freelist. If \fB\-ff\fP is given,
-display the full list of page IDs in the freelist.
+Display information about the environment freelist.
+If \fB\-ff\fP is given, summarize each freelist entry.
+If \fB\-fff\fP is given, display the full list of page IDs in the freelist.
.TP
.BR \-n
Display the status of an LMDB database which does not use subdirectories.
/* mdb_stat.c - memory-mapped database status tool */
/*
- * Copyright 2011 Howard Chu, Symas Corp.
+ * Copyright 2011-2013 Howard Chu, Symas Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
static void usage(char *prog)
{
- fprintf(stderr, "usage: %s dbpath [-e] [-f[f]] [-n] [-a|-s subdb]\n", prog);
+ fprintf(stderr, "usage: %s dbpath [-e] [-f[f[f]]] [-n] [-a|-s subdb]\n", prog);
exit(EXIT_FAILURE);
}
iptr = data.mv_data;
pages += *iptr;
if (freinfo > 1) {
- size_t i, j;
+ char *bad = "";
+ size_t pg, prev;
+ ssize_t i, j, span = 0;
j = *iptr++;
- printf(" Transaction %zu, %zu pages\n",
- *(size_t *)key.mv_data, j);
- for (i=0; i<j; i++)
- printf(" %zu\n", iptr[i]);
+ for (i = j, prev = 1; --i >= 0; ) {
+ pg = iptr[i];
+ if (pg <= prev)
+ bad = " [bad sequence]";
+ prev = pg;
+ pg += span;
+ for (; i >= span && iptr[i-span] == pg; span++, pg++) ;
+ }
+ printf(" Transaction %zu, %zd pages, maxspan %zd%s\n",
+ *(size_t *)key.mv_data, j, span, bad);
+ if (freinfo > 2) {
+ for (--j; j >= 0; ) {
+ pg = iptr[j];
+ for (span=1; --j >= 0 && iptr[j] == pg+span; span++) ;
+ printf(span>1 ? " %9zu[%zd]\n" : " %9zu\n",
+ pg, span);
+ }
+ }
}
}
mdb_cursor_close(cursor);