summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Cahill <michael.cahill@wiredtiger.com>2013-01-10 16:17:47 +1100
committerMichael Cahill <michael.cahill@wiredtiger.com>2013-01-10 16:17:47 +1100
commit4a7f38d52bbb713e4812b53ee1f6a3c20000a9ba (patch)
treeb6d6efa00801afa89528838537beacfc65569920
parent2e44a6efa053097f3f4dc46fbdacd2f91192f0fb (diff)
downloadmongo-4a7f38d52bbb713e4812b53ee1f6a3c20000a9ba.tar.gz
Increase the maximum in-memory size if large leaf pages are configured.
-rw-r--r--dist/api_data.py8
-rw-r--r--src/btree/bt_handle.c7
-rw-r--r--src/include/wiredtiger.in7
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