diff options
author | Susan LoVerso <sue@wiredtiger.com> | 2014-12-03 09:25:18 -0500 |
---|---|---|
committer | Susan LoVerso <sue@wiredtiger.com> | 2014-12-03 09:25:18 -0500 |
commit | 80488baea6ae3cd1dc6afd76e2850d3c11636805 (patch) | |
tree | 2ddc33853fd49433bf638fdd0dabef6e1d128a48 | |
parent | c51da773be4a244611681bc30bcfa2a16008b239 (diff) | |
parent | caa5e82926639fca349ea70d0f7b17e939d03ad7 (diff) | |
download | mongo-80488baea6ae3cd1dc6afd76e2850d3c11636805.tar.gz |
Merge branch 'develop' into log-recycle
-rw-r--r-- | bench/wtperf/runners/evict-lsm.wtperf | 2 | ||||
-rw-r--r-- | src/btree/rec_evict.c | 35 | ||||
-rw-r--r-- | src/btree/rec_split.c | 9 | ||||
-rw-r--r-- | src/config/config_check.c | 2 |
4 files changed, 23 insertions, 25 deletions
diff --git a/bench/wtperf/runners/evict-lsm.wtperf b/bench/wtperf/runners/evict-lsm.wtperf index 962f6a60201..c51cb7859c1 100644 --- a/bench/wtperf/runners/evict-lsm.wtperf +++ b/bench/wtperf/runners/evict-lsm.wtperf @@ -1,6 +1,6 @@ # wtperf options file: evict lsm configuration conn_config="cache_size=50M,lsm_manager=(worker_thread_max=6)" -table_config="type=lsm,os_cache_dirty_max=16MB" +table_config="type=lsm,lsm=(chunk_size=2M),os_cache_dirty_max=16MB" compact=true icount=10000000 report_interval=5 diff --git a/src/btree/rec_evict.c b/src/btree/rec_evict.c index f8dd4708ffd..4fec0f023de 100644 --- a/src/btree/rec_evict.c +++ b/src/btree/rec_evict.c @@ -284,24 +284,6 @@ __rec_review(WT_SESSION_IMPL *session, WT_REF *ref, * valid memory. */ __wt_evict_list_clear_page(session, ref); - - /* - * Check for an append-only workload needing an in-memory split. - * - * We can't do this earlier because in-memory splits require - * exclusive access. If an in-memory split completes, the page - * stays in memory and the tree is left in the desired state: - * avoid the usual cleanup. - * - * Attempt the split before checking whether a checkpoint is - * running - that's not a problem here because we aren't - * evicting any dirty pages. - */ - if (top) { - WT_RET(__wt_split_insert(session, ref, inmem_splitp)); - if (*inmem_splitp) - return (0); - } } /* @@ -377,6 +359,23 @@ __rec_review(WT_SESSION_IMPL *session, WT_REF *ref, } /* + * Check for an append-only workload needing an in-memory split. + * + * We can't do this earlier because in-memory splits require exclusive + * access. If an in-memory split completes, the page stays in memory + * and the tree is left in the desired state: avoid the usual cleanup. + * + * Attempt the split before checking whether a checkpoint is running - + * that's not a problem here because we aren't evicting any dirty + * pages. + */ + if (top && !exclusive) { + WT_RET(__wt_split_insert(session, ref, inmem_splitp)); + if (*inmem_splitp) + return (0); + } + + /* * Fail if any page in the top-level page's subtree won't be merged into * its parent, the page that cannot be merged must be evicted first. * The test is necessary but should not fire much: the eviction code is diff --git a/src/btree/rec_split.c b/src/btree/rec_split.c index dea44503c55..e25f0b73e01 100644 --- a/src/btree/rec_split.c +++ b/src/btree/rec_split.c @@ -1033,15 +1033,14 @@ __wt_split_insert(WT_SESSION_IMPL *session, WT_REF *ref, int *splitp) * discarding the tree, check and see if it's worth doing a split to * let the threads continue before doing eviction. * - * Ignore anything other than row-store leaf pages. - * Ignore small pages. + * Ignore anything other than large, dirty row-store leaf pages. * * XXX KEITH * Need a better test for append-only workloads. */ - if (page->type != WT_PAGE_ROW_LEAF) - return (0); - if (page->memory_footprint < 10 * btree->maxleafpage) + if (page->type != WT_PAGE_ROW_LEAF || + page->memory_footprint < btree->maxmempage || + !__wt_page_is_modified(page)) return (0); /* diff --git a/src/config/config_check.c b/src/config/config_check.c index 310e54c3349..c6fd6bbd75b 100644 --- a/src/config/config_check.c +++ b/src/config/config_check.c @@ -73,7 +73,7 @@ __wt_configure_method(WT_SESSION_IMPL *session, /* * !!! * We ignore the specified uri, that is, all new configuration options - * will be valid for all data sources. That's shouldn't be too bad + * will be valid for all data sources. That shouldn't be too bad * as the worst that can happen is an application might specify some * configuration option and not get an error -- the option should be * ignored by the underlying implementation since it's unexpected, so |