summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/third_party/wiredtiger/dist/api_data.py19
-rw-r--r--src/third_party/wiredtiger/dist/stat_data.py1
-rw-r--r--src/third_party/wiredtiger/import.data2
-rw-r--r--src/third_party/wiredtiger/src/btree/bt_discard.c2
-rw-r--r--src/third_party/wiredtiger/src/btree/bt_page.c3
-rw-r--r--src/third_party/wiredtiger/src/config/config_def.c35
-rw-r--r--src/third_party/wiredtiger/src/conn/conn_cache.c37
-rw-r--r--src/third_party/wiredtiger/src/evict/evict_lru.c131
-rw-r--r--src/third_party/wiredtiger/src/include/btmem.h1
-rw-r--r--src/third_party/wiredtiger/src/include/btree.h4
-rw-r--r--src/third_party/wiredtiger/src/include/btree.i122
-rw-r--r--src/third_party/wiredtiger/src/include/cache.h54
-rw-r--r--src/third_party/wiredtiger/src/include/cache.i80
-rw-r--r--src/third_party/wiredtiger/src/include/extern.h14
-rw-r--r--src/third_party/wiredtiger/src/include/misc.i10
-rw-r--r--src/third_party/wiredtiger/src/include/stat.h1
-rw-r--r--src/third_party/wiredtiger/src/include/wiredtiger.in864
-rw-r--r--src/third_party/wiredtiger/src/support/stat.c4
-rw-r--r--src/third_party/wiredtiger/src/txn/txn_ckpt.c7
-rwxr-xr-xsrc/third_party/wiredtiger/test/suite/test_txn19.py4
20 files changed, 818 insertions, 577 deletions
diff --git a/src/third_party/wiredtiger/dist/api_data.py b/src/third_party/wiredtiger/dist/api_data.py
index 9130bef7ed0..f3c76c04028 100644
--- a/src/third_party/wiredtiger/dist/api_data.py
+++ b/src/third_party/wiredtiger/dist/api_data.py
@@ -592,14 +592,29 @@ connection_runtime_config = [
perform eviction in worker threads when the cache contains at least
this much content. It is a percentage of the cache size if the value is
within the range of 10 to 100 or an absolute size when greater than 100.
- The value is not allowed to exceed the \c cache_size.''',
+ The value is not allowed to exceed the \c cache_size''',
min=10, max='10TB'),
Config('eviction_trigger', '95', r'''
trigger application threads to perform eviction when the cache contains
at least this much content. It is a percentage of the cache size if the
value is within the range of 10 to 100 or an absolute size when greater
- than 100. The value is not allowed to exceed the \c cache_size.''',
+ than 100. The value is not allowed to exceed the \c cache_size''',
min=10, max='10TB'),
+ Config('eviction_updates_target', '0', r'''
+ perform eviction in worker threads when the cache contains at least
+ this many bytes of updates. It is a percentage of the cache size if the
+ value is within the range of 0 to 100 or an absolute size when greater
+ than 100. Calculated as half of \c eviction_dirty_target by default.
+ The value is not allowed to exceed the \c cache_size''',
+ min=0, max='10TB'),
+ Config('eviction_updates_trigger', '0', r'''
+ trigger application threads to perform eviction when the cache contains
+ at least this many bytes of updates. It is a percentage of the cache size
+ if the value is within the range of 1 to 100 or an absolute size when
+ greater than 100. Calculated as half of \c eviction_dirty_trigger by default.
+ The value is not allowed to exceed the \c cache_size. This setting only
+ alters behavior if it is lower than eviction_trigger''',
+ min=0, max='10TB'),
Config('file_manager', '', r'''
control how file handles are managed''',
type='category', subconfig=[
diff --git a/src/third_party/wiredtiger/dist/stat_data.py b/src/third_party/wiredtiger/dist/stat_data.py
index c7bfc07b404..c1406f22f95 100644
--- a/src/third_party/wiredtiger/dist/stat_data.py
+++ b/src/third_party/wiredtiger/dist/stat_data.py
@@ -218,6 +218,7 @@ connection_stats = [
CacheStat('cache_bytes_hs', 'bytes belonging to the history store table in the cache', 'no_clear,no_scale,size'),
CacheStat('cache_bytes_max', 'maximum bytes configured', 'no_clear,no_scale,size'),
CacheStat('cache_bytes_other', 'bytes not belonging to page images in the cache', 'no_clear,no_scale,size'),
+ CacheStat('cache_bytes_updates', 'bytes allocated for updates', 'no_clear,no_scale,size'),
CacheStat('cache_bytes_read', 'bytes read into cache', 'size'),
CacheStat('cache_bytes_write', 'bytes written from cache', 'size'),
CacheStat('cache_eviction_active_workers', 'eviction worker thread active', 'no_clear'),
diff --git a/src/third_party/wiredtiger/import.data b/src/third_party/wiredtiger/import.data
index f36da07c129..a6a732aab81 100644
--- a/src/third_party/wiredtiger/import.data
+++ b/src/third_party/wiredtiger/import.data
@@ -2,5 +2,5 @@
"vendor": "wiredtiger",
"github": "wiredtiger/wiredtiger.git",
"branch": "mongodb-4.4",
- "commit": "ab40833d9130b71f4b36a1a03fd8f4f137d11bdd"
+ "commit": "5faf7b26eb9d311b8a7575a16c757078772eb02d"
}
diff --git a/src/third_party/wiredtiger/src/btree/bt_discard.c b/src/third_party/wiredtiger/src/btree/bt_discard.c
index 6c695f5418f..6f3494f687c 100644
--- a/src/third_party/wiredtiger/src/btree/bt_discard.c
+++ b/src/third_party/wiredtiger/src/btree/bt_discard.c
@@ -88,7 +88,7 @@ __wt_page_out(WT_SESSION_IMPL *session, WT_PAGE **pagep)
dsk = (WT_PAGE_HEADER *)page->dsk;
if (F_ISSET_ATOMIC(page, WT_PAGE_DISK_ALLOC))
- __wt_cache_page_image_decr(session, dsk->mem_size);
+ __wt_cache_page_image_decr(session, page);
/* Discard any mapped image. */
if (F_ISSET_ATOMIC(page, WT_PAGE_DISK_MAPPED))
diff --git a/src/third_party/wiredtiger/src/btree/bt_page.c b/src/third_party/wiredtiger/src/btree/bt_page.c
index b3266462eda..7a325ffe3eb 100644
--- a/src/third_party/wiredtiger/src/btree/bt_page.c
+++ b/src/third_party/wiredtiger/src/btree/bt_page.c
@@ -220,8 +220,9 @@ __wt_page_inmem(
/* Update the page's cache statistics. */
__wt_cache_page_inmem_incr(session, page, size);
+
if (LF_ISSET(WT_PAGE_DISK_ALLOC))
- __wt_cache_page_image_incr(session, dsk->mem_size);
+ __wt_cache_page_image_incr(session, page);
/* Link the new internal page to the parent. */
if (ref != NULL) {
diff --git a/src/third_party/wiredtiger/src/config/config_def.c b/src/third_party/wiredtiger/src/config/config_def.c
index 7b0b657619c..61c2c243143 100644
--- a/src/third_party/wiredtiger/src/config/config_def.c
+++ b/src/third_party/wiredtiger/src/config/config_def.c
@@ -118,6 +118,8 @@ static const WT_CONFIG_CHECK confchk_WT_CONNECTION_reconfigure[] = {
{"eviction_dirty_trigger", "int", NULL, "min=1,max=10TB", NULL, 0},
{"eviction_target", "int", NULL, "min=10,max=10TB", NULL, 0},
{"eviction_trigger", "int", NULL, "min=10,max=10TB", NULL, 0},
+ {"eviction_updates_target", "int", NULL, "min=0,max=10TB", NULL, 0},
+ {"eviction_updates_trigger", "int", NULL, "min=0,max=10TB", NULL, 0},
{"file_manager", "category", NULL, NULL, confchk_wiredtiger_open_file_manager_subconfigs, 3},
{"history_store", "category", NULL, NULL, confchk_wiredtiger_open_history_store_subconfigs, 1},
{"io_capacity", "category", NULL, NULL, confchk_wiredtiger_open_io_capacity_subconfigs, 1},
@@ -550,6 +552,8 @@ static const WT_CONFIG_CHECK confchk_wiredtiger_open[] = {
{"eviction_dirty_trigger", "int", NULL, "min=1,max=10TB", NULL, 0},
{"eviction_target", "int", NULL, "min=10,max=10TB", NULL, 0},
{"eviction_trigger", "int", NULL, "min=10,max=10TB", NULL, 0},
+ {"eviction_updates_target", "int", NULL, "min=0,max=10TB", NULL, 0},
+ {"eviction_updates_trigger", "int", NULL, "min=0,max=10TB", NULL, 0},
{"exclusive", "boolean", NULL, NULL, NULL, 0}, {"extensions", "list", NULL, NULL, NULL, 0},
{"file_close_sync", "boolean", NULL, NULL, NULL, 0},
{"file_extend", "list", NULL, "choices=[\"data\",\"log\"]", NULL, 0},
@@ -624,6 +628,8 @@ static const WT_CONFIG_CHECK confchk_wiredtiger_open_all[] = {
{"eviction_dirty_trigger", "int", NULL, "min=1,max=10TB", NULL, 0},
{"eviction_target", "int", NULL, "min=10,max=10TB", NULL, 0},
{"eviction_trigger", "int", NULL, "min=10,max=10TB", NULL, 0},
+ {"eviction_updates_target", "int", NULL, "min=0,max=10TB", NULL, 0},
+ {"eviction_updates_trigger", "int", NULL, "min=0,max=10TB", NULL, 0},
{"exclusive", "boolean", NULL, NULL, NULL, 0}, {"extensions", "list", NULL, NULL, NULL, 0},
{"file_close_sync", "boolean", NULL, NULL, NULL, 0},
{"file_extend", "list", NULL, "choices=[\"data\",\"log\"]", NULL, 0},
@@ -697,6 +703,8 @@ static const WT_CONFIG_CHECK confchk_wiredtiger_open_basecfg[] = {
{"eviction_dirty_trigger", "int", NULL, "min=1,max=10TB", NULL, 0},
{"eviction_target", "int", NULL, "min=10,max=10TB", NULL, 0},
{"eviction_trigger", "int", NULL, "min=10,max=10TB", NULL, 0},
+ {"eviction_updates_target", "int", NULL, "min=0,max=10TB", NULL, 0},
+ {"eviction_updates_trigger", "int", NULL, "min=0,max=10TB", NULL, 0},
{"extensions", "list", NULL, NULL, NULL, 0}, {"file_close_sync", "boolean", NULL, NULL, NULL, 0},
{"file_extend", "list", NULL, "choices=[\"data\",\"log\"]", NULL, 0},
{"file_manager", "category", NULL, NULL, confchk_wiredtiger_open_file_manager_subconfigs, 3},
@@ -766,6 +774,8 @@ static const WT_CONFIG_CHECK confchk_wiredtiger_open_usercfg[] = {
{"eviction_dirty_trigger", "int", NULL, "min=1,max=10TB", NULL, 0},
{"eviction_target", "int", NULL, "min=10,max=10TB", NULL, 0},
{"eviction_trigger", "int", NULL, "min=10,max=10TB", NULL, 0},
+ {"eviction_updates_target", "int", NULL, "min=0,max=10TB", NULL, 0},
+ {"eviction_updates_trigger", "int", NULL, "min=0,max=10TB", NULL, 0},
{"extensions", "list", NULL, NULL, NULL, 0}, {"file_close_sync", "boolean", NULL, NULL, NULL, 0},
{"file_extend", "list", NULL, "choices=[\"data\",\"log\"]", NULL, 0},
{"file_manager", "category", NULL, NULL, confchk_wiredtiger_open_file_manager_subconfigs, 3},
@@ -842,7 +852,8 @@ static const WT_CONFIG_ENTRY config_entries[] = {{"WT_CONNECTION.add_collator",
"error_prefix=,eviction=(threads_max=8,threads_min=1),"
"eviction_checkpoint_target=1,eviction_dirty_target=5,"
"eviction_dirty_trigger=20,eviction_target=80,eviction_trigger=95"
- ",file_manager=(close_handle_minimum=250,close_idle_time=30,"
+ ",eviction_updates_target=0,eviction_updates_trigger=0,"
+ "file_manager=(close_handle_minimum=250,close_idle_time=30,"
"close_scan_interval=10),history_store=(file_max=0),"
"io_capacity=(total=0),log=(archive=true,os_cache_dirty_pct=0,"
"prealloc=true,zero_fill=false),lsm_manager=(merge=true,"
@@ -852,7 +863,7 @@ static const WT_CONFIG_ENTRY config_entries[] = {{"WT_CONNECTION.add_collator",
"statistics=none,statistics_log=(json=false,on_close=false,"
"sources=,timestamp=\"%b %d %H:%M:%S\",wait=0),"
"timing_stress_for_test=,verbose=",
- confchk_WT_CONNECTION_reconfigure, 27},
+ confchk_WT_CONNECTION_reconfigure, 29},
{"WT_CONNECTION.rollback_to_stable", "", NULL, 0}, {"WT_CONNECTION.set_file_system", "", NULL, 0},
{"WT_CONNECTION.set_timestamp",
"commit_timestamp=,durable_timestamp=,force=false,"
@@ -1017,7 +1028,8 @@ static const WT_CONFIG_ENTRY config_entries[] = {{"WT_CONNECTION.add_collator",
"eviction=(threads_max=8,threads_min=1),"
"eviction_checkpoint_target=1,eviction_dirty_target=5,"
"eviction_dirty_trigger=20,eviction_target=80,eviction_trigger=95"
- ",exclusive=false,extensions=,file_close_sync=true,file_extend=,"
+ ",eviction_updates_target=0,eviction_updates_trigger=0,"
+ "exclusive=false,extensions=,file_close_sync=true,file_extend=,"
"file_manager=(close_handle_minimum=250,close_idle_time=30,"
"close_scan_interval=10),hazard_max=1000,"
"history_store=(file_max=0),in_memory=false,io_capacity=(total=0)"
@@ -1034,7 +1046,7 @@ static const WT_CONFIG_ENTRY config_entries[] = {{"WT_CONNECTION.add_collator",
"timing_stress_for_test=,transaction_sync=(enabled=false,"
"method=fsync),use_environment=true,use_environment_priv=false,"
"verbose=,verify_metadata=false,write_through=",
- confchk_wiredtiger_open, 54},
+ confchk_wiredtiger_open, 56},
{"wiredtiger_open_all",
"async=(enabled=false,ops_max=1024,threads=2),buffer_alignment=-1"
",builtin_extension_config=,cache_cursors=true,"
@@ -1049,7 +1061,8 @@ static const WT_CONFIG_ENTRY config_entries[] = {{"WT_CONNECTION.add_collator",
"eviction=(threads_max=8,threads_min=1),"
"eviction_checkpoint_target=1,eviction_dirty_target=5,"
"eviction_dirty_trigger=20,eviction_target=80,eviction_trigger=95"
- ",exclusive=false,extensions=,file_close_sync=true,file_extend=,"
+ ",eviction_updates_target=0,eviction_updates_trigger=0,"
+ "exclusive=false,extensions=,file_close_sync=true,file_extend=,"
"file_manager=(close_handle_minimum=250,close_idle_time=30,"
"close_scan_interval=10),hazard_max=1000,"
"history_store=(file_max=0),in_memory=false,io_capacity=(total=0)"
@@ -1067,7 +1080,7 @@ static const WT_CONFIG_ENTRY config_entries[] = {{"WT_CONNECTION.add_collator",
"method=fsync),use_environment=true,use_environment_priv=false,"
"verbose=,verify_metadata=false,version=(major=0,minor=0),"
"write_through=",
- confchk_wiredtiger_open_all, 55},
+ confchk_wiredtiger_open_all, 57},
{"wiredtiger_open_basecfg",
"async=(enabled=false,ops_max=1024,threads=2),buffer_alignment=-1"
",builtin_extension_config=,cache_cursors=true,"
@@ -1081,7 +1094,8 @@ static const WT_CONFIG_ENTRY config_entries[] = {{"WT_CONNECTION.add_collator",
"secretkey=),error_prefix=,eviction=(threads_max=8,threads_min=1)"
",eviction_checkpoint_target=1,eviction_dirty_target=5,"
"eviction_dirty_trigger=20,eviction_target=80,eviction_trigger=95"
- ",extensions=,file_close_sync=true,file_extend=,"
+ ",eviction_updates_target=0,eviction_updates_trigger=0,"
+ "extensions=,file_close_sync=true,file_extend=,"
"file_manager=(close_handle_minimum=250,close_idle_time=30,"
"close_scan_interval=10),hazard_max=1000,"
"history_store=(file_max=0),io_capacity=(total=0),"
@@ -1098,7 +1112,7 @@ static const WT_CONFIG_ENTRY config_entries[] = {{"WT_CONNECTION.add_collator",
"timing_stress_for_test=,transaction_sync=(enabled=false,"
"method=fsync),verbose=,verify_metadata=false,version=(major=0,"
"minor=0),write_through=",
- confchk_wiredtiger_open_basecfg, 49},
+ confchk_wiredtiger_open_basecfg, 51},
{"wiredtiger_open_usercfg",
"async=(enabled=false,ops_max=1024,threads=2),buffer_alignment=-1"
",builtin_extension_config=,cache_cursors=true,"
@@ -1112,7 +1126,8 @@ static const WT_CONFIG_ENTRY config_entries[] = {{"WT_CONNECTION.add_collator",
"secretkey=),error_prefix=,eviction=(threads_max=8,threads_min=1)"
",eviction_checkpoint_target=1,eviction_dirty_target=5,"
"eviction_dirty_trigger=20,eviction_target=80,eviction_trigger=95"
- ",extensions=,file_close_sync=true,file_extend=,"
+ ",eviction_updates_target=0,eviction_updates_trigger=0,"
+ "extensions=,file_close_sync=true,file_extend=,"
"file_manager=(close_handle_minimum=250,close_idle_time=30,"
"close_scan_interval=10),hazard_max=1000,"
"history_store=(file_max=0),io_capacity=(total=0),"
@@ -1128,7 +1143,7 @@ static const WT_CONFIG_ENTRY config_entries[] = {{"WT_CONNECTION.add_collator",
"path=\".\",sources=,timestamp=\"%b %d %H:%M:%S\",wait=0),"
"timing_stress_for_test=,transaction_sync=(enabled=false,"
"method=fsync),verbose=,verify_metadata=false,write_through=",
- confchk_wiredtiger_open_usercfg, 48},
+ confchk_wiredtiger_open_usercfg, 50},
{NULL, NULL, NULL, 0}};
int
diff --git a/src/third_party/wiredtiger/src/conn/conn_cache.c b/src/third_party/wiredtiger/src/conn/conn_cache.c
index 9c952020b95..5d0166242ce 100644
--- a/src/third_party/wiredtiger/src/conn/conn_cache.c
+++ b/src/third_party/wiredtiger/src/conn/conn_cache.c
@@ -120,6 +120,25 @@ __cache_config_local(WT_SESSION_IMPL *session, bool shared, const char *cfg[])
if (cache->eviction_dirty_trigger > cache->eviction_trigger)
cache->eviction_dirty_trigger = cache->eviction_trigger;
+ /* Configure updates target / trigger */
+ WT_RET(__wt_config_gets(session, cfg, "eviction_updates_target", &cval));
+ cache->eviction_updates_target = (double)cval.val;
+ WT_RET(__cache_config_abs_to_pct(
+ session, &(cache->eviction_updates_target), "eviction updates target", shared));
+ if (cache->eviction_updates_target < DBL_EPSILON)
+ cache->eviction_updates_target = cache->eviction_dirty_target / 2;
+
+ WT_RET(__wt_config_gets(session, cfg, "eviction_updates_trigger", &cval));
+ cache->eviction_updates_trigger = (double)cval.val;
+ WT_RET(__cache_config_abs_to_pct(
+ session, &(cache->eviction_updates_trigger), "eviction updates trigger", shared));
+ if (cache->eviction_updates_trigger < DBL_EPSILON)
+ cache->eviction_updates_trigger = cache->eviction_dirty_trigger / 2;
+
+ /* Don't allow the trigger to be larger than the overall trigger. */
+ if (cache->eviction_updates_trigger > cache->eviction_trigger)
+ cache->eviction_updates_trigger = cache->eviction_trigger;
+
WT_RET(__wt_config_gets(session, cfg, "eviction.threads_max", &cval));
WT_ASSERT(session, cval.val > 0);
evict_threads_max = (uint32_t)cval.val;
@@ -267,18 +286,19 @@ __wt_cache_stats_update(WT_SESSION_IMPL *session)
WT_CACHE *cache;
WT_CONNECTION_IMPL *conn;
WT_CONNECTION_STATS **stats;
- uint64_t inuse, leaf;
+ uint64_t inuse, intl, leaf;
conn = S2C(session);
cache = conn->cache;
stats = conn->stats;
inuse = __wt_cache_bytes_inuse(cache);
+ intl = __wt_cache_bytes_plus_overhead(cache, cache->bytes_internal);
/*
* There are races updating the different cache tracking values so be paranoid calculating the
* leaf byte usage.
*/
- leaf = inuse > cache->bytes_internal ? inuse - cache->bytes_internal : 0;
+ leaf = inuse > intl ? inuse - intl : 0;
WT_STAT_SET(session, stats, cache_bytes_max, conn->cache_size);
WT_STAT_SET(session, stats, cache_bytes_inuse, inuse);
@@ -287,15 +307,14 @@ __wt_cache_stats_update(WT_SESSION_IMPL *session)
WT_STAT_SET(session, stats, cache_bytes_dirty, __wt_cache_dirty_inuse(cache));
WT_STAT_SET(session, stats, cache_bytes_dirty_total,
__wt_cache_bytes_plus_overhead(cache, cache->bytes_dirty_total));
+ WT_STAT_SET(
+ session, stats, cache_bytes_hs, __wt_cache_bytes_plus_overhead(cache, cache->bytes_hs));
WT_STAT_SET(session, stats, cache_bytes_image, __wt_cache_bytes_image(cache));
WT_STAT_SET(session, stats, cache_pages_inuse, __wt_cache_pages_inuse(cache));
- WT_STAT_SET(session, stats, cache_bytes_internal, cache->bytes_internal);
+ WT_STAT_SET(session, stats, cache_bytes_internal, intl);
WT_STAT_SET(session, stats, cache_bytes_leaf, leaf);
- if (F_ISSET(conn, WT_CONN_HS_OPEN)) {
- WT_STAT_SET(
- session, stats, cache_bytes_hs, __wt_cache_bytes_plus_overhead(cache, cache->bytes_hs));
- }
WT_STAT_SET(session, stats, cache_bytes_other, __wt_cache_bytes_other(cache));
+ WT_STAT_SET(session, stats, cache_bytes_updates, __wt_cache_bytes_updates(cache));
WT_STAT_SET(session, stats, cache_eviction_maximum_page_size, cache->evict_max_page_size);
WT_STAT_SET(
@@ -348,11 +367,11 @@ __wt_cache_destroy(WT_SESSION_IMPL *session)
" pages in "
"memory and %" PRIu64 " pages evicted",
cache->pages_inmem, cache->pages_evicted);
- if (cache->bytes_image != 0)
+ if (cache->bytes_image_intl + cache->bytes_image_leaf != 0)
__wt_errx(session, "cache server: exiting with %" PRIu64
" image bytes in "
"memory",
- cache->bytes_image);
+ cache->bytes_image_intl + cache->bytes_image_leaf);
if (cache->bytes_inmem != 0)
__wt_errx(
session, "cache server: exiting with %" PRIu64 " bytes in memory", cache->bytes_inmem);
diff --git a/src/third_party/wiredtiger/src/evict/evict_lru.c b/src/third_party/wiredtiger/src/evict/evict_lru.c
index 59e005fdb00..b303f524ef3 100644
--- a/src/third_party/wiredtiger/src/evict/evict_lru.c
+++ b/src/third_party/wiredtiger/src/evict/evict_lru.c
@@ -560,8 +560,8 @@ __evict_update_work(WT_SESSION_IMPL *session)
WT_BTREE *hs_tree;
WT_CACHE *cache;
WT_CONNECTION_IMPL *conn;
- double dirty_target, dirty_trigger, target, trigger;
- uint64_t bytes_inuse, bytes_max, dirty_inuse;
+ double dirty_target, dirty_trigger, target, trigger, updates_target, updates_trigger;
+ uint64_t bytes_dirty, bytes_inuse, bytes_max, bytes_updates;
uint32_t flags;
conn = S2C(session);
@@ -571,6 +571,8 @@ __evict_update_work(WT_SESSION_IMPL *session)
dirty_trigger = cache->eviction_dirty_trigger;
target = cache->eviction_target;
trigger = cache->eviction_trigger;
+ updates_target = cache->eviction_updates_target;
+ updates_trigger = cache->eviction_updates_trigger;
/* Build up the new state. */
flags = 0;
@@ -598,12 +600,18 @@ __evict_update_work(WT_SESSION_IMPL *session)
else if (bytes_inuse > (target * bytes_max) / 100)
LF_SET(WT_CACHE_EVICT_CLEAN);
- dirty_inuse = __wt_cache_dirty_leaf_inuse(cache);
+ bytes_dirty = __wt_cache_dirty_leaf_inuse(cache);
if (__wt_eviction_dirty_needed(session, NULL))
LF_SET(WT_CACHE_EVICT_DIRTY | WT_CACHE_EVICT_DIRTY_HARD);
- else if (dirty_inuse > (uint64_t)(dirty_target * bytes_max) / 100)
+ else if (bytes_dirty > (uint64_t)(dirty_target * bytes_max) / 100)
LF_SET(WT_CACHE_EVICT_DIRTY);
+ bytes_updates = __wt_cache_bytes_updates(cache);
+ if (__wt_eviction_updates_needed(session, NULL))
+ LF_SET(WT_CACHE_EVICT_UPDATES | WT_CACHE_EVICT_UPDATES_HARD);
+ else if (bytes_updates > (uint64_t)(updates_target * bytes_max) / 100)
+ LF_SET(WT_CACHE_EVICT_UPDATES);
+
/*
* If application threads are blocked by the total volume of data in cache, try dirty pages as
* well.
@@ -612,28 +620,17 @@ __evict_update_work(WT_SESSION_IMPL *session)
LF_SET(WT_CACHE_EVICT_DIRTY);
/*
- * Scrub dirty pages and keep them in cache if we are less than half way to the clean or dirty
- * trigger.
+ * Scrub dirty pages and keep them in cache if we are less than half way to the clean, dirty or
+ * updates triggers.
*/
if (bytes_inuse < (uint64_t)((target + trigger) * bytes_max) / 200) {
- if (dirty_inuse < (uint64_t)((dirty_target + dirty_trigger) * bytes_max) / 200)
+ if (bytes_dirty < (uint64_t)((dirty_target + dirty_trigger) * bytes_max) / 200 &&
+ bytes_updates < (uint64_t)((updates_target + updates_trigger) * bytes_max) / 200)
LF_SET(WT_CACHE_EVICT_SCRUB);
} else
LF_SET(WT_CACHE_EVICT_NOKEEP);
/*
- * Try history store evict when:
- * (1) the cache is stuck; OR
- * (2) the history store score goes over 80; and
- * (3) the cache is more than half way from the dirty target to the
- * dirty trigger.
- */
- if (__wt_cache_stuck(session) ||
- (__wt_cache_hs_score(cache) > 80 &&
- dirty_inuse > (uint64_t)((dirty_target + dirty_trigger) * bytes_max) / 200))
- LF_SET(WT_CACHE_EVICT_HS);
-
- /*
* With an in-memory cache, we only do dirty eviction in order to scrub pages.
*/
if (F_ISSET(conn, WT_CONN_IN_MEMORY)) {
@@ -751,8 +748,7 @@ __evict_pass(WT_SESSION_IMPL *session)
* rolling back transactions and writing updates to the history store table.
*/
if (eviction_progress == cache->eviction_progress) {
- if (WT_CLOCKDIFF_MS(time_now, time_prev) >= 20 &&
- F_ISSET(cache, WT_CACHE_EVICT_CLEAN_HARD | WT_CACHE_EVICT_DIRTY_HARD)) {
+ if (WT_CLOCKDIFF_MS(time_now, time_prev) >= 20 && F_ISSET(cache, WT_CACHE_EVICT_HARD)) {
if (cache->evict_aggressive_score < 100)
++cache->evict_aggressive_score;
oldest_id = txn_global->oldest_id;
@@ -1187,7 +1183,7 @@ __evict_lru_walk(WT_SESSION_IMPL *session)
* queued.
*/
if (__evict_queue_empty(queue, false)) {
- if (F_ISSET(cache, WT_CACHE_EVICT_CLEAN_HARD | WT_CACHE_EVICT_DIRTY_HARD))
+ if (F_ISSET(cache, WT_CACHE_EVICT_HARD))
cache->evict_empty_score =
WT_MIN(cache->evict_empty_score + WT_EVICT_SCORE_BUMP, WT_EVICT_SCORE_MAX);
WT_STAT_CONN_INCR(session, cache_eviction_queue_empty);
@@ -1406,9 +1402,9 @@ __evict_walk(WT_SESSION_IMPL *session, WT_EVICT_QUEUE *queue)
* Another pathological case: if there are only a tiny number of candidate pages in cache, don't
* put all of them on one queue.
*/
- total_candidates =
- (u_int)(F_ISSET(cache, WT_CACHE_EVICT_CLEAN) ? __wt_cache_pages_inuse(cache) :
- cache->pages_dirty_leaf);
+ total_candidates = (u_int)(F_ISSET(cache, WT_CACHE_EVICT_CLEAN | WT_CACHE_EVICT_UPDATES) ?
+ __wt_cache_pages_inuse(cache) :
+ cache->pages_dirty_leaf);
max_entries = WT_MIN(max_entries, 1 + total_candidates / 2);
retry:
@@ -1469,7 +1465,8 @@ retry:
/*
* Skip files that are checkpointing if we are only looking for dirty pages.
*/
- if (WT_BTREE_SYNCING(btree) && !F_ISSET(cache, WT_CACHE_EVICT_CLEAN))
+ if (WT_BTREE_SYNCING(btree) &&
+ !F_ISSET(cache, WT_CACHE_EVICT_CLEAN | WT_CACHE_EVICT_UPDATES))
continue;
/*
@@ -1614,10 +1611,10 @@ __evict_walk_target(WT_SESSION_IMPL *session)
{
WT_CACHE *cache;
uint64_t btree_inuse, bytes_per_slot, cache_inuse;
- uint32_t target_pages_clean, target_pages_dirty, target_pages;
+ uint32_t target_pages, target_pages_clean, target_pages_dirty, target_pages_updates;
cache = S2C(session)->cache;
- target_pages_clean = target_pages_dirty = 0;
+ target_pages_clean = target_pages_dirty = target_pages_updates = 0;
/*
* The minimum number of pages we should consider per tree.
@@ -1643,7 +1640,15 @@ __evict_walk_target(WT_SESSION_IMPL *session)
target_pages_dirty = (uint32_t)((btree_inuse + bytes_per_slot / 2) / bytes_per_slot);
}
+ if (F_ISSET(cache, WT_CACHE_EVICT_UPDATES)) {
+ btree_inuse = __wt_btree_bytes_updates(session);
+ cache_inuse = __wt_cache_bytes_updates(cache);
+ bytes_per_slot = 1 + cache_inuse / cache->evict_slots;
+ target_pages_updates = (uint32_t)((btree_inuse + bytes_per_slot / 2) / bytes_per_slot);
+ }
+
target_pages = WT_MAX(target_pages_clean, target_pages_dirty);
+ target_pages = WT_MAX(target_pages, target_pages_updates);
/*
* Walk trees with a small fraction of the cache in case there are so many trees that none of
@@ -1651,8 +1656,9 @@ __evict_walk_target(WT_SESSION_IMPL *session)
* interest.
*/
if (target_pages == 0) {
- btree_inuse = F_ISSET(cache, WT_CACHE_EVICT_CLEAN) ? __wt_btree_bytes_evictable(session) :
- __wt_btree_dirty_leaf_inuse(session);
+ btree_inuse = F_ISSET(cache, WT_CACHE_EVICT_CLEAN | WT_CACHE_EVICT_UPDATES) ?
+ __wt_btree_bytes_evictable(session) :
+ __wt_btree_dirty_leaf_inuse(session);
if (btree_inuse == 0)
return (0);
@@ -1690,7 +1696,7 @@ __evict_walk_tree(WT_SESSION_IMPL *session, WT_EVICT_QUEUE *queue, u_int max_ent
uint64_t min_pages, pages_already_queued, pages_seen, pages_queued, refs_walked;
uint32_t read_flags, remaining_slots, target_pages, walk_flags;
int restarts;
- bool give_up, modified, urgent_queued;
+ bool give_up, modified, urgent_queued, want_page;
conn = S2C(session);
btree = S2BT(session);
@@ -1748,9 +1754,9 @@ __evict_walk_tree(WT_SESSION_IMPL *session, WT_EVICT_QUEUE *queue, u_int max_ent
* only looking for dirty pages, search the tree for longer.
*/
min_pages = 10 * (uint64_t)target_pages;
- if (!F_ISSET(cache, WT_CACHE_EVICT_DIRTY) && F_ISSET(cache, WT_CACHE_EVICT_CLEAN))
+ if (!F_ISSET(cache, WT_CACHE_EVICT_DIRTY | WT_CACHE_EVICT_UPDATES))
WT_STAT_CONN_INCR(session, cache_eviction_target_strategy_clean);
- else if (F_ISSET(cache, WT_CACHE_EVICT_DIRTY) && !F_ISSET(cache, WT_CACHE_EVICT_CLEAN)) {
+ else if (!F_ISSET(cache, WT_CACHE_EVICT_CLEAN)) {
min_pages *= 10;
WT_STAT_CONN_INCR(session, cache_eviction_target_strategy_dirty);
} else
@@ -1915,12 +1921,11 @@ __evict_walk_tree(WT_SESSION_IMPL *session, WT_EVICT_QUEUE *queue, u_int max_ent
if (__wt_page_is_empty(page) || F_ISSET(session->dhandle, WT_DHANDLE_DEAD))
goto fast;
- /* Skip clean pages if appropriate. */
- if (!modified && !F_ISSET(cache, WT_CACHE_EVICT_CLEAN))
- continue;
-
- /* Skip dirty pages if appropriate. */
- if (modified && !F_ISSET(cache, WT_CACHE_EVICT_DIRTY))
+ /* Skip pages we don't want. */
+ want_page = (F_ISSET(cache, WT_CACHE_EVICT_CLEAN) && !modified) ||
+ (F_ISSET(cache, WT_CACHE_EVICT_DIRTY) && modified) ||
+ (F_ISSET(cache, WT_CACHE_EVICT_UPDATES) && page->modify != NULL);
+ if (!want_page)
continue;
/*
@@ -1949,7 +1954,7 @@ __evict_walk_tree(WT_SESSION_IMPL *session, WT_EVICT_QUEUE *queue, u_int max_ent
* evict the same page.
*/
if (!__wt_page_evict_retry(session, page) ||
- (modified && !__txn_visible_all_id(session, page->modify->update_txn)))
+ (modified && page->modify->update_txn >= conn->txn_global.last_running))
continue;
fast:
@@ -2150,7 +2155,8 @@ __evict_get_ref(WT_SESSION_IMPL *session, bool is_server, WT_BTREE **btreep, WT_
* Don't force application threads to evict dirty pages if they aren't stalled by the amount
* of dirty data in cache.
*/
- if (!urgent_ok && (is_server || !F_ISSET(cache, WT_CACHE_EVICT_DIRTY_HARD)) &&
+ if (!urgent_ok &&
+ (is_server || !F_ISSET(cache, WT_CACHE_EVICT_DIRTY_HARD | WT_CACHE_EVICT_UPDATES_HARD)) &&
__wt_page_is_modified(evict->ref->page)) {
--evict;
break;
@@ -2454,8 +2460,8 @@ __wt_evict_priority_clear(WT_SESSION_IMPL *session)
* Output diagnostic information about a single file in the cache.
*/
static int
-__verbose_dump_cache_single(
- WT_SESSION_IMPL *session, uint64_t *total_bytesp, uint64_t *total_dirty_bytesp)
+__verbose_dump_cache_single(WT_SESSION_IMPL *session, uint64_t *total_bytesp,
+ uint64_t *total_dirty_bytesp, uint64_t *total_updates_bytesp)
{
WT_BTREE *btree;
WT_DATA_HANDLE *dhandle;
@@ -2465,12 +2471,13 @@ __verbose_dump_cache_single(
uint64_t intl_bytes, intl_bytes_max, intl_dirty_bytes;
uint64_t intl_dirty_bytes_max, intl_dirty_pages, intl_pages;
uint64_t leaf_bytes, leaf_bytes_max, leaf_dirty_bytes;
- uint64_t leaf_dirty_bytes_max, leaf_dirty_pages, leaf_pages;
+ uint64_t leaf_dirty_bytes_max, leaf_dirty_pages, leaf_pages, updates_bytes;
intl_bytes = intl_bytes_max = intl_dirty_bytes = 0;
intl_dirty_bytes_max = intl_dirty_pages = intl_pages = 0;
leaf_bytes = leaf_bytes_max = leaf_dirty_bytes = 0;
leaf_dirty_bytes_max = leaf_dirty_pages = leaf_pages = 0;
+ updates_bytes = 0;
dhandle = session->dhandle;
btree = dhandle->handle;
@@ -2513,6 +2520,8 @@ __verbose_dump_cache_single(
leaf_dirty_bytes += size;
leaf_dirty_bytes_max = WT_MAX(leaf_dirty_bytes_max, size);
}
+ if (page->modify != NULL)
+ updates_bytes += page->modify->bytes_updates;
}
}
@@ -2540,15 +2549,17 @@ __verbose_dump_cache_single(
"%" PRIu64 " pages, "
"%" PRIu64 "MB, "
"%" PRIu64 "/%" PRIu64 " clean/dirty pages, "
- "%" PRIu64 "/%" PRIu64 " clean/dirty MB, "
+ "%" PRIu64 "/%" PRIu64 "/%" PRIu64 " clean/dirty/updates MB, "
"%" PRIu64 "MB max page, "
"%" PRIu64 "MB max dirty page",
leaf_pages, leaf_bytes / WT_MEGABYTE, leaf_pages - leaf_dirty_pages, leaf_dirty_pages,
(leaf_bytes - leaf_dirty_bytes) / WT_MEGABYTE, leaf_dirty_bytes / WT_MEGABYTE,
- leaf_bytes_max / WT_MEGABYTE, leaf_dirty_bytes_max / WT_MEGABYTE));
+ updates_bytes / WT_MEGABYTE, leaf_bytes_max / WT_MEGABYTE,
+ leaf_dirty_bytes_max / WT_MEGABYTE));
*total_bytesp += intl_bytes + leaf_bytes;
*total_dirty_bytesp += intl_dirty_bytes + leaf_dirty_bytes;
+ *total_updates_bytesp += updates_bytes;
return (0);
}
@@ -2558,8 +2569,8 @@ __verbose_dump_cache_single(
* Apply dumping cache for all the dhandles.
*/
static int
-__verbose_dump_cache_apply(
- WT_SESSION_IMPL *session, uint64_t *total_bytesp, uint64_t *total_dirty_bytesp)
+__verbose_dump_cache_apply(WT_SESSION_IMPL *session, uint64_t *total_bytesp,
+ uint64_t *total_dirty_bytesp, uint64_t *total_updates_bytesp)
{
WT_CONNECTION_IMPL *conn;
WT_DATA_HANDLE *dhandle;
@@ -2576,8 +2587,8 @@ __verbose_dump_cache_apply(
F_ISSET(dhandle, WT_DHANDLE_DISCARD))
continue;
- WT_WITH_DHANDLE(session, dhandle,
- ret = __verbose_dump_cache_single(session, total_bytesp, total_dirty_bytesp));
+ WT_WITH_DHANDLE(session, dhandle, ret = __verbose_dump_cache_single(session, total_bytesp,
+ total_dirty_bytesp, total_updates_bytesp));
if (ret != 0)
WT_RET(ret);
}
@@ -2591,14 +2602,16 @@ __verbose_dump_cache_apply(
int
__wt_verbose_dump_cache(WT_SESSION_IMPL *session)
{
+ WT_CACHE *cache;
WT_CONNECTION_IMPL *conn;
WT_DECL_RET;
double pct;
- uint64_t total_bytes, total_dirty_bytes;
+ uint64_t total_bytes, total_dirty_bytes, total_updates_bytes;
bool needed;
conn = S2C(session);
- total_bytes = total_dirty_bytes = 0;
+ cache = conn->cache;
+ total_bytes = total_dirty_bytes = total_updates_bytes = 0;
pct = 0.0; /* [-Werror=uninitialized] */
WT_RET(__wt_msg(session, "%s", WT_DIVIDER));
@@ -2609,9 +2622,11 @@ __wt_verbose_dump_cache(WT_SESSION_IMPL *session)
WT_RET(__wt_msg(session, "cache clean check: %s (%2.3f%%)", needed ? "yes" : "no", pct));
needed = __wt_eviction_dirty_needed(session, &pct);
WT_RET(__wt_msg(session, "cache dirty check: %s (%2.3f%%)", needed ? "yes" : "no", pct));
+ needed = __wt_eviction_updates_needed(session, &pct);
+ WT_RET(__wt_msg(session, "cache updates check: %s (%2.3f%%)", needed ? "yes" : "no", pct));
- WT_WITH_HANDLE_LIST_READ_LOCK(
- session, ret = __verbose_dump_cache_apply(session, &total_bytes, &total_dirty_bytes));
+ WT_WITH_HANDLE_LIST_READ_LOCK(session, ret = __verbose_dump_cache_apply(session, &total_bytes,
+ &total_dirty_bytes, &total_updates_bytes));
WT_RET(ret);
/*
@@ -2622,8 +2637,12 @@ __wt_verbose_dump_cache(WT_SESSION_IMPL *session)
WT_RET(__wt_msg(session,
"cache dump: "
"total found: %" PRIu64 "MB vs tracked inuse %" PRIu64 "MB",
- total_bytes / WT_MEGABYTE, __wt_cache_bytes_inuse(conn->cache) / WT_MEGABYTE));
- WT_RET(__wt_msg(session, "total dirty bytes: %" PRIu64 "MB", total_dirty_bytes / WT_MEGABYTE));
+ total_bytes / WT_MEGABYTE, cache->bytes_inmem / WT_MEGABYTE));
+ WT_RET(__wt_msg(session, "total dirty bytes: %" PRIu64 "MB vs tracked dirty %" PRIu64 "MB",
+ total_dirty_bytes / WT_MEGABYTE,
+ (cache->bytes_dirty_intl + cache->bytes_dirty_leaf) / WT_MEGABYTE));
+ WT_RET(__wt_msg(session, "total updates bytes: %" PRIu64 "MB vs tracked updates %" PRIu64 "MB",
+ total_updates_bytes / WT_MEGABYTE, __wt_cache_bytes_updates(cache) / WT_MEGABYTE));
return (0);
}
diff --git a/src/third_party/wiredtiger/src/include/btmem.h b/src/third_party/wiredtiger/src/include/btmem.h
index c79316217dc..94159fd9c2b 100644
--- a/src/third_party/wiredtiger/src/include/btmem.h
+++ b/src/third_party/wiredtiger/src/include/btmem.h
@@ -270,6 +270,7 @@ struct __wt_page_modify {
/* Dirty bytes added to the cache. */
size_t bytes_dirty;
+ size_t bytes_updates;
/*
* When pages are reconciled, the result is one or more replacement blocks. A replacement block
diff --git a/src/third_party/wiredtiger/src/include/btree.h b/src/third_party/wiredtiger/src/include/btree.h
index b691552dc1f..ca639abd6ca 100644
--- a/src/third_party/wiredtiger/src/include/btree.h
+++ b/src/third_party/wiredtiger/src/include/btree.h
@@ -190,10 +190,12 @@ struct __wt_btree {
#define WT_SESSION_BTREE_SYNC_SAFE(session, btree) \
((btree)->syncing != WT_BTREE_SYNC_RUNNING || (btree)->sync_session == (session))
- uint64_t bytes_inmem; /* Cache bytes in memory. */
uint64_t bytes_dirty_intl; /* Bytes in dirty internal pages. */
uint64_t bytes_dirty_leaf; /* Bytes in dirty leaf pages. */
uint64_t bytes_dirty_total; /* Bytes ever dirtied in cache. */
+ uint64_t bytes_inmem; /* Cache bytes in memory. */
+ uint64_t bytes_internal; /* Bytes in internal pages. */
+ uint64_t bytes_updates; /* Bytes in updates. */
/*
* The maximum bytes allowed to be used for the table on disk. This is currently only used for
diff --git a/src/third_party/wiredtiger/src/include/btree.i b/src/third_party/wiredtiger/src/include/btree.i
index 87a6c66dba2..8c5d63aa911 100644
--- a/src/third_party/wiredtiger/src/include/btree.i
+++ b/src/third_party/wiredtiger/src/include/btree.i
@@ -179,6 +179,22 @@ __wt_btree_dirty_leaf_inuse(WT_SESSION_IMPL *session)
}
/*
+ * __wt_btree_bytes_updates --
+ * Return the number of bytes in use by dirty leaf pages.
+ */
+static inline uint64_t
+__wt_btree_bytes_updates(WT_SESSION_IMPL *session)
+{
+ WT_BTREE *btree;
+ WT_CACHE *cache;
+
+ btree = S2BT(session);
+ cache = S2C(session)->cache;
+
+ return (__wt_cache_bytes_plus_overhead(cache, btree->bytes_updates));
+}
+
+/*
* __wt_cache_page_inmem_incr --
* Increment a page's memory footprint in the cache.
*/
@@ -201,20 +217,29 @@ __wt_cache_page_inmem_incr(WT_SESSION_IMPL *session, WT_PAGE *page, size_t size)
*/
(void)__wt_atomic_add64(&cache->bytes_inmem, size);
(void)__wt_atomic_add64(&btree->bytes_inmem, size);
+ if (WT_PAGE_IS_INTERNAL(page)) {
+ (void)__wt_atomic_add64(&cache->bytes_internal, size);
+ (void)__wt_atomic_add64(&btree->bytes_internal, size);
+ }
(void)__wt_atomic_addsize(&page->memory_footprint, size);
- if (__wt_page_is_modified(page)) {
- if (WT_PAGE_IS_INTERNAL(page)) {
- (void)__wt_atomic_add64(&cache->bytes_dirty_intl, size);
- (void)__wt_atomic_add64(&btree->bytes_dirty_intl, size);
- } else if (!btree->lsm_primary) {
- (void)__wt_atomic_add64(&cache->bytes_dirty_leaf, size);
- (void)__wt_atomic_add64(&btree->bytes_dirty_leaf, size);
+
+ if (page->modify != NULL) {
+ if (!WT_PAGE_IS_INTERNAL(page) && !btree->lsm_primary) {
+ (void)__wt_atomic_add64(&cache->bytes_updates, size);
+ (void)__wt_atomic_add64(&btree->bytes_updates, size);
+ (void)__wt_atomic_addsize(&page->modify->bytes_updates, size);
+ }
+ if (__wt_page_is_modified(page)) {
+ if (WT_PAGE_IS_INTERNAL(page)) {
+ (void)__wt_atomic_add64(&cache->bytes_dirty_intl, size);
+ (void)__wt_atomic_add64(&btree->bytes_dirty_intl, size);
+ } else if (!btree->lsm_primary) {
+ (void)__wt_atomic_add64(&cache->bytes_dirty_leaf, size);
+ (void)__wt_atomic_add64(&btree->bytes_dirty_leaf, size);
+ }
+ (void)__wt_atomic_addsize(&page->modify->bytes_dirty, size);
}
- (void)__wt_atomic_addsize(&page->modify->bytes_dirty, size);
}
- /* Track internal size in cache. */
- if (WT_PAGE_IS_INTERNAL(page))
- (void)__wt_atomic_add64(&cache->bytes_internal, size);
}
/*
@@ -327,14 +352,48 @@ __wt_cache_page_byte_dirty_decr(WT_SESSION_IMPL *session, WT_PAGE *page, size_t
}
/*
+ * __wt_cache_page_byte_updates_decr --
+ * Decrement the page's update byte count, guarding from underflow.
+ */
+static inline void
+__wt_cache_page_byte_updates_decr(WT_SESSION_IMPL *session, WT_PAGE *page, size_t size)
+{
+ WT_BTREE *btree;
+ WT_CACHE *cache;
+ size_t decr, orig;
+ int i;
+
+ btree = S2BT(session);
+ cache = S2C(session)->cache;
+ decr = 0; /* [-Wconditional-uninitialized] */
+
+ WT_ASSERT(session, !WT_PAGE_IS_INTERNAL(page) && !btree->lsm_primary && page->modify != NULL);
+
+ /* See above for why this can race. */
+ for (i = 0; i < 5; ++i) {
+ WT_ORDERED_READ(orig, page->modify->bytes_updates);
+ decr = WT_MIN(size, orig);
+ if (__wt_atomic_cassize(&page->modify->bytes_updates, orig, orig - decr))
+ break;
+ }
+
+ if (i == 5)
+ return;
+
+ __wt_cache_decr_check_uint64(session, &btree->bytes_updates, decr, "WT_BTREE.bytes_updates");
+ __wt_cache_decr_check_uint64(session, &cache->bytes_updates, decr, "WT_CACHE.bytes_updates");
+}
+/*
* __wt_cache_page_inmem_decr --
* Decrement a page's memory footprint in the cache.
*/
static inline void
__wt_cache_page_inmem_decr(WT_SESSION_IMPL *session, WT_PAGE *page, size_t size)
{
+ WT_BTREE *btree;
WT_CACHE *cache;
+ btree = S2BT(session);
cache = S2C(session)->cache;
WT_ASSERT(session, size < WT_EXABYTE);
@@ -344,15 +403,19 @@ __wt_cache_page_inmem_decr(WT_SESSION_IMPL *session, WT_PAGE *page, size_t size)
* threads that are trying to increase the sizes concurrently.
*/
__wt_cache_decr_check_size(session, &page->memory_footprint, size, "WT_PAGE.memory_footprint");
- __wt_cache_decr_check_uint64(
- session, &S2BT(session)->bytes_inmem, size, "WT_BTREE.bytes_inmem");
+ __wt_cache_decr_check_uint64(session, &btree->bytes_inmem, size, "WT_BTREE.bytes_inmem");
__wt_cache_decr_check_uint64(session, &cache->bytes_inmem, size, "WT_CACHE.bytes_inmem");
+ if (page->modify != NULL && !WT_PAGE_IS_INTERNAL(page) && !btree->lsm_primary)
+ __wt_cache_page_byte_updates_decr(session, page, size);
if (__wt_page_is_modified(page))
__wt_cache_page_byte_dirty_decr(session, page, size);
/* Track internal size in cache. */
- if (WT_PAGE_IS_INTERNAL(page))
+ if (WT_PAGE_IS_INTERNAL(page)) {
+ __wt_cache_decr_check_uint64(
+ session, &btree->bytes_internal, size, "WT_BTREE.bytes_internal");
__wt_cache_decr_check_uint64(
session, &cache->bytes_internal, size, "WT_CACHE.bytes_internal");
+ }
}
/*
@@ -381,11 +444,11 @@ __wt_cache_dirty_incr(WT_SESSION_IMPL *session, WT_PAGE *page)
(void)__wt_atomic_add64(&cache->bytes_dirty_intl, size);
(void)__wt_atomic_add64(&btree->bytes_dirty_intl, size);
} else {
- (void)__wt_atomic_add64(&cache->pages_dirty_leaf, 1);
if (!btree->lsm_primary) {
(void)__wt_atomic_add64(&cache->bytes_dirty_leaf, size);
(void)__wt_atomic_add64(&btree->bytes_dirty_leaf, size);
}
+ (void)__wt_atomic_add64(&cache->pages_dirty_leaf, 1);
}
(void)__wt_atomic_add64(&cache->bytes_dirty_total, size);
(void)__wt_atomic_add64(&btree->bytes_dirty_total, size);
@@ -420,13 +483,18 @@ __wt_cache_dirty_decr(WT_SESSION_IMPL *session, WT_PAGE *page)
* Decrement a page image's size to the cache.
*/
static inline void
-__wt_cache_page_image_decr(WT_SESSION_IMPL *session, uint32_t size)
+__wt_cache_page_image_decr(WT_SESSION_IMPL *session, WT_PAGE *page)
{
WT_CACHE *cache;
cache = S2C(session)->cache;
- __wt_cache_decr_check_uint64(session, &cache->bytes_image, size, "WT_CACHE.image_inmem");
+ if (WT_PAGE_IS_INTERNAL(page))
+ __wt_cache_decr_check_uint64(
+ session, &cache->bytes_image_intl, page->dsk->mem_size, "WT_CACHE.bytes_image");
+ else
+ __wt_cache_decr_check_uint64(
+ session, &cache->bytes_image_leaf, page->dsk->mem_size, "WT_CACHE.bytes_image");
}
/*
@@ -434,12 +502,15 @@ __wt_cache_page_image_decr(WT_SESSION_IMPL *session, uint32_t size)
* Increment a page image's size to the cache.
*/
static inline void
-__wt_cache_page_image_incr(WT_SESSION_IMPL *session, uint32_t size)
+__wt_cache_page_image_incr(WT_SESSION_IMPL *session, WT_PAGE *page)
{
WT_CACHE *cache;
cache = S2C(session)->cache;
- (void)__wt_atomic_add64(&cache->bytes_image, size);
+ if (WT_PAGE_IS_INTERNAL(page))
+ (void)__wt_atomic_add64(&cache->bytes_image_intl, page->dsk->mem_size);
+ else
+ (void)__wt_atomic_add64(&cache->bytes_image_leaf, page->dsk->mem_size);
}
/*
@@ -464,9 +535,12 @@ __wt_cache_page_evict(WT_SESSION_IMPL *session, WT_PAGE *page)
session, &cache->bytes_inmem, page->memory_footprint, "WT_CACHE.bytes_inmem");
/* Update the bytes_internal value to reflect the eviction */
- if (WT_PAGE_IS_INTERNAL(page))
+ if (WT_PAGE_IS_INTERNAL(page)) {
+ __wt_cache_decr_check_uint64(
+ session, &btree->bytes_internal, page->memory_footprint, "WT_BTREE.bytes_internal");
__wt_cache_decr_check_uint64(
session, &cache->bytes_internal, page->memory_footprint, "WT_CACHE.bytes_internal");
+ }
/* Update the cache's dirty-byte count. */
if (modify != NULL && modify->bytes_dirty != 0) {
@@ -483,6 +557,14 @@ __wt_cache_page_evict(WT_SESSION_IMPL *session, WT_PAGE *page)
}
}
+ /* Update the cache's updates-byte count. */
+ if (modify != NULL) {
+ __wt_cache_decr_check_uint64(
+ session, &btree->bytes_updates, modify->bytes_updates, "WT_BTREE.bytes_updates");
+ __wt_cache_decr_check_uint64(
+ session, &cache->bytes_updates, modify->bytes_updates, "WT_CACHE.bytes_updates");
+ }
+
/* Update bytes and pages evicted. */
(void)__wt_atomic_add64(&cache->bytes_evict, page->memory_footprint);
(void)__wt_atomic_addv64(&cache->pages_evicted, 1);
diff --git a/src/third_party/wiredtiger/src/include/cache.h b/src/third_party/wiredtiger/src/include/cache.h
index 64f1efe1201..976293fb083 100644
--- a/src/third_party/wiredtiger/src/include/cache.h
+++ b/src/third_party/wiredtiger/src/include/cache.h
@@ -66,21 +66,24 @@ struct __wt_cache {
* the values don't have to be exact, they can't be garbage, we track what comes in and what
* goes out and calculate the difference as needed.
*/
+
uint64_t bytes_dirty_intl; /* Bytes/pages currently dirty */
- uint64_t pages_dirty_intl;
uint64_t bytes_dirty_leaf;
uint64_t bytes_dirty_total;
+ uint64_t bytes_evict; /* Bytes/pages discarded by eviction */
+ uint64_t bytes_hs; /* History store bytes inmem */
+ uint64_t bytes_image_intl; /* Bytes of disk images (internal) */
+ uint64_t bytes_image_leaf; /* Bytes of disk images (leaf) */
+ uint64_t bytes_inmem; /* Bytes/pages in memory */
+ uint64_t bytes_internal; /* Bytes of internal pages */
+ uint64_t bytes_read; /* Bytes read into memory */
+ uint64_t bytes_updates; /* Bytes of updates to pages */
+ uint64_t bytes_written;
+
+ uint64_t pages_dirty_intl;
uint64_t pages_dirty_leaf;
- uint64_t bytes_evict; /* Bytes/pages discarded by eviction */
uint64_t pages_evicted;
- uint64_t bytes_image; /* Bytes of disk images */
- uint64_t bytes_inmem; /* Bytes/pages in memory */
uint64_t pages_inmem;
- uint64_t bytes_internal; /* Bytes of internal pages */
- uint64_t bytes_read; /* Bytes read into memory */
- uint64_t bytes_written;
-
- uint64_t bytes_hs; /* History store bytes inmem */
volatile uint64_t eviction_progress; /* Eviction progress count */
uint64_t last_eviction_progress; /* Tracked eviction progress */
@@ -109,10 +112,12 @@ struct __wt_cache {
* Eviction threshold percentages use double type to allow for specifying percentages less than
* one.
*/
- double eviction_dirty_target; /* Percent to allow dirty */
- double eviction_dirty_trigger; /* Percent to trigger dirty eviction */
- double eviction_trigger; /* Percent to trigger eviction */
- double eviction_target; /* Percent to end eviction */
+ double eviction_dirty_target; /* Percent to allow dirty */
+ double eviction_dirty_trigger; /* Percent to trigger dirty eviction */
+ double eviction_trigger; /* Percent to trigger eviction */
+ double eviction_target; /* Percent to end eviction */
+ double eviction_updates_target; /* Percent to allow for updates */
+ double eviction_updates_trigger; /* Percent of updates to trigger eviction */
double eviction_checkpoint_target; /* Percent to reduce dirty
to during checkpoint scrubs */
@@ -216,17 +221,20 @@ struct __wt_cache {
uint32_t pool_flags; /* Cache pool flags */
/* AUTOMATIC FLAG VALUE GENERATION START */
-#define WT_CACHE_EVICT_CLEAN 0x001u /* Evict clean pages */
-#define WT_CACHE_EVICT_CLEAN_HARD 0x002u /* Clean % blocking app threads */
-#define WT_CACHE_EVICT_DEBUG_MODE 0x004u /* Aggressive debugging mode */
-#define WT_CACHE_EVICT_DIRTY 0x008u /* Evict dirty pages */
-#define WT_CACHE_EVICT_DIRTY_HARD 0x010u /* Dirty % blocking app threads */
-#define WT_CACHE_EVICT_HS 0x020u /* Try history store eviction */
-#define WT_CACHE_EVICT_NOKEEP 0x040u /* Don't add read pages to cache */
-#define WT_CACHE_EVICT_SCRUB 0x080u /* Scrub dirty pages */
-#define WT_CACHE_EVICT_URGENT 0x100u /* Pages are in the urgent queue */
+#define WT_CACHE_EVICT_CLEAN 0x001u /* Evict clean pages */
+#define WT_CACHE_EVICT_CLEAN_HARD 0x002u /* Clean % blocking app threads */
+#define WT_CACHE_EVICT_DEBUG_MODE 0x004u /* Aggressive debugging mode */
+#define WT_CACHE_EVICT_DIRTY 0x008u /* Evict dirty pages */
+#define WT_CACHE_EVICT_DIRTY_HARD 0x010u /* Dirty % blocking app threads */
+#define WT_CACHE_EVICT_NOKEEP 0x020u /* Don't add read pages to cache */
+#define WT_CACHE_EVICT_SCRUB 0x040u /* Scrub dirty pages */
+#define WT_CACHE_EVICT_UPDATES 0x080u /* Evict pages with updates */
+#define WT_CACHE_EVICT_UPDATES_HARD 0x100u /* Update % blocking app threads */
+#define WT_CACHE_EVICT_URGENT 0x200u /* Pages are in the urgent queue */
/* AUTOMATIC FLAG VALUE GENERATION STOP */
-#define WT_CACHE_EVICT_ALL (WT_CACHE_EVICT_CLEAN | WT_CACHE_EVICT_DIRTY)
+#define WT_CACHE_EVICT_ALL (WT_CACHE_EVICT_CLEAN | WT_CACHE_EVICT_DIRTY | WT_CACHE_EVICT_UPDATES)
+#define WT_CACHE_EVICT_HARD \
+ (WT_CACHE_EVICT_CLEAN_HARD | WT_CACHE_EVICT_DIRTY_HARD | WT_CACHE_EVICT_UPDATES_HARD)
uint32_t flags;
};
diff --git a/src/third_party/wiredtiger/src/include/cache.i b/src/third_party/wiredtiger/src/include/cache.i
index 3818e64dde7..5a8d8bdfd4c 100644
--- a/src/third_party/wiredtiger/src/include/cache.i
+++ b/src/third_party/wiredtiger/src/include/cache.i
@@ -84,8 +84,8 @@ __wt_cache_stuck(WT_SESSION_IMPL *session)
WT_CACHE *cache;
cache = S2C(session)->cache;
- return (cache->evict_aggressive_score == WT_EVICT_SCORE_MAX &&
- F_ISSET(cache, WT_CACHE_EVICT_CLEAN_HARD | WT_CACHE_EVICT_DIRTY_HARD));
+ return (
+ cache->evict_aggressive_score == WT_EVICT_SCORE_MAX && F_ISSET(cache, WT_CACHE_EVICT_HARD));
}
/*
@@ -169,13 +169,24 @@ __wt_cache_dirty_leaf_inuse(WT_CACHE *cache)
}
/*
+ * __wt_cache_bytes_updates --
+ * Return the number of bytes in use for updates.
+ */
+static inline uint64_t
+__wt_cache_bytes_updates(WT_CACHE *cache)
+{
+ return (__wt_cache_bytes_plus_overhead(cache, cache->bytes_updates));
+}
+
+/*
* __wt_cache_bytes_image --
* Return the number of page image bytes in use.
*/
static inline uint64_t
__wt_cache_bytes_image(WT_CACHE *cache)
{
- return (__wt_cache_bytes_plus_overhead(cache, cache->bytes_image));
+ return (
+ __wt_cache_bytes_plus_overhead(cache, cache->bytes_image_intl + cache->bytes_image_leaf));
}
/*
@@ -185,15 +196,14 @@ __wt_cache_bytes_image(WT_CACHE *cache)
static inline uint64_t
__wt_cache_bytes_other(WT_CACHE *cache)
{
- uint64_t bytes_image, bytes_inmem;
+ uint64_t bytes_other;
/*
- * Reads can race with changes to the values, so only read once and check for the race.
+ * Reads can race with changes to the values, so check that the calculation doesn't go negative.
*/
- bytes_image = *(volatile uint64_t *)&cache->bytes_image;
- bytes_inmem = *(volatile uint64_t *)&cache->bytes_inmem;
- return ((bytes_image > bytes_inmem) ? 0 : __wt_cache_bytes_plus_overhead(
- cache, bytes_inmem - bytes_image));
+ bytes_other =
+ __wt_safe_sub(cache->bytes_inmem, cache->bytes_image_intl + cache->bytes_image_leaf);
+ return (__wt_cache_bytes_plus_overhead(cache, bytes_other));
}
/*
@@ -301,7 +311,32 @@ static inline bool
__wt_eviction_dirty_needed(WT_SESSION_IMPL *session, double *pct_fullp)
{
WT_CACHE *cache;
- uint64_t dirty_inuse, bytes_max;
+ uint64_t bytes_dirty, bytes_max;
+
+ cache = S2C(session)->cache;
+
+ /*
+ * Avoid division by zero if the cache size has not yet been set in a shared cache.
+ */
+ bytes_dirty = __wt_cache_dirty_leaf_inuse(cache);
+ bytes_max = S2C(session)->cache_size + 1;
+
+ if (pct_fullp != NULL)
+ *pct_fullp = (100.0 * bytes_dirty) / bytes_max;
+
+ return (bytes_dirty > (uint64_t)(cache->eviction_dirty_trigger * bytes_max) / 100);
+}
+
+/*
+ * __wt_eviction_updates_needed --
+ * Return if an application thread should do eviction due to the total volume of updates in
+ * cache.
+ */
+static inline bool
+__wt_eviction_updates_needed(WT_SESSION_IMPL *session, double *pct_fullp)
+{
+ WT_CACHE *cache;
+ uint64_t bytes_max, bytes_updates;
cache = S2C(session)->cache;
@@ -309,12 +344,12 @@ __wt_eviction_dirty_needed(WT_SESSION_IMPL *session, double *pct_fullp)
* Avoid division by zero if the cache size has not yet been set in a shared cache.
*/
bytes_max = S2C(session)->cache_size + 1;
- dirty_inuse = __wt_cache_dirty_leaf_inuse(cache);
+ bytes_updates = __wt_cache_bytes_updates(cache);
if (pct_fullp != NULL)
- *pct_fullp = ((100.0 * dirty_inuse) / bytes_max);
+ *pct_fullp = (100.0 * bytes_updates) / bytes_max;
- return (dirty_inuse > (uint64_t)(cache->eviction_dirty_trigger * bytes_max) / 100);
+ return (bytes_updates > (uint64_t)(cache->eviction_updates_trigger * bytes_max) / 100);
}
/*
@@ -326,8 +361,8 @@ static inline bool
__wt_eviction_needed(WT_SESSION_IMPL *session, bool busy, bool readonly, double *pct_fullp)
{
WT_CACHE *cache;
- double pct_dirty, pct_full;
- bool clean_needed, dirty_needed;
+ double pct_dirty, pct_full, pct_updates;
+ bool clean_needed, dirty_needed, updates_needed;
cache = S2C(session)->cache;
@@ -340,18 +375,21 @@ __wt_eviction_needed(WT_SESSION_IMPL *session, bool busy, bool readonly, double
clean_needed = __wt_eviction_clean_needed(session, &pct_full);
if (readonly) {
- dirty_needed = false;
- pct_dirty = 0.0;
- } else
+ dirty_needed = updates_needed = false;
+ pct_dirty = pct_updates = 0.0;
+ } else {
dirty_needed = __wt_eviction_dirty_needed(session, &pct_dirty);
+ updates_needed = __wt_eviction_updates_needed(session, &pct_updates);
+ }
/*
* Calculate the cache full percentage; anything over the trigger means we involve the
* application thread.
*/
if (pct_fullp != NULL)
- *pct_fullp = WT_MAX(0.0, 100.0 -
- WT_MIN(cache->eviction_trigger - pct_full, cache->eviction_dirty_trigger - pct_dirty));
+ *pct_fullp = WT_MAX(0.0, 100.0 - WT_MIN(WT_MIN(cache->eviction_trigger - pct_full,
+ cache->eviction_dirty_trigger - pct_dirty),
+ cache->eviction_updates_trigger - pct_updates));
/*
* Only check the dirty trigger when the session is not busy.
@@ -360,7 +398,7 @@ __wt_eviction_needed(WT_SESSION_IMPL *session, bool busy, bool readonly, double
* possible without exceeding the cache size. The next transaction in this session will not be
* able to start until the cache is under the limit.
*/
- return (clean_needed || (!busy && dirty_needed));
+ return (clean_needed || updates_needed || (!busy && dirty_needed));
}
/*
diff --git a/src/third_party/wiredtiger/src/include/extern.h b/src/third_party/wiredtiger/src/include/extern.h
index a55267f1bc0..43b0a9f943d 100644
--- a/src/third_party/wiredtiger/src/include/extern.h
+++ b/src/third_party/wiredtiger/src/include/extern.h
@@ -1802,6 +1802,8 @@ static inline bool __wt_eviction_dirty_needed(WT_SESSION_IMPL *session, double *
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline bool __wt_eviction_needed(WT_SESSION_IMPL *session, bool busy, bool readonly,
double *pct_fullp) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
+static inline bool __wt_eviction_updates_needed(WT_SESSION_IMPL *session, double *pct_fullp)
+ WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline bool __wt_isalnum(u_char c) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline bool __wt_isalpha(u_char c) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline bool __wt_isdigit(u_char c) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
@@ -2106,6 +2108,8 @@ static inline uint64_t __wt_btree_bytes_evictable(WT_SESSION_IMPL *session)
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline uint64_t __wt_btree_bytes_inuse(WT_SESSION_IMPL *session)
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
+static inline uint64_t __wt_btree_bytes_updates(WT_SESSION_IMPL *session)
+ WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline uint64_t __wt_btree_dirty_inuse(WT_SESSION_IMPL *session)
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline uint64_t __wt_btree_dirty_leaf_inuse(WT_SESSION_IMPL *session)
@@ -2118,6 +2122,8 @@ static inline uint64_t __wt_cache_bytes_other(WT_CACHE *cache)
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline uint64_t __wt_cache_bytes_plus_overhead(WT_CACHE *cache, uint64_t sz)
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
+static inline uint64_t __wt_cache_bytes_updates(WT_CACHE *cache)
+ WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline uint64_t __wt_cache_dirty_inuse(WT_CACHE *cache)
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline uint64_t __wt_cache_dirty_leaf_inuse(WT_CACHE *cache)
@@ -2133,6 +2139,8 @@ static inline uint64_t __wt_clock(WT_SESSION_IMPL *session)
static inline uint64_t __wt_clock_to_nsec(uint64_t end, uint64_t begin)
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline uint64_t __wt_rdtsc(void) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
+static inline uint64_t __wt_safe_sub(uint64_t v1, uint64_t v2)
+ WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline uint64_t __wt_txn_id_alloc(WT_SESSION_IMPL *session, bool publish)
WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
static inline uint64_t __wt_txn_oldest_id(WT_SESSION_IMPL *session)
@@ -2146,9 +2154,11 @@ static inline void __wt_cache_dirty_decr(WT_SESSION_IMPL *session, WT_PAGE *page
static inline void __wt_cache_dirty_incr(WT_SESSION_IMPL *session, WT_PAGE *page);
static inline void __wt_cache_page_byte_dirty_decr(
WT_SESSION_IMPL *session, WT_PAGE *page, size_t size);
+static inline void __wt_cache_page_byte_updates_decr(
+ WT_SESSION_IMPL *session, WT_PAGE *page, size_t size);
static inline void __wt_cache_page_evict(WT_SESSION_IMPL *session, WT_PAGE *page);
-static inline void __wt_cache_page_image_decr(WT_SESSION_IMPL *session, uint32_t size);
-static inline void __wt_cache_page_image_incr(WT_SESSION_IMPL *session, uint32_t size);
+static inline void __wt_cache_page_image_decr(WT_SESSION_IMPL *session, WT_PAGE *page);
+static inline void __wt_cache_page_image_incr(WT_SESSION_IMPL *session, WT_PAGE *page);
static inline void __wt_cache_page_inmem_decr(WT_SESSION_IMPL *session, WT_PAGE *page, size_t size);
static inline void __wt_cache_page_inmem_incr(WT_SESSION_IMPL *session, WT_PAGE *page, size_t size);
static inline void __wt_cache_read_gen_bump(WT_SESSION_IMPL *session, WT_PAGE *page);
diff --git a/src/third_party/wiredtiger/src/include/misc.i b/src/third_party/wiredtiger/src/include/misc.i
index 445684984b3..6967811b434 100644
--- a/src/third_party/wiredtiger/src/include/misc.i
+++ b/src/third_party/wiredtiger/src/include/misc.i
@@ -30,6 +30,16 @@ __wt_hex(int c)
}
/*
+ * __wt_safe_sub --
+ * Subtract unsigned integers, rounding to zero if the result would be negative.
+ */
+static inline uint64_t
+__wt_safe_sub(uint64_t v1, uint64_t v2)
+{
+ return (v2 > v1 ? 0 : v1 - v2);
+}
+
+/*
* __wt_strdup --
* ANSI strdup function.
*/
diff --git a/src/third_party/wiredtiger/src/include/stat.h b/src/third_party/wiredtiger/src/include/stat.h
index 50cc22f6d4f..eb90627015d 100644
--- a/src/third_party/wiredtiger/src/include/stat.h
+++ b/src/third_party/wiredtiger/src/include/stat.h
@@ -336,6 +336,7 @@ struct __wt_connection_stats {
int64_t cache_read_app_time;
int64_t cache_write_app_count;
int64_t cache_write_app_time;
+ int64_t cache_bytes_updates;
int64_t cache_bytes_image;
int64_t cache_bytes_hs;
int64_t cache_bytes_inuse;
diff --git a/src/third_party/wiredtiger/src/include/wiredtiger.in b/src/third_party/wiredtiger/src/include/wiredtiger.in
index efc658938d0..26ed8a8cd9c 100644
--- a/src/third_party/wiredtiger/src/include/wiredtiger.in
+++ b/src/third_party/wiredtiger/src/include/wiredtiger.in
@@ -2251,6 +2251,17 @@ struct __wt_connection {
* contains at least this much content. It is a percentage of the cache size if the value
* is within the range of 10 to 100 or an absolute size when greater than 100. The value is
* not allowed to exceed the \c cache_size., an integer between 10 and 10TB; default \c 95.}
+ * @config{eviction_updates_target, perform eviction in worker threads when the cache
+ * contains at least this many bytes of updates. It is a percentage of the cache size if
+ * the value is within the range of 0 to 100 or an absolute size when greater than 100.
+ * Calculated as half of \c eviction_dirty_target by default. The value is not allowed to
+ * exceed the \c cache_size., an integer between 0 and 10TB; default \c 0.}
+ * @config{eviction_updates_trigger, trigger application threads to perform eviction when
+ * the cache contains at least this many bytes of updates. It is a percentage of the cache
+ * size if the value is within the range of 1 to 100 or an absolute size when greater than
+ * 100. Calculated as half of \c eviction_dirty_trigger by default. The value is not
+ * allowed to exceed the \c cache_size. This setting only alters behavior if it is lower
+ * than eviction_trigger., an integer between 0 and 10TB; default \c 0.}
* @config{file_manager = (, control how file handles are managed., a set of related
* configuration options defined below.}
* @config{&nbsp;&nbsp;&nbsp;&nbsp;
@@ -2901,6 +2912,17 @@ struct __wt_connection {
* at least this much content. It is a percentage of the cache size if the value is within the
* range of 10 to 100 or an absolute size when greater than 100. The value is not allowed to exceed
* the \c cache_size., an integer between 10 and 10TB; default \c 95.}
+ * @config{eviction_updates_target, perform eviction in worker threads when the cache contains at
+ * least this many bytes of updates. It is a percentage of the cache size if the value is within
+ * the range of 0 to 100 or an absolute size when greater than 100. Calculated as half of \c
+ * eviction_dirty_target by default. The value is not allowed to exceed the \c cache_size., an
+ * integer between 0 and 10TB; default \c 0.}
+ * @config{eviction_updates_trigger, trigger application threads to perform eviction when the cache
+ * contains at least this many bytes of updates. It is a percentage of the cache size if the value
+ * is within the range of 1 to 100 or an absolute size when greater than 100. Calculated as half of
+ * \c eviction_dirty_trigger by default. The value is not allowed to exceed the \c cache_size.
+ * This setting only alters behavior if it is lower than eviction_trigger., an integer between 0 and
+ * 10TB; default \c 0.}
* @config{exclusive, fail if the database already exists\, generally used with the \c create
* option., a boolean flag; default \c false.}
* @config{extensions, list of shared library extensions to load (using dlopen). Any values
@@ -5025,969 +5047,971 @@ extern int wiredtiger_extension_terminate(WT_CONNECTION *connection);
#define WT_STAT_CONN_CACHE_WRITE_APP_COUNT 1039
/*! cache: application threads page write from cache to disk time (usecs) */
#define WT_STAT_CONN_CACHE_WRITE_APP_TIME 1040
+/*! cache: bytes allocated for updates */
+#define WT_STAT_CONN_CACHE_BYTES_UPDATES 1041
/*! cache: bytes belonging to page images in the cache */
-#define WT_STAT_CONN_CACHE_BYTES_IMAGE 1041
+#define WT_STAT_CONN_CACHE_BYTES_IMAGE 1042
/*! cache: bytes belonging to the history store table in the cache */
-#define WT_STAT_CONN_CACHE_BYTES_HS 1042
+#define WT_STAT_CONN_CACHE_BYTES_HS 1043
/*! cache: bytes currently in the cache */
-#define WT_STAT_CONN_CACHE_BYTES_INUSE 1043
+#define WT_STAT_CONN_CACHE_BYTES_INUSE 1044
/*! cache: bytes dirty in the cache cumulative */
-#define WT_STAT_CONN_CACHE_BYTES_DIRTY_TOTAL 1044
+#define WT_STAT_CONN_CACHE_BYTES_DIRTY_TOTAL 1045
/*! cache: bytes not belonging to page images in the cache */
-#define WT_STAT_CONN_CACHE_BYTES_OTHER 1045
+#define WT_STAT_CONN_CACHE_BYTES_OTHER 1046
/*! cache: bytes read into cache */
-#define WT_STAT_CONN_CACHE_BYTES_READ 1046
+#define WT_STAT_CONN_CACHE_BYTES_READ 1047
/*! cache: bytes written from cache */
-#define WT_STAT_CONN_CACHE_BYTES_WRITE 1047
+#define WT_STAT_CONN_CACHE_BYTES_WRITE 1048
/*! cache: cache overflow score */
-#define WT_STAT_CONN_CACHE_LOOKASIDE_SCORE 1048
+#define WT_STAT_CONN_CACHE_LOOKASIDE_SCORE 1049
/*! cache: checkpoint blocked page eviction */
-#define WT_STAT_CONN_CACHE_EVICTION_CHECKPOINT 1049
+#define WT_STAT_CONN_CACHE_EVICTION_CHECKPOINT 1050
/*! cache: eviction calls to get a page */
-#define WT_STAT_CONN_CACHE_EVICTION_GET_REF 1050
+#define WT_STAT_CONN_CACHE_EVICTION_GET_REF 1051
/*! cache: eviction calls to get a page found queue empty */
-#define WT_STAT_CONN_CACHE_EVICTION_GET_REF_EMPTY 1051
+#define WT_STAT_CONN_CACHE_EVICTION_GET_REF_EMPTY 1052
/*! cache: eviction calls to get a page found queue empty after locking */
-#define WT_STAT_CONN_CACHE_EVICTION_GET_REF_EMPTY2 1052
+#define WT_STAT_CONN_CACHE_EVICTION_GET_REF_EMPTY2 1053
/*! cache: eviction currently operating in aggressive mode */
-#define WT_STAT_CONN_CACHE_EVICTION_AGGRESSIVE_SET 1053
+#define WT_STAT_CONN_CACHE_EVICTION_AGGRESSIVE_SET 1054
/*! cache: eviction empty score */
-#define WT_STAT_CONN_CACHE_EVICTION_EMPTY_SCORE 1054
+#define WT_STAT_CONN_CACHE_EVICTION_EMPTY_SCORE 1055
/*! cache: eviction passes of a file */
-#define WT_STAT_CONN_CACHE_EVICTION_WALK_PASSES 1055
+#define WT_STAT_CONN_CACHE_EVICTION_WALK_PASSES 1056
/*! cache: eviction server candidate queue empty when topping up */
-#define WT_STAT_CONN_CACHE_EVICTION_QUEUE_EMPTY 1056
+#define WT_STAT_CONN_CACHE_EVICTION_QUEUE_EMPTY 1057
/*! cache: eviction server candidate queue not empty when topping up */
-#define WT_STAT_CONN_CACHE_EVICTION_QUEUE_NOT_EMPTY 1057
+#define WT_STAT_CONN_CACHE_EVICTION_QUEUE_NOT_EMPTY 1058
/*! cache: eviction server evicting pages */
-#define WT_STAT_CONN_CACHE_EVICTION_SERVER_EVICTING 1058
+#define WT_STAT_CONN_CACHE_EVICTION_SERVER_EVICTING 1059
/*!
* cache: eviction server slept, because we did not make progress with
* eviction
*/
-#define WT_STAT_CONN_CACHE_EVICTION_SERVER_SLEPT 1059
+#define WT_STAT_CONN_CACHE_EVICTION_SERVER_SLEPT 1060
/*! cache: eviction server unable to reach eviction goal */
-#define WT_STAT_CONN_CACHE_EVICTION_SLOW 1060
+#define WT_STAT_CONN_CACHE_EVICTION_SLOW 1061
/*! cache: eviction server waiting for a leaf page */
-#define WT_STAT_CONN_CACHE_EVICTION_WALK_LEAF_NOTFOUND 1061
+#define WT_STAT_CONN_CACHE_EVICTION_WALK_LEAF_NOTFOUND 1062
/*! cache: eviction state */
-#define WT_STAT_CONN_CACHE_EVICTION_STATE 1062
+#define WT_STAT_CONN_CACHE_EVICTION_STATE 1063
/*! cache: eviction walk target pages histogram - 0-9 */
-#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT10 1063
+#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT10 1064
/*! cache: eviction walk target pages histogram - 10-31 */
-#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT32 1064
+#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT32 1065
/*! cache: eviction walk target pages histogram - 128 and higher */
-#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_GE128 1065
+#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_GE128 1066
/*! cache: eviction walk target pages histogram - 32-63 */
-#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT64 1066
+#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT64 1067
/*! cache: eviction walk target pages histogram - 64-128 */
-#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT128 1067
+#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT128 1068
/*! cache: eviction walk target strategy both clean and dirty pages */
-#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_BOTH_CLEAN_AND_DIRTY 1068
+#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_BOTH_CLEAN_AND_DIRTY 1069
/*! cache: eviction walk target strategy only clean pages */
-#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_CLEAN 1069
+#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_CLEAN 1070
/*! cache: eviction walk target strategy only dirty pages */
-#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_DIRTY 1070
+#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_DIRTY 1071
/*! cache: eviction walks abandoned */
-#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ABANDONED 1071
+#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ABANDONED 1072
/*! cache: eviction walks gave up because they restarted their walk twice */
-#define WT_STAT_CONN_CACHE_EVICTION_WALKS_STOPPED 1072
+#define WT_STAT_CONN_CACHE_EVICTION_WALKS_STOPPED 1073
/*!
* cache: eviction walks gave up because they saw too many pages and
* found no candidates
*/
-#define WT_STAT_CONN_CACHE_EVICTION_WALKS_GAVE_UP_NO_TARGETS 1073
+#define WT_STAT_CONN_CACHE_EVICTION_WALKS_GAVE_UP_NO_TARGETS 1074
/*!
* cache: eviction walks gave up because they saw too many pages and
* found too few candidates
*/
-#define WT_STAT_CONN_CACHE_EVICTION_WALKS_GAVE_UP_RATIO 1074
+#define WT_STAT_CONN_CACHE_EVICTION_WALKS_GAVE_UP_RATIO 1075
/*! cache: eviction walks reached end of tree */
-#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ENDED 1075
+#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ENDED 1076
/*! cache: eviction walks started from root of tree */
-#define WT_STAT_CONN_CACHE_EVICTION_WALK_FROM_ROOT 1076
+#define WT_STAT_CONN_CACHE_EVICTION_WALK_FROM_ROOT 1077
/*! cache: eviction walks started from saved location in tree */
-#define WT_STAT_CONN_CACHE_EVICTION_WALK_SAVED_POS 1077
+#define WT_STAT_CONN_CACHE_EVICTION_WALK_SAVED_POS 1078
/*! cache: eviction worker thread active */
-#define WT_STAT_CONN_CACHE_EVICTION_ACTIVE_WORKERS 1078
+#define WT_STAT_CONN_CACHE_EVICTION_ACTIVE_WORKERS 1079
/*! cache: eviction worker thread created */
-#define WT_STAT_CONN_CACHE_EVICTION_WORKER_CREATED 1079
+#define WT_STAT_CONN_CACHE_EVICTION_WORKER_CREATED 1080
/*! cache: eviction worker thread evicting pages */
-#define WT_STAT_CONN_CACHE_EVICTION_WORKER_EVICTING 1080
+#define WT_STAT_CONN_CACHE_EVICTION_WORKER_EVICTING 1081
/*! cache: eviction worker thread removed */
-#define WT_STAT_CONN_CACHE_EVICTION_WORKER_REMOVED 1081
+#define WT_STAT_CONN_CACHE_EVICTION_WORKER_REMOVED 1082
/*! cache: eviction worker thread stable number */
-#define WT_STAT_CONN_CACHE_EVICTION_STABLE_STATE_WORKERS 1082
+#define WT_STAT_CONN_CACHE_EVICTION_STABLE_STATE_WORKERS 1083
/*! cache: files with active eviction walks */
-#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ACTIVE 1083
+#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ACTIVE 1084
/*! cache: files with new eviction walks started */
-#define WT_STAT_CONN_CACHE_EVICTION_WALKS_STARTED 1084
+#define WT_STAT_CONN_CACHE_EVICTION_WALKS_STARTED 1085
/*! cache: force re-tuning of eviction workers once in a while */
-#define WT_STAT_CONN_CACHE_EVICTION_FORCE_RETUNE 1085
+#define WT_STAT_CONN_CACHE_EVICTION_FORCE_RETUNE 1086
/*!
* cache: forced eviction - history store pages failed to evict while
* session has history store cursor open
*/
-#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS_FAIL 1086
+#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS_FAIL 1087
/*!
* cache: forced eviction - history store pages selected while session
* has history store cursor open
*/
-#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS 1087
+#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS 1088
/*!
* cache: forced eviction - history store pages successfully evicted
* while session has history store cursor open
*/
-#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS_SUCCESS 1088
+#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS_SUCCESS 1089
/*! cache: forced eviction - pages evicted that were clean count */
-#define WT_STAT_CONN_CACHE_EVICTION_FORCE_CLEAN 1089
+#define WT_STAT_CONN_CACHE_EVICTION_FORCE_CLEAN 1090
/*! cache: forced eviction - pages evicted that were clean time (usecs) */
-#define WT_STAT_CONN_CACHE_EVICTION_FORCE_CLEAN_TIME 1090
+#define WT_STAT_CONN_CACHE_EVICTION_FORCE_CLEAN_TIME 1091
/*! cache: forced eviction - pages evicted that were dirty count */
-#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DIRTY 1091
+#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DIRTY 1092
/*! cache: forced eviction - pages evicted that were dirty time (usecs) */
-#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DIRTY_TIME 1092
+#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DIRTY_TIME 1093
/*!
* cache: forced eviction - pages selected because of too many deleted
* items count
*/
-#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DELETE 1093
+#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DELETE 1094
/*! cache: forced eviction - pages selected count */
-#define WT_STAT_CONN_CACHE_EVICTION_FORCE 1094
+#define WT_STAT_CONN_CACHE_EVICTION_FORCE 1095
/*! cache: forced eviction - pages selected unable to be evicted count */
-#define WT_STAT_CONN_CACHE_EVICTION_FORCE_FAIL 1095
+#define WT_STAT_CONN_CACHE_EVICTION_FORCE_FAIL 1096
/*! cache: forced eviction - pages selected unable to be evicted time */
-#define WT_STAT_CONN_CACHE_EVICTION_FORCE_FAIL_TIME 1096
+#define WT_STAT_CONN_CACHE_EVICTION_FORCE_FAIL_TIME 1097
/*! cache: hazard pointer blocked page eviction */
-#define WT_STAT_CONN_CACHE_EVICTION_HAZARD 1097
+#define WT_STAT_CONN_CACHE_EVICTION_HAZARD 1098
/*! cache: hazard pointer check calls */
-#define WT_STAT_CONN_CACHE_HAZARD_CHECKS 1098
+#define WT_STAT_CONN_CACHE_HAZARD_CHECKS 1099
/*! cache: hazard pointer check entries walked */
-#define WT_STAT_CONN_CACHE_HAZARD_WALKS 1099
+#define WT_STAT_CONN_CACHE_HAZARD_WALKS 1100
/*! cache: hazard pointer maximum array length */
-#define WT_STAT_CONN_CACHE_HAZARD_MAX 1100
+#define WT_STAT_CONN_CACHE_HAZARD_MAX 1101
/*! cache: history store key truncation calls that returned restart */
-#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_MIX_TS_RESTART 1101
+#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_MIX_TS_RESTART 1102
/*! cache: history store key truncation due to mixed timestamps */
-#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_MIX_TS 1102
+#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_MIX_TS 1103
/*!
* cache: history store key truncation due to the key being removed from
* the data page
*/
-#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_ONPAGE_REMOVAL 1103
+#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_ONPAGE_REMOVAL 1104
/*! cache: history store score */
-#define WT_STAT_CONN_CACHE_HS_SCORE 1104
+#define WT_STAT_CONN_CACHE_HS_SCORE 1105
/*! cache: history store table insert calls */
-#define WT_STAT_CONN_CACHE_HS_INSERT 1105
+#define WT_STAT_CONN_CACHE_HS_INSERT 1106
/*! cache: history store table insert calls that returned restart */
-#define WT_STAT_CONN_CACHE_HS_INSERT_RESTART 1106
+#define WT_STAT_CONN_CACHE_HS_INSERT_RESTART 1107
/*! cache: history store table max on-disk size */
-#define WT_STAT_CONN_CACHE_HS_ONDISK_MAX 1107
+#define WT_STAT_CONN_CACHE_HS_ONDISK_MAX 1108
/*! cache: history store table on-disk size */
-#define WT_STAT_CONN_CACHE_HS_ONDISK 1108
+#define WT_STAT_CONN_CACHE_HS_ONDISK 1109
/*! cache: history store table reads */
-#define WT_STAT_CONN_CACHE_HS_READ 1109
+#define WT_STAT_CONN_CACHE_HS_READ 1110
/*! cache: history store table reads missed */
-#define WT_STAT_CONN_CACHE_HS_READ_MISS 1110
+#define WT_STAT_CONN_CACHE_HS_READ_MISS 1111
/*! cache: history store table reads requiring squashed modifies */
-#define WT_STAT_CONN_CACHE_HS_READ_SQUASH 1111
+#define WT_STAT_CONN_CACHE_HS_READ_SQUASH 1112
/*! cache: history store table remove calls due to key truncation */
-#define WT_STAT_CONN_CACHE_HS_REMOVE_KEY_TRUNCATE 1112
+#define WT_STAT_CONN_CACHE_HS_REMOVE_KEY_TRUNCATE 1113
/*! cache: history store table writes requiring squashed modifies */
-#define WT_STAT_CONN_CACHE_HS_WRITE_SQUASH 1113
+#define WT_STAT_CONN_CACHE_HS_WRITE_SQUASH 1114
/*! cache: in-memory page passed criteria to be split */
-#define WT_STAT_CONN_CACHE_INMEM_SPLITTABLE 1114
+#define WT_STAT_CONN_CACHE_INMEM_SPLITTABLE 1115
/*! cache: in-memory page splits */
-#define WT_STAT_CONN_CACHE_INMEM_SPLIT 1115
+#define WT_STAT_CONN_CACHE_INMEM_SPLIT 1116
/*! cache: internal pages evicted */
-#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL 1116
+#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL 1117
/*! cache: internal pages queued for eviction */
-#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_QUEUED 1117
+#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_QUEUED 1118
/*! cache: internal pages seen by eviction walk */
-#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_SEEN 1118
+#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_SEEN 1119
/*! cache: internal pages seen by eviction walk that are already queued */
-#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_ALREADY_QUEUED 1119
+#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_ALREADY_QUEUED 1120
/*! cache: internal pages split during eviction */
-#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_INTERNAL 1120
+#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_INTERNAL 1121
/*! cache: leaf pages split during eviction */
-#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_LEAF 1121
+#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_LEAF 1122
/*! cache: maximum bytes configured */
-#define WT_STAT_CONN_CACHE_BYTES_MAX 1122
+#define WT_STAT_CONN_CACHE_BYTES_MAX 1123
/*! cache: maximum page size at eviction */
-#define WT_STAT_CONN_CACHE_EVICTION_MAXIMUM_PAGE_SIZE 1123
+#define WT_STAT_CONN_CACHE_EVICTION_MAXIMUM_PAGE_SIZE 1124
/*! cache: modified pages evicted */
-#define WT_STAT_CONN_CACHE_EVICTION_DIRTY 1124
+#define WT_STAT_CONN_CACHE_EVICTION_DIRTY 1125
/*! cache: modified pages evicted by application threads */
-#define WT_STAT_CONN_CACHE_EVICTION_APP_DIRTY 1125
+#define WT_STAT_CONN_CACHE_EVICTION_APP_DIRTY 1126
/*! cache: operations timed out waiting for space in cache */
-#define WT_STAT_CONN_CACHE_TIMED_OUT_OPS 1126
+#define WT_STAT_CONN_CACHE_TIMED_OUT_OPS 1127
/*! cache: overflow pages read into cache */
-#define WT_STAT_CONN_CACHE_READ_OVERFLOW 1127
+#define WT_STAT_CONN_CACHE_READ_OVERFLOW 1128
/*! cache: page split during eviction deepened the tree */
-#define WT_STAT_CONN_CACHE_EVICTION_DEEPEN 1128
+#define WT_STAT_CONN_CACHE_EVICTION_DEEPEN 1129
/*! cache: page written requiring history store records */
-#define WT_STAT_CONN_CACHE_WRITE_HS 1129
+#define WT_STAT_CONN_CACHE_WRITE_HS 1130
/*! cache: pages currently held in the cache */
-#define WT_STAT_CONN_CACHE_PAGES_INUSE 1130
+#define WT_STAT_CONN_CACHE_PAGES_INUSE 1131
/*! cache: pages evicted by application threads */
-#define WT_STAT_CONN_CACHE_EVICTION_APP 1131
+#define WT_STAT_CONN_CACHE_EVICTION_APP 1132
/*! cache: pages queued for eviction */
-#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED 1132
+#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED 1133
/*! cache: pages queued for eviction post lru sorting */
-#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_POST_LRU 1133
+#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_POST_LRU 1134
/*! cache: pages queued for urgent eviction */
-#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_URGENT 1134
+#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_URGENT 1135
/*! cache: pages queued for urgent eviction during walk */
-#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_OLDEST 1135
+#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_OLDEST 1136
/*! cache: pages read into cache */
-#define WT_STAT_CONN_CACHE_READ 1136
+#define WT_STAT_CONN_CACHE_READ 1137
/*! cache: pages read into cache after truncate */
-#define WT_STAT_CONN_CACHE_READ_DELETED 1137
+#define WT_STAT_CONN_CACHE_READ_DELETED 1138
/*! cache: pages read into cache after truncate in prepare state */
-#define WT_STAT_CONN_CACHE_READ_DELETED_PREPARED 1138
+#define WT_STAT_CONN_CACHE_READ_DELETED_PREPARED 1139
/*! cache: pages requested from the cache */
-#define WT_STAT_CONN_CACHE_PAGES_REQUESTED 1139
+#define WT_STAT_CONN_CACHE_PAGES_REQUESTED 1140
/*! cache: pages seen by eviction walk */
-#define WT_STAT_CONN_CACHE_EVICTION_PAGES_SEEN 1140
+#define WT_STAT_CONN_CACHE_EVICTION_PAGES_SEEN 1141
/*! cache: pages seen by eviction walk that are already queued */
-#define WT_STAT_CONN_CACHE_EVICTION_PAGES_ALREADY_QUEUED 1141
+#define WT_STAT_CONN_CACHE_EVICTION_PAGES_ALREADY_QUEUED 1142
/*! cache: pages selected for eviction unable to be evicted */
-#define WT_STAT_CONN_CACHE_EVICTION_FAIL 1142
+#define WT_STAT_CONN_CACHE_EVICTION_FAIL 1143
/*!
* cache: pages selected for eviction unable to be evicted as the parent
* page has overflow items
*/
-#define WT_STAT_CONN_CACHE_EVICTION_FAIL_PARENT_HAS_OVERFLOW_ITEMS 1143
+#define WT_STAT_CONN_CACHE_EVICTION_FAIL_PARENT_HAS_OVERFLOW_ITEMS 1144
/*!
* cache: pages selected for eviction unable to be evicted because of
* active children on an internal page
*/
-#define WT_STAT_CONN_CACHE_EVICTION_FAIL_ACTIVE_CHILDREN_ON_AN_INTERNAL_PAGE 1144
+#define WT_STAT_CONN_CACHE_EVICTION_FAIL_ACTIVE_CHILDREN_ON_AN_INTERNAL_PAGE 1145
/*!
* cache: pages selected for eviction unable to be evicted because of
* failure in reconciliation
*/
-#define WT_STAT_CONN_CACHE_EVICTION_FAIL_IN_RECONCILIATION 1145
+#define WT_STAT_CONN_CACHE_EVICTION_FAIL_IN_RECONCILIATION 1146
/*! cache: pages walked for eviction */
-#define WT_STAT_CONN_CACHE_EVICTION_WALK 1146
+#define WT_STAT_CONN_CACHE_EVICTION_WALK 1147
/*! cache: pages written from cache */
-#define WT_STAT_CONN_CACHE_WRITE 1147
+#define WT_STAT_CONN_CACHE_WRITE 1148
/*! cache: pages written requiring in-memory restoration */
-#define WT_STAT_CONN_CACHE_WRITE_RESTORE 1148
+#define WT_STAT_CONN_CACHE_WRITE_RESTORE 1149
/*! cache: percentage overhead */
-#define WT_STAT_CONN_CACHE_OVERHEAD 1149
+#define WT_STAT_CONN_CACHE_OVERHEAD 1150
/*! cache: tracked bytes belonging to internal pages in the cache */
-#define WT_STAT_CONN_CACHE_BYTES_INTERNAL 1150
+#define WT_STAT_CONN_CACHE_BYTES_INTERNAL 1151
/*! cache: tracked bytes belonging to leaf pages in the cache */
-#define WT_STAT_CONN_CACHE_BYTES_LEAF 1151
+#define WT_STAT_CONN_CACHE_BYTES_LEAF 1152
/*! cache: tracked dirty bytes in the cache */
-#define WT_STAT_CONN_CACHE_BYTES_DIRTY 1152
+#define WT_STAT_CONN_CACHE_BYTES_DIRTY 1153
/*! cache: tracked dirty pages in the cache */
-#define WT_STAT_CONN_CACHE_PAGES_DIRTY 1153
+#define WT_STAT_CONN_CACHE_PAGES_DIRTY 1154
/*! cache: unmodified pages evicted */
-#define WT_STAT_CONN_CACHE_EVICTION_CLEAN 1154
+#define WT_STAT_CONN_CACHE_EVICTION_CLEAN 1155
/*! capacity: background fsync file handles considered */
-#define WT_STAT_CONN_FSYNC_ALL_FH_TOTAL 1155
+#define WT_STAT_CONN_FSYNC_ALL_FH_TOTAL 1156
/*! capacity: background fsync file handles synced */
-#define WT_STAT_CONN_FSYNC_ALL_FH 1156
+#define WT_STAT_CONN_FSYNC_ALL_FH 1157
/*! capacity: background fsync time (msecs) */
-#define WT_STAT_CONN_FSYNC_ALL_TIME 1157
+#define WT_STAT_CONN_FSYNC_ALL_TIME 1158
/*! capacity: bytes read */
-#define WT_STAT_CONN_CAPACITY_BYTES_READ 1158
+#define WT_STAT_CONN_CAPACITY_BYTES_READ 1159
/*! capacity: bytes written for checkpoint */
-#define WT_STAT_CONN_CAPACITY_BYTES_CKPT 1159
+#define WT_STAT_CONN_CAPACITY_BYTES_CKPT 1160
/*! capacity: bytes written for eviction */
-#define WT_STAT_CONN_CAPACITY_BYTES_EVICT 1160
+#define WT_STAT_CONN_CAPACITY_BYTES_EVICT 1161
/*! capacity: bytes written for log */
-#define WT_STAT_CONN_CAPACITY_BYTES_LOG 1161
+#define WT_STAT_CONN_CAPACITY_BYTES_LOG 1162
/*! capacity: bytes written total */
-#define WT_STAT_CONN_CAPACITY_BYTES_WRITTEN 1162
+#define WT_STAT_CONN_CAPACITY_BYTES_WRITTEN 1163
/*! capacity: threshold to call fsync */
-#define WT_STAT_CONN_CAPACITY_THRESHOLD 1163
+#define WT_STAT_CONN_CAPACITY_THRESHOLD 1164
/*! capacity: time waiting due to total capacity (usecs) */
-#define WT_STAT_CONN_CAPACITY_TIME_TOTAL 1164
+#define WT_STAT_CONN_CAPACITY_TIME_TOTAL 1165
/*! capacity: time waiting during checkpoint (usecs) */
-#define WT_STAT_CONN_CAPACITY_TIME_CKPT 1165
+#define WT_STAT_CONN_CAPACITY_TIME_CKPT 1166
/*! capacity: time waiting during eviction (usecs) */
-#define WT_STAT_CONN_CAPACITY_TIME_EVICT 1166
+#define WT_STAT_CONN_CAPACITY_TIME_EVICT 1167
/*! capacity: time waiting during logging (usecs) */
-#define WT_STAT_CONN_CAPACITY_TIME_LOG 1167
+#define WT_STAT_CONN_CAPACITY_TIME_LOG 1168
/*! capacity: time waiting during read (usecs) */
-#define WT_STAT_CONN_CAPACITY_TIME_READ 1168
+#define WT_STAT_CONN_CAPACITY_TIME_READ 1169
/*! connection: auto adjusting condition resets */
-#define WT_STAT_CONN_COND_AUTO_WAIT_RESET 1169
+#define WT_STAT_CONN_COND_AUTO_WAIT_RESET 1170
/*! connection: auto adjusting condition wait calls */
-#define WT_STAT_CONN_COND_AUTO_WAIT 1170
+#define WT_STAT_CONN_COND_AUTO_WAIT 1171
/*! connection: detected system time went backwards */
-#define WT_STAT_CONN_TIME_TRAVEL 1171
+#define WT_STAT_CONN_TIME_TRAVEL 1172
/*! connection: files currently open */
-#define WT_STAT_CONN_FILE_OPEN 1172
+#define WT_STAT_CONN_FILE_OPEN 1173
/*! connection: memory allocations */
-#define WT_STAT_CONN_MEMORY_ALLOCATION 1173
+#define WT_STAT_CONN_MEMORY_ALLOCATION 1174
/*! connection: memory frees */
-#define WT_STAT_CONN_MEMORY_FREE 1174
+#define WT_STAT_CONN_MEMORY_FREE 1175
/*! connection: memory re-allocations */
-#define WT_STAT_CONN_MEMORY_GROW 1175
+#define WT_STAT_CONN_MEMORY_GROW 1176
/*! connection: pthread mutex condition wait calls */
-#define WT_STAT_CONN_COND_WAIT 1176
+#define WT_STAT_CONN_COND_WAIT 1177
/*! connection: pthread mutex shared lock read-lock calls */
-#define WT_STAT_CONN_RWLOCK_READ 1177
+#define WT_STAT_CONN_RWLOCK_READ 1178
/*! connection: pthread mutex shared lock write-lock calls */
-#define WT_STAT_CONN_RWLOCK_WRITE 1178
+#define WT_STAT_CONN_RWLOCK_WRITE 1179
/*! connection: total fsync I/Os */
-#define WT_STAT_CONN_FSYNC_IO 1179
+#define WT_STAT_CONN_FSYNC_IO 1180
/*! connection: total read I/Os */
-#define WT_STAT_CONN_READ_IO 1180
+#define WT_STAT_CONN_READ_IO 1181
/*! connection: total write I/Os */
-#define WT_STAT_CONN_WRITE_IO 1181
+#define WT_STAT_CONN_WRITE_IO 1182
/*! cursor: Total number of entries skipped by cursor next calls */
-#define WT_STAT_CONN_CURSOR_NEXT_SKIP_TOTAL 1182
+#define WT_STAT_CONN_CURSOR_NEXT_SKIP_TOTAL 1183
/*! cursor: Total number of entries skipped by cursor prev calls */
-#define WT_STAT_CONN_CURSOR_PREV_SKIP_TOTAL 1183
+#define WT_STAT_CONN_CURSOR_PREV_SKIP_TOTAL 1184
/*! cursor: cached cursor count */
-#define WT_STAT_CONN_CURSOR_CACHED_COUNT 1184
+#define WT_STAT_CONN_CURSOR_CACHED_COUNT 1185
/*! cursor: cursor bulk loaded cursor insert calls */
-#define WT_STAT_CONN_CURSOR_INSERT_BULK 1185
+#define WT_STAT_CONN_CURSOR_INSERT_BULK 1186
/*! cursor: cursor close calls that result in cache */
-#define WT_STAT_CONN_CURSOR_CACHE 1186
+#define WT_STAT_CONN_CURSOR_CACHE 1187
/*! cursor: cursor create calls */
-#define WT_STAT_CONN_CURSOR_CREATE 1187
+#define WT_STAT_CONN_CURSOR_CREATE 1188
/*! cursor: cursor insert calls */
-#define WT_STAT_CONN_CURSOR_INSERT 1188
+#define WT_STAT_CONN_CURSOR_INSERT 1189
/*! cursor: cursor insert key and value bytes */
-#define WT_STAT_CONN_CURSOR_INSERT_BYTES 1189
+#define WT_STAT_CONN_CURSOR_INSERT_BYTES 1190
/*! cursor: cursor modify calls */
-#define WT_STAT_CONN_CURSOR_MODIFY 1190
+#define WT_STAT_CONN_CURSOR_MODIFY 1191
/*! cursor: cursor modify key and value bytes affected */
-#define WT_STAT_CONN_CURSOR_MODIFY_BYTES 1191
+#define WT_STAT_CONN_CURSOR_MODIFY_BYTES 1192
/*! cursor: cursor modify value bytes modified */
-#define WT_STAT_CONN_CURSOR_MODIFY_BYTES_TOUCH 1192
+#define WT_STAT_CONN_CURSOR_MODIFY_BYTES_TOUCH 1193
/*! cursor: cursor next calls */
-#define WT_STAT_CONN_CURSOR_NEXT 1193
+#define WT_STAT_CONN_CURSOR_NEXT 1194
/*!
* cursor: cursor next calls that skip greater than or equal to 100
* entries
*/
-#define WT_STAT_CONN_CURSOR_NEXT_SKIP_GE_100 1194
+#define WT_STAT_CONN_CURSOR_NEXT_SKIP_GE_100 1195
/*! cursor: cursor next calls that skip less than 100 entries */
-#define WT_STAT_CONN_CURSOR_NEXT_SKIP_LT_100 1195
+#define WT_STAT_CONN_CURSOR_NEXT_SKIP_LT_100 1196
/*! cursor: cursor operation restarted */
-#define WT_STAT_CONN_CURSOR_RESTART 1196
+#define WT_STAT_CONN_CURSOR_RESTART 1197
/*! cursor: cursor prev calls */
-#define WT_STAT_CONN_CURSOR_PREV 1197
+#define WT_STAT_CONN_CURSOR_PREV 1198
/*!
* cursor: cursor prev calls that skip greater than or equal to 100
* entries
*/
-#define WT_STAT_CONN_CURSOR_PREV_SKIP_GE_100 1198
+#define WT_STAT_CONN_CURSOR_PREV_SKIP_GE_100 1199
/*! cursor: cursor prev calls that skip less than 100 entries */
-#define WT_STAT_CONN_CURSOR_PREV_SKIP_LT_100 1199
+#define WT_STAT_CONN_CURSOR_PREV_SKIP_LT_100 1200
/*! cursor: cursor remove calls */
-#define WT_STAT_CONN_CURSOR_REMOVE 1200
+#define WT_STAT_CONN_CURSOR_REMOVE 1201
/*! cursor: cursor remove key bytes removed */
-#define WT_STAT_CONN_CURSOR_REMOVE_BYTES 1201
+#define WT_STAT_CONN_CURSOR_REMOVE_BYTES 1202
/*! cursor: cursor reserve calls */
-#define WT_STAT_CONN_CURSOR_RESERVE 1202
+#define WT_STAT_CONN_CURSOR_RESERVE 1203
/*! cursor: cursor reset calls */
-#define WT_STAT_CONN_CURSOR_RESET 1203
+#define WT_STAT_CONN_CURSOR_RESET 1204
/*! cursor: cursor search calls */
-#define WT_STAT_CONN_CURSOR_SEARCH 1204
+#define WT_STAT_CONN_CURSOR_SEARCH 1205
/*! cursor: cursor search near calls */
-#define WT_STAT_CONN_CURSOR_SEARCH_NEAR 1205
+#define WT_STAT_CONN_CURSOR_SEARCH_NEAR 1206
/*! cursor: cursor sweep buckets */
-#define WT_STAT_CONN_CURSOR_SWEEP_BUCKETS 1206
+#define WT_STAT_CONN_CURSOR_SWEEP_BUCKETS 1207
/*! cursor: cursor sweep cursors closed */
-#define WT_STAT_CONN_CURSOR_SWEEP_CLOSED 1207
+#define WT_STAT_CONN_CURSOR_SWEEP_CLOSED 1208
/*! cursor: cursor sweep cursors examined */
-#define WT_STAT_CONN_CURSOR_SWEEP_EXAMINED 1208
+#define WT_STAT_CONN_CURSOR_SWEEP_EXAMINED 1209
/*! cursor: cursor sweeps */
-#define WT_STAT_CONN_CURSOR_SWEEP 1209
+#define WT_STAT_CONN_CURSOR_SWEEP 1210
/*! cursor: cursor truncate calls */
-#define WT_STAT_CONN_CURSOR_TRUNCATE 1210
+#define WT_STAT_CONN_CURSOR_TRUNCATE 1211
/*! cursor: cursor update calls */
-#define WT_STAT_CONN_CURSOR_UPDATE 1211
+#define WT_STAT_CONN_CURSOR_UPDATE 1212
/*! cursor: cursor update key and value bytes */
-#define WT_STAT_CONN_CURSOR_UPDATE_BYTES 1212
+#define WT_STAT_CONN_CURSOR_UPDATE_BYTES 1213
/*! cursor: cursor update value size change */
-#define WT_STAT_CONN_CURSOR_UPDATE_BYTES_CHANGED 1213
+#define WT_STAT_CONN_CURSOR_UPDATE_BYTES_CHANGED 1214
/*! cursor: cursors reused from cache */
-#define WT_STAT_CONN_CURSOR_REOPEN 1214
+#define WT_STAT_CONN_CURSOR_REOPEN 1215
/*! cursor: open cursor count */
-#define WT_STAT_CONN_CURSOR_OPEN_COUNT 1215
+#define WT_STAT_CONN_CURSOR_OPEN_COUNT 1216
/*! data-handle: connection data handle size */
-#define WT_STAT_CONN_DH_CONN_HANDLE_SIZE 1216
+#define WT_STAT_CONN_DH_CONN_HANDLE_SIZE 1217
/*! data-handle: connection data handles currently active */
-#define WT_STAT_CONN_DH_CONN_HANDLE_COUNT 1217
+#define WT_STAT_CONN_DH_CONN_HANDLE_COUNT 1218
/*! data-handle: connection sweep candidate became referenced */
-#define WT_STAT_CONN_DH_SWEEP_REF 1218
+#define WT_STAT_CONN_DH_SWEEP_REF 1219
/*! data-handle: connection sweep dhandles closed */
-#define WT_STAT_CONN_DH_SWEEP_CLOSE 1219
+#define WT_STAT_CONN_DH_SWEEP_CLOSE 1220
/*! data-handle: connection sweep dhandles removed from hash list */
-#define WT_STAT_CONN_DH_SWEEP_REMOVE 1220
+#define WT_STAT_CONN_DH_SWEEP_REMOVE 1221
/*! data-handle: connection sweep time-of-death sets */
-#define WT_STAT_CONN_DH_SWEEP_TOD 1221
+#define WT_STAT_CONN_DH_SWEEP_TOD 1222
/*! data-handle: connection sweeps */
-#define WT_STAT_CONN_DH_SWEEPS 1222
+#define WT_STAT_CONN_DH_SWEEPS 1223
/*! data-handle: session dhandles swept */
-#define WT_STAT_CONN_DH_SESSION_HANDLES 1223
+#define WT_STAT_CONN_DH_SESSION_HANDLES 1224
/*! data-handle: session sweep attempts */
-#define WT_STAT_CONN_DH_SESSION_SWEEPS 1224
+#define WT_STAT_CONN_DH_SESSION_SWEEPS 1225
/*! history: history pages added for eviction during garbage collection */
-#define WT_STAT_CONN_HS_GC_PAGES_EVICT 1225
+#define WT_STAT_CONN_HS_GC_PAGES_EVICT 1226
/*! history: history pages removed for garbage collection */
-#define WT_STAT_CONN_HS_GC_PAGES_REMOVED 1226
+#define WT_STAT_CONN_HS_GC_PAGES_REMOVED 1227
/*! history: history pages visited for garbage collection */
-#define WT_STAT_CONN_HS_GC_PAGES_VISITED 1227
+#define WT_STAT_CONN_HS_GC_PAGES_VISITED 1228
/*! lock: checkpoint lock acquisitions */
-#define WT_STAT_CONN_LOCK_CHECKPOINT_COUNT 1228
+#define WT_STAT_CONN_LOCK_CHECKPOINT_COUNT 1229
/*! lock: checkpoint lock application thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_APPLICATION 1229
+#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_APPLICATION 1230
/*! lock: checkpoint lock internal thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_INTERNAL 1230
+#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_INTERNAL 1231
/*! lock: dhandle lock application thread time waiting (usecs) */
-#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_APPLICATION 1231
+#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_APPLICATION 1232
/*! lock: dhandle lock internal thread time waiting (usecs) */
-#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_INTERNAL 1232
+#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_INTERNAL 1233
/*! lock: dhandle read lock acquisitions */
-#define WT_STAT_CONN_LOCK_DHANDLE_READ_COUNT 1233
+#define WT_STAT_CONN_LOCK_DHANDLE_READ_COUNT 1234
/*! lock: dhandle write lock acquisitions */
-#define WT_STAT_CONN_LOCK_DHANDLE_WRITE_COUNT 1234
+#define WT_STAT_CONN_LOCK_DHANDLE_WRITE_COUNT 1235
/*!
* lock: durable timestamp queue lock application thread time waiting
* (usecs)
*/
-#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_APPLICATION 1235
+#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_APPLICATION 1236
/*!
* lock: durable timestamp queue lock internal thread time waiting
* (usecs)
*/
-#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_INTERNAL 1236
+#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_INTERNAL 1237
/*! lock: durable timestamp queue read lock acquisitions */
-#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_READ_COUNT 1237
+#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_READ_COUNT 1238
/*! lock: durable timestamp queue write lock acquisitions */
-#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WRITE_COUNT 1238
+#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WRITE_COUNT 1239
/*! lock: metadata lock acquisitions */
-#define WT_STAT_CONN_LOCK_METADATA_COUNT 1239
+#define WT_STAT_CONN_LOCK_METADATA_COUNT 1240
/*! lock: metadata lock application thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_METADATA_WAIT_APPLICATION 1240
+#define WT_STAT_CONN_LOCK_METADATA_WAIT_APPLICATION 1241
/*! lock: metadata lock internal thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_METADATA_WAIT_INTERNAL 1241
+#define WT_STAT_CONN_LOCK_METADATA_WAIT_INTERNAL 1242
/*!
* lock: read timestamp queue lock application thread time waiting
* (usecs)
*/
-#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_APPLICATION 1242
+#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_APPLICATION 1243
/*! lock: read timestamp queue lock internal thread time waiting (usecs) */
-#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_INTERNAL 1243
+#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_INTERNAL 1244
/*! lock: read timestamp queue read lock acquisitions */
-#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_READ_COUNT 1244
+#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_READ_COUNT 1245
/*! lock: read timestamp queue write lock acquisitions */
-#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WRITE_COUNT 1245
+#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WRITE_COUNT 1246
/*! lock: schema lock acquisitions */
-#define WT_STAT_CONN_LOCK_SCHEMA_COUNT 1246
+#define WT_STAT_CONN_LOCK_SCHEMA_COUNT 1247
/*! lock: schema lock application thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_APPLICATION 1247
+#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_APPLICATION 1248
/*! lock: schema lock internal thread wait time (usecs) */
-#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_INTERNAL 1248
+#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_INTERNAL 1249
/*!
* lock: table lock application thread time waiting for the table lock
* (usecs)
*/
-#define WT_STAT_CONN_LOCK_TABLE_WAIT_APPLICATION 1249
+#define WT_STAT_CONN_LOCK_TABLE_WAIT_APPLICATION 1250
/*!
* lock: table lock internal thread time waiting for the table lock
* (usecs)
*/
-#define WT_STAT_CONN_LOCK_TABLE_WAIT_INTERNAL 1250
+#define WT_STAT_CONN_LOCK_TABLE_WAIT_INTERNAL 1251
/*! lock: table read lock acquisitions */
-#define WT_STAT_CONN_LOCK_TABLE_READ_COUNT 1251
+#define WT_STAT_CONN_LOCK_TABLE_READ_COUNT 1252
/*! lock: table write lock acquisitions */
-#define WT_STAT_CONN_LOCK_TABLE_WRITE_COUNT 1252
+#define WT_STAT_CONN_LOCK_TABLE_WRITE_COUNT 1253
/*! lock: txn global lock application thread time waiting (usecs) */
-#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_APPLICATION 1253
+#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_APPLICATION 1254
/*! lock: txn global lock internal thread time waiting (usecs) */
-#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_INTERNAL 1254
+#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_INTERNAL 1255
/*! lock: txn global read lock acquisitions */
-#define WT_STAT_CONN_LOCK_TXN_GLOBAL_READ_COUNT 1255
+#define WT_STAT_CONN_LOCK_TXN_GLOBAL_READ_COUNT 1256
/*! lock: txn global write lock acquisitions */
-#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WRITE_COUNT 1256
+#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WRITE_COUNT 1257
/*! log: busy returns attempting to switch slots */
-#define WT_STAT_CONN_LOG_SLOT_SWITCH_BUSY 1257
+#define WT_STAT_CONN_LOG_SLOT_SWITCH_BUSY 1258
/*! log: force archive time sleeping (usecs) */
-#define WT_STAT_CONN_LOG_FORCE_ARCHIVE_SLEEP 1258
+#define WT_STAT_CONN_LOG_FORCE_ARCHIVE_SLEEP 1259
/*! log: log bytes of payload data */
-#define WT_STAT_CONN_LOG_BYTES_PAYLOAD 1259
+#define WT_STAT_CONN_LOG_BYTES_PAYLOAD 1260
/*! log: log bytes written */
-#define WT_STAT_CONN_LOG_BYTES_WRITTEN 1260
+#define WT_STAT_CONN_LOG_BYTES_WRITTEN 1261
/*! log: log files manually zero-filled */
-#define WT_STAT_CONN_LOG_ZERO_FILLS 1261
+#define WT_STAT_CONN_LOG_ZERO_FILLS 1262
/*! log: log flush operations */
-#define WT_STAT_CONN_LOG_FLUSH 1262
+#define WT_STAT_CONN_LOG_FLUSH 1263
/*! log: log force write operations */
-#define WT_STAT_CONN_LOG_FORCE_WRITE 1263
+#define WT_STAT_CONN_LOG_FORCE_WRITE 1264
/*! log: log force write operations skipped */
-#define WT_STAT_CONN_LOG_FORCE_WRITE_SKIP 1264
+#define WT_STAT_CONN_LOG_FORCE_WRITE_SKIP 1265
/*! log: log records compressed */
-#define WT_STAT_CONN_LOG_COMPRESS_WRITES 1265
+#define WT_STAT_CONN_LOG_COMPRESS_WRITES 1266
/*! log: log records not compressed */
-#define WT_STAT_CONN_LOG_COMPRESS_WRITE_FAILS 1266
+#define WT_STAT_CONN_LOG_COMPRESS_WRITE_FAILS 1267
/*! log: log records too small to compress */
-#define WT_STAT_CONN_LOG_COMPRESS_SMALL 1267
+#define WT_STAT_CONN_LOG_COMPRESS_SMALL 1268
/*! log: log release advances write LSN */
-#define WT_STAT_CONN_LOG_RELEASE_WRITE_LSN 1268
+#define WT_STAT_CONN_LOG_RELEASE_WRITE_LSN 1269
/*! log: log scan operations */
-#define WT_STAT_CONN_LOG_SCANS 1269
+#define WT_STAT_CONN_LOG_SCANS 1270
/*! log: log scan records requiring two reads */
-#define WT_STAT_CONN_LOG_SCAN_REREADS 1270
+#define WT_STAT_CONN_LOG_SCAN_REREADS 1271
/*! log: log server thread advances write LSN */
-#define WT_STAT_CONN_LOG_WRITE_LSN 1271
+#define WT_STAT_CONN_LOG_WRITE_LSN 1272
/*! log: log server thread write LSN walk skipped */
-#define WT_STAT_CONN_LOG_WRITE_LSN_SKIP 1272
+#define WT_STAT_CONN_LOG_WRITE_LSN_SKIP 1273
/*! log: log sync operations */
-#define WT_STAT_CONN_LOG_SYNC 1273
+#define WT_STAT_CONN_LOG_SYNC 1274
/*! log: log sync time duration (usecs) */
-#define WT_STAT_CONN_LOG_SYNC_DURATION 1274
+#define WT_STAT_CONN_LOG_SYNC_DURATION 1275
/*! log: log sync_dir operations */
-#define WT_STAT_CONN_LOG_SYNC_DIR 1275
+#define WT_STAT_CONN_LOG_SYNC_DIR 1276
/*! log: log sync_dir time duration (usecs) */
-#define WT_STAT_CONN_LOG_SYNC_DIR_DURATION 1276
+#define WT_STAT_CONN_LOG_SYNC_DIR_DURATION 1277
/*! log: log write operations */
-#define WT_STAT_CONN_LOG_WRITES 1277
+#define WT_STAT_CONN_LOG_WRITES 1278
/*! log: logging bytes consolidated */
-#define WT_STAT_CONN_LOG_SLOT_CONSOLIDATED 1278
+#define WT_STAT_CONN_LOG_SLOT_CONSOLIDATED 1279
/*! log: maximum log file size */
-#define WT_STAT_CONN_LOG_MAX_FILESIZE 1279
+#define WT_STAT_CONN_LOG_MAX_FILESIZE 1280
/*! log: number of pre-allocated log files to create */
-#define WT_STAT_CONN_LOG_PREALLOC_MAX 1280
+#define WT_STAT_CONN_LOG_PREALLOC_MAX 1281
/*! log: pre-allocated log files not ready and missed */
-#define WT_STAT_CONN_LOG_PREALLOC_MISSED 1281
+#define WT_STAT_CONN_LOG_PREALLOC_MISSED 1282
/*! log: pre-allocated log files prepared */
-#define WT_STAT_CONN_LOG_PREALLOC_FILES 1282
+#define WT_STAT_CONN_LOG_PREALLOC_FILES 1283
/*! log: pre-allocated log files used */
-#define WT_STAT_CONN_LOG_PREALLOC_USED 1283
+#define WT_STAT_CONN_LOG_PREALLOC_USED 1284
/*! log: records processed by log scan */
-#define WT_STAT_CONN_LOG_SCAN_RECORDS 1284
+#define WT_STAT_CONN_LOG_SCAN_RECORDS 1285
/*! log: slot close lost race */
-#define WT_STAT_CONN_LOG_SLOT_CLOSE_RACE 1285
+#define WT_STAT_CONN_LOG_SLOT_CLOSE_RACE 1286
/*! log: slot close unbuffered waits */
-#define WT_STAT_CONN_LOG_SLOT_CLOSE_UNBUF 1286
+#define WT_STAT_CONN_LOG_SLOT_CLOSE_UNBUF 1287
/*! log: slot closures */
-#define WT_STAT_CONN_LOG_SLOT_CLOSES 1287
+#define WT_STAT_CONN_LOG_SLOT_CLOSES 1288
/*! log: slot join atomic update races */
-#define WT_STAT_CONN_LOG_SLOT_RACES 1288
+#define WT_STAT_CONN_LOG_SLOT_RACES 1289
/*! log: slot join calls atomic updates raced */
-#define WT_STAT_CONN_LOG_SLOT_YIELD_RACE 1289
+#define WT_STAT_CONN_LOG_SLOT_YIELD_RACE 1290
/*! log: slot join calls did not yield */
-#define WT_STAT_CONN_LOG_SLOT_IMMEDIATE 1290
+#define WT_STAT_CONN_LOG_SLOT_IMMEDIATE 1291
/*! log: slot join calls found active slot closed */
-#define WT_STAT_CONN_LOG_SLOT_YIELD_CLOSE 1291
+#define WT_STAT_CONN_LOG_SLOT_YIELD_CLOSE 1292
/*! log: slot join calls slept */
-#define WT_STAT_CONN_LOG_SLOT_YIELD_SLEEP 1292
+#define WT_STAT_CONN_LOG_SLOT_YIELD_SLEEP 1293
/*! log: slot join calls yielded */
-#define WT_STAT_CONN_LOG_SLOT_YIELD 1293
+#define WT_STAT_CONN_LOG_SLOT_YIELD 1294
/*! log: slot join found active slot closed */
-#define WT_STAT_CONN_LOG_SLOT_ACTIVE_CLOSED 1294
+#define WT_STAT_CONN_LOG_SLOT_ACTIVE_CLOSED 1295
/*! log: slot joins yield time (usecs) */
-#define WT_STAT_CONN_LOG_SLOT_YIELD_DURATION 1295
+#define WT_STAT_CONN_LOG_SLOT_YIELD_DURATION 1296
/*! log: slot transitions unable to find free slot */
-#define WT_STAT_CONN_LOG_SLOT_NO_FREE_SLOTS 1296
+#define WT_STAT_CONN_LOG_SLOT_NO_FREE_SLOTS 1297
/*! log: slot unbuffered writes */
-#define WT_STAT_CONN_LOG_SLOT_UNBUFFERED 1297
+#define WT_STAT_CONN_LOG_SLOT_UNBUFFERED 1298
/*! log: total in-memory size of compressed records */
-#define WT_STAT_CONN_LOG_COMPRESS_MEM 1298
+#define WT_STAT_CONN_LOG_COMPRESS_MEM 1299
/*! log: total log buffer size */
-#define WT_STAT_CONN_LOG_BUFFER_SIZE 1299
+#define WT_STAT_CONN_LOG_BUFFER_SIZE 1300
/*! log: total size of compressed records */
-#define WT_STAT_CONN_LOG_COMPRESS_LEN 1300
+#define WT_STAT_CONN_LOG_COMPRESS_LEN 1301
/*! log: written slots coalesced */
-#define WT_STAT_CONN_LOG_SLOT_COALESCED 1301
+#define WT_STAT_CONN_LOG_SLOT_COALESCED 1302
/*! log: yields waiting for previous log file close */
-#define WT_STAT_CONN_LOG_CLOSE_YIELDS 1302
+#define WT_STAT_CONN_LOG_CLOSE_YIELDS 1303
/*! perf: file system read latency histogram (bucket 1) - 10-49ms */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT50 1303
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT50 1304
/*! perf: file system read latency histogram (bucket 2) - 50-99ms */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT100 1304
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT100 1305
/*! perf: file system read latency histogram (bucket 3) - 100-249ms */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT250 1305
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT250 1306
/*! perf: file system read latency histogram (bucket 4) - 250-499ms */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT500 1306
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT500 1307
/*! perf: file system read latency histogram (bucket 5) - 500-999ms */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT1000 1307
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT1000 1308
/*! perf: file system read latency histogram (bucket 6) - 1000ms+ */
-#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_GT1000 1308
+#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_GT1000 1309
/*! perf: file system write latency histogram (bucket 1) - 10-49ms */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT50 1309
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT50 1310
/*! perf: file system write latency histogram (bucket 2) - 50-99ms */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT100 1310
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT100 1311
/*! perf: file system write latency histogram (bucket 3) - 100-249ms */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT250 1311
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT250 1312
/*! perf: file system write latency histogram (bucket 4) - 250-499ms */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT500 1312
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT500 1313
/*! perf: file system write latency histogram (bucket 5) - 500-999ms */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT1000 1313
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT1000 1314
/*! perf: file system write latency histogram (bucket 6) - 1000ms+ */
-#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_GT1000 1314
+#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_GT1000 1315
/*! perf: operation read latency histogram (bucket 1) - 100-249us */
-#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT250 1315
+#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT250 1316
/*! perf: operation read latency histogram (bucket 2) - 250-499us */
-#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT500 1316
+#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT500 1317
/*! perf: operation read latency histogram (bucket 3) - 500-999us */
-#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT1000 1317
+#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT1000 1318
/*! perf: operation read latency histogram (bucket 4) - 1000-9999us */
-#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT10000 1318
+#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT10000 1319
/*! perf: operation read latency histogram (bucket 5) - 10000us+ */
-#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_GT10000 1319
+#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_GT10000 1320
/*! perf: operation write latency histogram (bucket 1) - 100-249us */
-#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT250 1320
+#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT250 1321
/*! perf: operation write latency histogram (bucket 2) - 250-499us */
-#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT500 1321
+#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT500 1322
/*! perf: operation write latency histogram (bucket 3) - 500-999us */
-#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT1000 1322
+#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT1000 1323
/*! perf: operation write latency histogram (bucket 4) - 1000-9999us */
-#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT10000 1323
+#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT10000 1324
/*! perf: operation write latency histogram (bucket 5) - 10000us+ */
-#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_GT10000 1324
+#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_GT10000 1325
/*! reconciliation: approximate byte size of timestamps in pages written */
-#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TS 1325
+#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TS 1326
/*!
* reconciliation: approximate byte size of transaction IDs in pages
* written
*/
-#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TXN 1326
+#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TXN 1327
/*! reconciliation: fast-path pages deleted */
-#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1327
+#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1328
/*! reconciliation: maximum seconds spent in a reconciliation call */
-#define WT_STAT_CONN_REC_MAXIMUM_SECONDS 1328
+#define WT_STAT_CONN_REC_MAXIMUM_SECONDS 1329
/*! reconciliation: page reconciliation calls */
-#define WT_STAT_CONN_REC_PAGES 1329
+#define WT_STAT_CONN_REC_PAGES 1330
/*! reconciliation: page reconciliation calls for eviction */
-#define WT_STAT_CONN_REC_PAGES_EVICTION 1330
+#define WT_STAT_CONN_REC_PAGES_EVICTION 1331
/*!
* reconciliation: page reconciliation calls that resulted in values with
* prepared transaction metadata
*/
-#define WT_STAT_CONN_REC_PAGES_WITH_PREPARE 1331
+#define WT_STAT_CONN_REC_PAGES_WITH_PREPARE 1332
/*!
* reconciliation: page reconciliation calls that resulted in values with
* timestamps
*/
-#define WT_STAT_CONN_REC_PAGES_WITH_TS 1332
+#define WT_STAT_CONN_REC_PAGES_WITH_TS 1333
/*!
* reconciliation: page reconciliation calls that resulted in values with
* transaction ids
*/
-#define WT_STAT_CONN_REC_PAGES_WITH_TXN 1333
+#define WT_STAT_CONN_REC_PAGES_WITH_TXN 1334
/*! reconciliation: pages deleted */
-#define WT_STAT_CONN_REC_PAGE_DELETE 1334
+#define WT_STAT_CONN_REC_PAGE_DELETE 1335
/*!
* reconciliation: pages written including an aggregated newest start
* durable timestamp
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 1335
+#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 1336
/*!
* reconciliation: pages written including an aggregated newest stop
* durable timestamp
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 1336
+#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 1337
/*!
* reconciliation: pages written including an aggregated newest stop
* timestamp
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TS 1337
+#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TS 1338
/*!
* reconciliation: pages written including an aggregated newest stop
* transaction ID
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TXN 1338
+#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TXN 1339
/*!
* reconciliation: pages written including an aggregated oldest start
* timestamp
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TS 1339
+#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TS 1340
/*!
* reconciliation: pages written including an aggregated oldest start
* transaction ID
*/
-#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TXN 1340
+#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TXN 1341
/*! reconciliation: pages written including an aggregated prepare */
-#define WT_STAT_CONN_REC_TIME_AGGR_PREPARED 1341
+#define WT_STAT_CONN_REC_TIME_AGGR_PREPARED 1342
/*! reconciliation: pages written including at least one prepare state */
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_PREPARED 1342
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_PREPARED 1343
/*!
* reconciliation: pages written including at least one start durable
* timestamp
*/
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 1343
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 1344
/*! reconciliation: pages written including at least one start timestamp */
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TS 1344
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TS 1345
/*!
* reconciliation: pages written including at least one start transaction
* ID
*/
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TXN 1345
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TXN 1346
/*!
* reconciliation: pages written including at least one stop durable
* timestamp
*/
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 1346
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 1347
/*! reconciliation: pages written including at least one stop timestamp */
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TS 1347
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TS 1348
/*!
* reconciliation: pages written including at least one stop transaction
* ID
*/
-#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TXN 1348
+#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TXN 1349
/*! reconciliation: records written including a prepare state */
-#define WT_STAT_CONN_REC_TIME_WINDOW_PREPARED 1349
+#define WT_STAT_CONN_REC_TIME_WINDOW_PREPARED 1350
/*! reconciliation: records written including a start durable timestamp */
-#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_START_TS 1350
+#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_START_TS 1351
/*! reconciliation: records written including a start timestamp */
-#define WT_STAT_CONN_REC_TIME_WINDOW_START_TS 1351
+#define WT_STAT_CONN_REC_TIME_WINDOW_START_TS 1352
/*! reconciliation: records written including a start transaction ID */
-#define WT_STAT_CONN_REC_TIME_WINDOW_START_TXN 1352
+#define WT_STAT_CONN_REC_TIME_WINDOW_START_TXN 1353
/*! reconciliation: records written including a stop durable timestamp */
-#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_STOP_TS 1353
+#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_STOP_TS 1354
/*! reconciliation: records written including a stop timestamp */
-#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TS 1354
+#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TS 1355
/*! reconciliation: records written including a stop transaction ID */
-#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TXN 1355
+#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TXN 1356
/*! reconciliation: split bytes currently awaiting free */
-#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1356
+#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1357
/*! reconciliation: split objects currently awaiting free */
-#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1357
+#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1358
/*! session: open session count */
-#define WT_STAT_CONN_SESSION_OPEN 1358
+#define WT_STAT_CONN_SESSION_OPEN 1359
/*! session: session query timestamp calls */
-#define WT_STAT_CONN_SESSION_QUERY_TS 1359
+#define WT_STAT_CONN_SESSION_QUERY_TS 1360
/*! session: table alter failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1360
+#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1361
/*! session: table alter successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1361
+#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1362
/*! session: table alter unchanged and skipped */
-#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1362
+#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1363
/*! session: table compact failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1363
+#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1364
/*! session: table compact successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1364
+#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1365
/*! session: table create failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1365
+#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1366
/*! session: table create successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1366
+#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1367
/*! session: table drop failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1367
+#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1368
/*! session: table drop successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1368
+#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1369
/*! session: table import failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_IMPORT_FAIL 1369
+#define WT_STAT_CONN_SESSION_TABLE_IMPORT_FAIL 1370
/*! session: table import successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_IMPORT_SUCCESS 1370
+#define WT_STAT_CONN_SESSION_TABLE_IMPORT_SUCCESS 1371
/*! session: table rebalance failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_FAIL 1371
+#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_FAIL 1372
/*! session: table rebalance successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_SUCCESS 1372
+#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_SUCCESS 1373
/*! session: table rename failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1373
+#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1374
/*! session: table rename successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1374
+#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1375
/*! session: table salvage failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1375
+#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1376
/*! session: table salvage successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1376
+#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1377
/*! session: table truncate failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1377
+#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1378
/*! session: table truncate successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1378
+#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1379
/*! session: table verify failed calls */
-#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1379
+#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1380
/*! session: table verify successful calls */
-#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1380
+#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1381
/*! thread-state: active filesystem fsync calls */
-#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1381
+#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1382
/*! thread-state: active filesystem read calls */
-#define WT_STAT_CONN_THREAD_READ_ACTIVE 1382
+#define WT_STAT_CONN_THREAD_READ_ACTIVE 1383
/*! thread-state: active filesystem write calls */
-#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1383
+#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1384
/*! thread-yield: application thread time evicting (usecs) */
-#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1384
+#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1385
/*! thread-yield: application thread time waiting for cache (usecs) */
-#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1385
+#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1386
/*!
* thread-yield: connection close blocked waiting for transaction state
* stabilization
*/
-#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1386
+#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1387
/*! thread-yield: connection close yielded for lsm manager shutdown */
-#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1387
+#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1388
/*! thread-yield: data handle lock yielded */
-#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1388
+#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1389
/*!
* thread-yield: get reference for page index and slot time sleeping
* (usecs)
*/
-#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1389
+#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1390
/*! thread-yield: log server sync yielded for log write */
-#define WT_STAT_CONN_LOG_SERVER_SYNC_BLOCKED 1390
+#define WT_STAT_CONN_LOG_SERVER_SYNC_BLOCKED 1391
/*! thread-yield: page access yielded due to prepare state change */
-#define WT_STAT_CONN_PREPARED_TRANSITION_BLOCKED_PAGE 1391
+#define WT_STAT_CONN_PREPARED_TRANSITION_BLOCKED_PAGE 1392
/*! thread-yield: page acquire busy blocked */
-#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1392
+#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1393
/*! thread-yield: page acquire eviction blocked */
-#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1393
+#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1394
/*! thread-yield: page acquire locked blocked */
-#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1394
+#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1395
/*! thread-yield: page acquire read blocked */
-#define WT_STAT_CONN_PAGE_READ_BLOCKED 1395
+#define WT_STAT_CONN_PAGE_READ_BLOCKED 1396
/*! thread-yield: page acquire time sleeping (usecs) */
-#define WT_STAT_CONN_PAGE_SLEEP 1396
+#define WT_STAT_CONN_PAGE_SLEEP 1397
/*!
* thread-yield: page delete rollback time sleeping for state change
* (usecs)
*/
-#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1397
+#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1398
/*! thread-yield: page reconciliation yielded due to child modification */
-#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1398
+#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1399
/*! transaction: Number of prepared updates */
-#define WT_STAT_CONN_TXN_PREPARED_UPDATES_COUNT 1399
+#define WT_STAT_CONN_TXN_PREPARED_UPDATES_COUNT 1400
/*! transaction: durable timestamp queue entries walked */
-#define WT_STAT_CONN_TXN_DURABLE_QUEUE_WALKED 1400
+#define WT_STAT_CONN_TXN_DURABLE_QUEUE_WALKED 1401
/*! transaction: durable timestamp queue insert to empty */
-#define WT_STAT_CONN_TXN_DURABLE_QUEUE_EMPTY 1401
+#define WT_STAT_CONN_TXN_DURABLE_QUEUE_EMPTY 1402
/*! transaction: durable timestamp queue inserts to head */
-#define WT_STAT_CONN_TXN_DURABLE_QUEUE_HEAD 1402
+#define WT_STAT_CONN_TXN_DURABLE_QUEUE_HEAD 1403
/*! transaction: durable timestamp queue inserts total */
-#define WT_STAT_CONN_TXN_DURABLE_QUEUE_INSERTS 1403
+#define WT_STAT_CONN_TXN_DURABLE_QUEUE_INSERTS 1404
/*! transaction: durable timestamp queue length */
-#define WT_STAT_CONN_TXN_DURABLE_QUEUE_LEN 1404
+#define WT_STAT_CONN_TXN_DURABLE_QUEUE_LEN 1405
/*! transaction: prepared transactions */
-#define WT_STAT_CONN_TXN_PREPARE 1405
+#define WT_STAT_CONN_TXN_PREPARE 1406
/*! transaction: prepared transactions committed */
-#define WT_STAT_CONN_TXN_PREPARE_COMMIT 1406
+#define WT_STAT_CONN_TXN_PREPARE_COMMIT 1407
/*! transaction: prepared transactions currently active */
-#define WT_STAT_CONN_TXN_PREPARE_ACTIVE 1407
+#define WT_STAT_CONN_TXN_PREPARE_ACTIVE 1408
/*! transaction: prepared transactions rolled back */
-#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK 1408
+#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK 1409
/*! transaction: query timestamp calls */
-#define WT_STAT_CONN_TXN_QUERY_TS 1409
+#define WT_STAT_CONN_TXN_QUERY_TS 1410
/*! transaction: read timestamp queue entries walked */
-#define WT_STAT_CONN_TXN_READ_QUEUE_WALKED 1410
+#define WT_STAT_CONN_TXN_READ_QUEUE_WALKED 1411
/*! transaction: read timestamp queue insert to empty */
-#define WT_STAT_CONN_TXN_READ_QUEUE_EMPTY 1411
+#define WT_STAT_CONN_TXN_READ_QUEUE_EMPTY 1412
/*! transaction: read timestamp queue inserts to head */
-#define WT_STAT_CONN_TXN_READ_QUEUE_HEAD 1412
+#define WT_STAT_CONN_TXN_READ_QUEUE_HEAD 1413
/*! transaction: read timestamp queue inserts total */
-#define WT_STAT_CONN_TXN_READ_QUEUE_INSERTS 1413
+#define WT_STAT_CONN_TXN_READ_QUEUE_INSERTS 1414
/*! transaction: read timestamp queue length */
-#define WT_STAT_CONN_TXN_READ_QUEUE_LEN 1414
+#define WT_STAT_CONN_TXN_READ_QUEUE_LEN 1415
/*! transaction: rollback to stable calls */
-#define WT_STAT_CONN_TXN_RTS 1415
+#define WT_STAT_CONN_TXN_RTS 1416
/*! transaction: rollback to stable keys removed */
-#define WT_STAT_CONN_TXN_RTS_KEYS_REMOVED 1416
+#define WT_STAT_CONN_TXN_RTS_KEYS_REMOVED 1417
/*! transaction: rollback to stable keys restored */
-#define WT_STAT_CONN_TXN_RTS_KEYS_RESTORED 1417
+#define WT_STAT_CONN_TXN_RTS_KEYS_RESTORED 1418
/*! transaction: rollback to stable pages visited */
-#define WT_STAT_CONN_TXN_RTS_PAGES_VISITED 1418
+#define WT_STAT_CONN_TXN_RTS_PAGES_VISITED 1419
/*! transaction: rollback to stable skipping internal pages tree walk */
-#define WT_STAT_CONN_TXN_RTS_SKIP_INTERAL_PAGES_WALK 1419
+#define WT_STAT_CONN_TXN_RTS_SKIP_INTERAL_PAGES_WALK 1420
/*! transaction: rollback to stable sweeping history store keys */
-#define WT_STAT_CONN_TXN_RTS_SWEEP_HS_KEYS 1420
+#define WT_STAT_CONN_TXN_RTS_SWEEP_HS_KEYS 1421
/*! transaction: rollback to stable updates aborted */
-#define WT_STAT_CONN_TXN_RTS_UPD_ABORTED 1421
+#define WT_STAT_CONN_TXN_RTS_UPD_ABORTED 1422
/*! transaction: rollback to stable updates removed from history store */
-#define WT_STAT_CONN_TXN_RTS_HS_REMOVED 1422
+#define WT_STAT_CONN_TXN_RTS_HS_REMOVED 1423
/*! transaction: set timestamp calls */
-#define WT_STAT_CONN_TXN_SET_TS 1423
+#define WT_STAT_CONN_TXN_SET_TS 1424
/*! transaction: set timestamp durable calls */
-#define WT_STAT_CONN_TXN_SET_TS_DURABLE 1424
+#define WT_STAT_CONN_TXN_SET_TS_DURABLE 1425
/*! transaction: set timestamp durable updates */
-#define WT_STAT_CONN_TXN_SET_TS_DURABLE_UPD 1425
+#define WT_STAT_CONN_TXN_SET_TS_DURABLE_UPD 1426
/*! transaction: set timestamp oldest calls */
-#define WT_STAT_CONN_TXN_SET_TS_OLDEST 1426
+#define WT_STAT_CONN_TXN_SET_TS_OLDEST 1427
/*! transaction: set timestamp oldest updates */
-#define WT_STAT_CONN_TXN_SET_TS_OLDEST_UPD 1427
+#define WT_STAT_CONN_TXN_SET_TS_OLDEST_UPD 1428
/*! transaction: set timestamp stable calls */
-#define WT_STAT_CONN_TXN_SET_TS_STABLE 1428
+#define WT_STAT_CONN_TXN_SET_TS_STABLE 1429
/*! transaction: set timestamp stable updates */
-#define WT_STAT_CONN_TXN_SET_TS_STABLE_UPD 1429
+#define WT_STAT_CONN_TXN_SET_TS_STABLE_UPD 1430
/*! transaction: transaction begins */
-#define WT_STAT_CONN_TXN_BEGIN 1430
+#define WT_STAT_CONN_TXN_BEGIN 1431
/*! transaction: transaction checkpoint currently running */
-#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1431
+#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1432
/*! transaction: transaction checkpoint generation */
-#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1432
+#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1433
/*!
* transaction: transaction checkpoint history store file duration
* (usecs)
*/
-#define WT_STAT_CONN_TXN_HS_CKPT_DURATION 1433
+#define WT_STAT_CONN_TXN_HS_CKPT_DURATION 1434
/*! transaction: transaction checkpoint max time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1434
+#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1435
/*! transaction: transaction checkpoint min time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1435
+#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1436
/*! transaction: transaction checkpoint most recent time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1436
+#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1437
/*! transaction: transaction checkpoint prepare currently running */
-#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RUNNING 1437
+#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RUNNING 1438
/*! transaction: transaction checkpoint prepare max time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MAX 1438
+#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MAX 1439
/*! transaction: transaction checkpoint prepare min time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MIN 1439
+#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MIN 1440
/*! transaction: transaction checkpoint prepare most recent time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RECENT 1440
+#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RECENT 1441
/*! transaction: transaction checkpoint prepare total time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_TOTAL 1441
+#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_TOTAL 1442
/*! transaction: transaction checkpoint scrub dirty target */
-#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1442
+#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1443
/*! transaction: transaction checkpoint scrub time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1443
+#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1444
/*! transaction: transaction checkpoint total time (msecs) */
-#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1444
+#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1445
/*! transaction: transaction checkpoints */
-#define WT_STAT_CONN_TXN_CHECKPOINT 1445
+#define WT_STAT_CONN_TXN_CHECKPOINT 1446
/*!
* transaction: transaction checkpoints skipped because database was
* clean
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1446
+#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1447
/*! transaction: transaction failures due to history store */
-#define WT_STAT_CONN_TXN_FAIL_CACHE 1447
+#define WT_STAT_CONN_TXN_FAIL_CACHE 1448
/*!
* transaction: transaction fsync calls for checkpoint after allocating
* the transaction ID
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1448
+#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1449
/*!
* transaction: transaction fsync duration for checkpoint after
* allocating the transaction ID (usecs)
*/
-#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1449
+#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1450
/*! transaction: transaction range of IDs currently pinned */
-#define WT_STAT_CONN_TXN_PINNED_RANGE 1450
+#define WT_STAT_CONN_TXN_PINNED_RANGE 1451
/*! transaction: transaction range of IDs currently pinned by a checkpoint */
-#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1451
+#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1452
/*! transaction: transaction range of timestamps currently pinned */
-#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP 1452
+#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP 1453
/*! transaction: transaction range of timestamps pinned by a checkpoint */
-#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_CHECKPOINT 1453
+#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_CHECKPOINT 1454
/*!
* transaction: transaction range of timestamps pinned by the oldest
* active read timestamp
*/
-#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_READER 1454
+#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_READER 1455
/*!
* transaction: transaction range of timestamps pinned by the oldest
* timestamp
*/
-#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST 1455
+#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST 1456
/*! transaction: transaction read timestamp of the oldest active reader */
-#define WT_STAT_CONN_TXN_TIMESTAMP_OLDEST_ACTIVE_READ 1456
+#define WT_STAT_CONN_TXN_TIMESTAMP_OLDEST_ACTIVE_READ 1457
/*! transaction: transaction sync calls */
-#define WT_STAT_CONN_TXN_SYNC 1457
+#define WT_STAT_CONN_TXN_SYNC 1458
/*! transaction: transactions committed */
-#define WT_STAT_CONN_TXN_COMMIT 1458
+#define WT_STAT_CONN_TXN_COMMIT 1459
/*! transaction: transactions rolled back */
-#define WT_STAT_CONN_TXN_ROLLBACK 1459
+#define WT_STAT_CONN_TXN_ROLLBACK 1460
/*! transaction: update conflicts */
-#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1460
+#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1461
/*!
* @}
diff --git a/src/third_party/wiredtiger/src/support/stat.c b/src/third_party/wiredtiger/src/support/stat.c
index 4c0b38d5192..f94d20c7875 100644
--- a/src/third_party/wiredtiger/src/support/stat.c
+++ b/src/third_party/wiredtiger/src/support/stat.c
@@ -780,7 +780,7 @@ static const char *const __stats_connection_desc[] = {
"cache: application threads page read from disk to cache time (usecs)",
"cache: application threads page write from cache to disk count",
"cache: application threads page write from cache to disk time (usecs)",
- "cache: bytes belonging to page images in the cache",
+ "cache: bytes allocated for updates", "cache: bytes belonging to page images in the cache",
"cache: bytes belonging to the history store table in the cache",
"cache: bytes currently in the cache", "cache: bytes dirty in the cache cumulative",
"cache: bytes not belonging to page images in the cache", "cache: bytes read into cache",
@@ -1170,6 +1170,7 @@ __wt_stat_connection_clear_single(WT_CONNECTION_STATS *stats)
stats->cache_read_app_time = 0;
stats->cache_write_app_count = 0;
stats->cache_write_app_time = 0;
+ /* not clearing cache_bytes_updates */
/* not clearing cache_bytes_image */
/* not clearing cache_bytes_hs */
/* not clearing cache_bytes_inuse */
@@ -1647,6 +1648,7 @@ __wt_stat_connection_aggregate(WT_CONNECTION_STATS **from, WT_CONNECTION_STATS *
to->cache_read_app_time += WT_STAT_READ(from, cache_read_app_time);
to->cache_write_app_count += WT_STAT_READ(from, cache_write_app_count);
to->cache_write_app_time += WT_STAT_READ(from, cache_write_app_time);
+ to->cache_bytes_updates += WT_STAT_READ(from, cache_bytes_updates);
to->cache_bytes_image += WT_STAT_READ(from, cache_bytes_image);
to->cache_bytes_hs += WT_STAT_READ(from, cache_bytes_hs);
to->cache_bytes_inuse += WT_STAT_READ(from, cache_bytes_inuse);
diff --git a/src/third_party/wiredtiger/src/txn/txn_ckpt.c b/src/third_party/wiredtiger/src/txn/txn_ckpt.c
index 50df011eb0b..d2399f5a649 100644
--- a/src/third_party/wiredtiger/src/txn/txn_ckpt.c
+++ b/src/third_party/wiredtiger/src/txn/txn_ckpt.c
@@ -392,13 +392,6 @@ __checkpoint_reduce_dirty_cache(WT_SESSION_IMPL *session)
break;
/*
- * Don't scrub when the history store table is in use: scrubbing is counter-productive in
- * that case.
- */
- if (F_ISSET(cache, WT_CACHE_EVICT_HS))
- break;
-
- /*
* We haven't reached the current target.
*
* Don't wait indefinitely: there might be dirty pages that can't be evicted. If we can't
diff --git a/src/third_party/wiredtiger/test/suite/test_txn19.py b/src/third_party/wiredtiger/test/suite/test_txn19.py
index 7ba1e60f68d..004e849671e 100755
--- a/src/third_party/wiredtiger/test/suite/test_txn19.py
+++ b/src/third_party/wiredtiger/test/suite/test_txn19.py
@@ -69,7 +69,7 @@ def copy_for_crash_restart(olddir, newdir):
class test_txn19(wttest.WiredTigerTestCase, suite_subprocess):
base_config = 'log=(archive=false,enabled,file_max=100K),' + \
- 'transaction_sync=(enabled,method=none)'
+ 'transaction_sync=(enabled,method=none),cache_size=1GB'
conn_config = base_config
corruption_type = [
('removal', dict(kind='removal', f=lambda fname:
@@ -354,7 +354,7 @@ class test_txn19(wttest.WiredTigerTestCase, suite_subprocess):
class test_txn19_meta(wttest.WiredTigerTestCase, suite_subprocess):
base_config = 'log=(archive=false,enabled,file_max=100K),' + \
- 'transaction_sync=(enabled,method=none)'
+ 'transaction_sync=(enabled,method=none),cache_size=1GB'
conn_config = base_config
# The type of corruption to be applied