mdb_stat -ff[f]: show contiguous page spans.

vmware
Hallvard Furuseth 12 years ago
parent 7aba5f5ab9
commit 8e1bbdf0dd
  1. 7
      libraries/liblmdb/mdb_stat.1
  2. 30
      libraries/liblmdb/mdb_stat.c

@ -9,7 +9,7 @@ mdb_stat \- LMDB environment status tool
[\c [\c
.BR \-e ] .BR \-e ]
[\c [\c
.BR \-f [ f ]] .BR \-f [ f [ f ]]]
[\c [\c
.BR \-n ] .BR \-n ]
[\c [\c
@ -25,8 +25,9 @@ utility displays the status of an LMDB environment.
Display information about the database environment. Display information about the database environment.
.TP .TP
.BR \-f .BR \-f
Display information about the environment freelist. If \fB\-ff\fP is given, Display information about the environment freelist.
display the full list of page IDs in the 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 .TP
.BR \-n .BR \-n
Display the status of an LMDB database which does not use subdirectories. Display the status of an LMDB database which does not use subdirectories.

@ -1,6 +1,6 @@
/* mdb_stat.c - memory-mapped database status tool */ /* mdb_stat.c - memory-mapped database status tool */
/* /*
* Copyright 2011 Howard Chu, Symas Corp. * Copyright 2011-2013 Howard Chu, Symas Corp.
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -31,7 +31,7 @@ static void prstat(MDB_stat *ms)
static void usage(char *prog) 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); exit(EXIT_FAILURE);
} }
@ -142,12 +142,28 @@ int main(int argc, char *argv[])
iptr = data.mv_data; iptr = data.mv_data;
pages += *iptr; pages += *iptr;
if (freinfo > 1) { if (freinfo > 1) {
size_t i, j; char *bad = "";
size_t pg, prev;
ssize_t i, j, span = 0;
j = *iptr++; j = *iptr++;
printf(" Transaction %zu, %zu pages\n", for (i = j, prev = 1; --i >= 0; ) {
*(size_t *)key.mv_data, j); pg = iptr[i];
for (i=0; i<j; i++) if (pg <= prev)
printf(" %zu\n", iptr[i]); 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); mdb_cursor_close(cursor);

Loading…
Cancel
Save