summaryrefslogtreecommitdiff
path: root/src/block
diff options
context:
space:
mode:
authorAlex Gorrod <alexg@wiredtiger.com>2015-05-28 04:39:08 +0000
committerAlex Gorrod <alexg@wiredtiger.com>2015-05-28 04:39:08 +0000
commit5cdf0ec8c4367fd3e49904231f97843c996dbea4 (patch)
treeb1ffbded45c6f65b96c886e07ee0df6cb17609ca /src/block
parenta07bd89a50813b9eb298edf6dd4f793b4cb40461 (diff)
downloadmongo-5cdf0ec8c4367fd3e49904231f97843c996dbea4.tar.gz
Only compact a file if it's at least 10MB and has 1MB of available space.
Diffstat (limited to 'src/block')
-rw-r--r--src/block/block_compact.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/block/block_compact.c b/src/block/block_compact.c
index 4fcf6ea24ff..5f26fa45f3f 100644
--- a/src/block/block_compact.c
+++ b/src/block/block_compact.c
@@ -55,7 +55,7 @@ __wt_block_compact_skip(WT_SESSION_IMPL *session, WT_BLOCK *block, int *skipp)
WT_EXT *ext;
WT_EXTLIST *el;
WT_FH *fh;
- wt_off_t avail_eighty, avail_ninety, eighty, ninety;
+ wt_off_t avail_eighty, avail_ninety, avail_total, eighty, ninety;
*skipp = 1; /* Return a default skip. */
@@ -67,7 +67,7 @@ __wt_block_compact_skip(WT_SESSION_IMPL *session, WT_BLOCK *block, int *skipp)
* worth doing. Ignore small files, and files where we are unlikely
* to recover 10% of the file.
*/
- if (fh->size <= 10 * 1024)
+ if (fh->size <= 10 * WT_MEGABYTE)
return (0);
__wt_spin_lock(session, &block->live_lock);
@@ -76,19 +76,25 @@ __wt_block_compact_skip(WT_SESSION_IMPL *session, WT_BLOCK *block, int *skipp)
WT_ERR(__block_dump_avail(session, block));
/* Sum the available bytes in the first 80% and 90% of the file. */
- avail_eighty = avail_ninety = 0;
+ avail_eighty = avail_ninety = avail_total = 0;
ninety = fh->size - fh->size / 10;
eighty = fh->size - ((fh->size / 10) * 2);
el = &block->live.avail;
- WT_EXT_FOREACH(ext, el->off)
+ WT_EXT_FOREACH(ext, el->off) {
+ avail_total += ext->size;
if (ext->off < ninety) {
avail_ninety += ext->size;
if (ext->off < eighty)
avail_eighty += ext->size;
}
+ }
WT_ERR(__wt_verbose(session, WT_VERB_COMPACT,
+ "%s: %" PRIuMAX "MB (%" PRIuMAX ") available space in the file",
+ block->name,
+ (uintmax_t)avail_total / WT_MEGABYTE, (uintmax_t)avail_total));
+ WT_ERR(__wt_verbose(session, WT_VERB_COMPACT,
"%s: %" PRIuMAX "MB (%" PRIuMAX ") available space in the first "
"80%% of the file",
block->name,
@@ -115,7 +121,7 @@ __wt_block_compact_skip(WT_SESSION_IMPL *session, WT_BLOCK *block, int *skipp)
* empty file can be processed quickly, so more aggressive compaction is
* less useful.
*/
- if (avail_ninety >= fh->size / 10) {
+ if (avail_total > WT_MEGABYTE && avail_ninety >= fh->size / 10) {
*skipp = 0;
block->compact_pct_tenths = 1;
if (avail_eighty >= ((fh->size / 10) * 2))