diff options
author | Michael Cahill <michael.cahill@wiredtiger.com> | 2013-01-10 16:17:47 +1100 |
---|---|---|
committer | Michael Cahill <michael.cahill@wiredtiger.com> | 2013-01-10 16:17:47 +1100 |
commit | 4a7f38d52bbb713e4812b53ee1f6a3c20000a9ba (patch) | |
tree | b6d6efa00801afa89528838537beacfc65569920 | |
parent | 2e44a6efa053097f3f4dc46fbdacd2f91192f0fb (diff) | |
download | mongo-4a7f38d52bbb713e4812b53ee1f6a3c20000a9ba.tar.gz |
Increase the maximum in-memory size if large leaf pages are configured.
-rw-r--r-- | dist/api_data.py | 8 | ||||
-rw-r--r-- | src/btree/bt_handle.c | 7 | ||||
-rw-r--r-- | src/include/wiredtiger.in | 7 |
3 files changed, 15 insertions, 7 deletions
diff --git a/dist/api_data.py b/dist/api_data.py index 7eff966f317..a3b4ca38f04 100644 --- a/dist/api_data.py +++ b/dist/api_data.py @@ -204,9 +204,11 @@ file_config = format_meta + lsm_config + [ (values or row store keys) per leaf page''', min=0), Config('memory_page_max', '5MB', r''' - the maximum size a page can grow to in memory before being reconciled - to disk. This limit is soft - it is possible for pages to be - temporarily larger than this value''', + the maximum size a page can grow to in memory before being + reconciled to disk. The specified size will be adjusted to a + lower bound of <code>50 * leaf_page_max</code>. This limit is + soft - it is possible for pages to be temporarily larger than + this value''', min='512B', max='10TB'), Config('prefix_compression', 'true', r''' configure row-store format key prefix compression''', diff --git a/src/btree/bt_handle.c b/src/btree/bt_handle.c index 72040342085..73b5591e3c2 100644 --- a/src/btree/bt_handle.c +++ b/src/btree/bt_handle.c @@ -573,8 +573,13 @@ __btree_page_sizes(WT_SESSION_IMPL *session, const char *config) WT_RET(__wt_config_getones( session, config, "leaf_item_max", &cval)); btree->maxleafitem = (uint32_t)cval.val; + + /* + * When a page is forced to split, we want at least 50 entries on its + * parent. + */ WT_RET(__wt_config_getones(session, config, "memory_page_max", &cval)); - btree->maxmempage = (uint64_t)cval.val; + btree->maxmempage = WT_MAX((uint64_t)cval.val, 50 * btree->maxleafpage); /* Allocation sizes must be a power-of-two, nothing else makes sense. */ if (!__wt_ispo2(btree->allocsize)) diff --git a/src/include/wiredtiger.in b/src/include/wiredtiger.in index 58cc3a53270..ec4b39a9e56 100644 --- a/src/include/wiredtiger.in +++ b/src/include/wiredtiger.in @@ -707,9 +707,10 @@ struct __wt_session { * @config{lsm_merge_threads, the number of thread to perform merge * operations.,an integer between 1 and 10; default \c 1.} * @config{memory_page_max, the maximum size a page can grow to in - * memory before being reconciled to disk. This limit is soft - it is - * possible for pages to be temporarily larger than this value.,an - * integer between 512B and 10TB; default \c 5MB.} + * memory before being reconciled to disk. The specified size will be + * adjusted to a lower bound of <code>50 * leaf_page_max</code>. This + * limit is soft - it is possible for pages to be temporarily larger + * than this value.,an integer between 512B and 10TB; default \c 5MB.} * @config{prefix_compression, configure row-store format key prefix * compression.,a boolean flag; default \c true.} * @config{source, override the default data source URI derived from the |