From 5218ee3e883b0230e121ae13a7640e0bc4a313ae Mon Sep 17 00:00:00 2001 From: Luke Chen Date: Wed, 17 Jun 2020 17:00:41 +1000 Subject: Import wiredtiger: 5faf7b26eb9d311b8a7575a16c757078772eb02d from branch mongodb-4.4 ref: ab40833d91..5faf7b26eb for: 4.4.0-rc10 WT-6175 tcmalloc fragmentation is worse in 4.4 with durable history --- src/third_party/wiredtiger/dist/api_data.py | 19 +- src/third_party/wiredtiger/dist/stat_data.py | 1 + src/third_party/wiredtiger/import.data | 2 +- src/third_party/wiredtiger/src/btree/bt_discard.c | 2 +- src/third_party/wiredtiger/src/btree/bt_page.c | 3 +- src/third_party/wiredtiger/src/config/config_def.c | 35 +- src/third_party/wiredtiger/src/conn/conn_cache.c | 37 +- src/third_party/wiredtiger/src/evict/evict_lru.c | 131 ++-- src/third_party/wiredtiger/src/include/btmem.h | 1 + src/third_party/wiredtiger/src/include/btree.h | 4 +- src/third_party/wiredtiger/src/include/btree.i | 122 ++- src/third_party/wiredtiger/src/include/cache.h | 54 +- src/third_party/wiredtiger/src/include/cache.i | 80 +- src/third_party/wiredtiger/src/include/extern.h | 14 +- src/third_party/wiredtiger/src/include/misc.i | 10 + src/third_party/wiredtiger/src/include/stat.h | 1 + .../wiredtiger/src/include/wiredtiger.in | 864 +++++++++++---------- src/third_party/wiredtiger/src/support/stat.c | 4 +- src/third_party/wiredtiger/src/txn/txn_ckpt.c | 7 - .../wiredtiger/test/suite/test_txn19.py | 4 +- 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,27 +620,16 @@ __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. */ @@ -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 @@ -178,6 +178,22 @@ __wt_btree_dirty_leaf_inuse(WT_SESSION_IMPL *session) return (__wt_cache_bytes_plus_overhead(cache, btree->bytes_dirty_leaf)); } +/* + * __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); } /* @@ -326,6 +351,38 @@ __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. @@ -333,8 +390,10 @@ __wt_cache_page_byte_dirty_decr(WT_SESSION_IMPL *session, WT_PAGE *page, size_t 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)); } /* @@ -168,6 +168,16 @@ __wt_cache_dirty_leaf_inuse(WT_CACHE *cache) return (__wt_cache_bytes_plus_overhead(cache, cache->bytes_dirty_leaf)); } +/* + * __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. @@ -175,7 +185,8 @@ __wt_cache_dirty_leaf_inuse(WT_CACHE *cache) 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 @@ -29,6 +29,16 @@ __wt_hex(int c) return ((u_char) "0123456789abcdef"[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{     @@ -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 @@ -391,13 +391,6 @@ __checkpoint_reduce_dirty_cache(WT_SESSION_IMPL *session) if (current_dirty <= cache->eviction_checkpoint_target || current_dirty >= prev_dirty) 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. * 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 -- cgit v1.2.1