diff options
-rw-r--r-- | dist/api_data.py | 2 | ||||
-rw-r--r-- | dist/stat_data.py | 4 | ||||
-rw-r--r-- | src/config/config_def.c | 10 | ||||
-rw-r--r-- | src/evict/evict_lru.c | 112 | ||||
-rw-r--r-- | src/include/btree.h | 1 | ||||
-rw-r--r-- | src/include/cache.h | 1 | ||||
-rw-r--r-- | src/include/stat.h | 2 | ||||
-rw-r--r-- | src/include/wiredtiger.in | 350 | ||||
-rw-r--r-- | src/support/stat.c | 8 | ||||
-rw-r--r-- | tools/wtstats/stat_data.py | 2 |
10 files changed, 271 insertions, 221 deletions
diff --git a/dist/api_data.py b/dist/api_data.py index 44fc935d5d3..0f4506f608c 100644 --- a/dist/api_data.py +++ b/dist/api_data.py @@ -402,7 +402,7 @@ connection_runtime_config = [ vary depending on the current eviction load''', min=1, max=20), ]), - Config('eviction_checkpoint_target', '15', r''' + Config('eviction_checkpoint_target', '5', r''' perform eviction at the beginning of checkpoints to bring the dirty content in cache to this level, expressed as a percentage of the total cache size. Ignored if set to zero or \c in_memory is \c true''', diff --git a/dist/stat_data.py b/dist/stat_data.py index a050849ad76..5087afa44dc 100644 --- a/dist/stat_data.py +++ b/dist/stat_data.py @@ -185,6 +185,7 @@ connection_stats = [ CacheStat('cache_eviction_clean', 'unmodified pages evicted'), CacheStat('cache_eviction_deepen', 'page split during eviction deepened the tree'), CacheStat('cache_eviction_dirty', 'modified pages evicted'), + CacheStat('cache_eviction_empty_score', 'eviction empty score', 'no_clear,no_scale'), CacheStat('cache_eviction_fail', 'pages selected for eviction unable to be evicted'), CacheStat('cache_eviction_force', 'pages evicted because they exceeded the in-memory maximum'), CacheStat('cache_eviction_force_delete', 'pages evicted because they had chains of deleted items'), @@ -208,7 +209,8 @@ connection_stats = [ CacheStat('cache_eviction_split_leaf', 'leaf pages split during eviction'), CacheStat('cache_eviction_state', 'eviction state', 'no_clear,no_scale'), CacheStat('cache_eviction_walk', 'pages walked for eviction'), - CacheStat('cache_eviction_walks_active', 'files with active eviction walks', 'no_clear,no_scale,size'), + CacheStat('cache_eviction_walks_abandoned', 'eviction walks abandoned'), + CacheStat('cache_eviction_walks_active', 'files with active eviction walks', 'no_clear,no_scale'), CacheStat('cache_eviction_walks_started', 'files with new eviction walks started'), CacheStat('cache_eviction_worker_evicting', 'eviction worker thread evicting pages'), CacheStat('cache_hazard_checks', 'hazard pointer check calls'), diff --git a/src/config/config_def.c b/src/config/config_def.c index f231d7fc5d9..0ff2fd379d2 100644 --- a/src/config/config_def.c +++ b/src/config/config_def.c @@ -1005,7 +1005,7 @@ static const WT_CONFIG_ENTRY config_entries[] = { "async=(enabled=false,ops_max=1024,threads=2),cache_overhead=8," "cache_size=100MB,checkpoint=(log_size=0,wait=0),error_prefix=," "eviction=(threads_max=1,threads_min=1)," - "eviction_checkpoint_target=15,eviction_dirty_target=5," + "eviction_checkpoint_target=5,eviction_dirty_target=5," "eviction_dirty_trigger=20,eviction_target=80,eviction_trigger=95" ",file_manager=(close_handle_minimum=250,close_idle_time=30," "close_scan_interval=10),log=(archive=true,prealloc=true," @@ -1207,7 +1207,7 @@ static const WT_CONFIG_ENTRY config_entries[] = { "wait=0),checkpoint_sync=true,config_base=true,create=false," "direct_io=,encryption=(keyid=,name=,secretkey=),error_prefix=," "eviction=(threads_max=1,threads_min=1)," - "eviction_checkpoint_target=15,eviction_dirty_target=5," + "eviction_checkpoint_target=5,eviction_dirty_target=5," "eviction_dirty_trigger=20,eviction_target=80,eviction_trigger=95" ",exclusive=false,extensions=,file_extend=," "file_manager=(close_handle_minimum=250,close_idle_time=30," @@ -1230,7 +1230,7 @@ static const WT_CONFIG_ENTRY config_entries[] = { "wait=0),checkpoint_sync=true,config_base=true,create=false," "direct_io=,encryption=(keyid=,name=,secretkey=),error_prefix=," "eviction=(threads_max=1,threads_min=1)," - "eviction_checkpoint_target=15,eviction_dirty_target=5," + "eviction_checkpoint_target=5,eviction_dirty_target=5," "eviction_dirty_trigger=20,eviction_target=80,eviction_trigger=95" ",exclusive=false,extensions=,file_extend=," "file_manager=(close_handle_minimum=250,close_idle_time=30," @@ -1252,7 +1252,7 @@ static const WT_CONFIG_ENTRY config_entries[] = { ",cache_overhead=8,cache_size=100MB,checkpoint=(log_size=0," "wait=0),checkpoint_sync=true,direct_io=,encryption=(keyid=,name=" ",secretkey=),error_prefix=,eviction=(threads_max=1," - "threads_min=1),eviction_checkpoint_target=15," + "threads_min=1),eviction_checkpoint_target=5," "eviction_dirty_target=5,eviction_dirty_trigger=20," "eviction_target=80,eviction_trigger=95,extensions=,file_extend=," "file_manager=(close_handle_minimum=250,close_idle_time=30," @@ -1273,7 +1273,7 @@ static const WT_CONFIG_ENTRY config_entries[] = { ",cache_overhead=8,cache_size=100MB,checkpoint=(log_size=0," "wait=0),checkpoint_sync=true,direct_io=,encryption=(keyid=,name=" ",secretkey=),error_prefix=,eviction=(threads_max=1," - "threads_min=1),eviction_checkpoint_target=15," + "threads_min=1),eviction_checkpoint_target=5," "eviction_dirty_target=5,eviction_dirty_trigger=20," "eviction_target=80,eviction_trigger=95,extensions=,file_extend=," "file_manager=(close_handle_minimum=250,close_idle_time=30," diff --git a/src/evict/evict_lru.c b/src/evict/evict_lru.c index 69fff96fef5..c7bd3f0cb17 100644 --- a/src/evict/evict_lru.c +++ b/src/evict/evict_lru.c @@ -17,24 +17,24 @@ static int __evict_pass(WT_SESSION_IMPL *); static int __evict_server(WT_SESSION_IMPL *, bool *); static int __evict_walk(WT_SESSION_IMPL *, WT_EVICT_QUEUE *); static int __evict_walk_file( - WT_SESSION_IMPL *, WT_EVICT_QUEUE *, u_int, u_int *, bool *); + WT_SESSION_IMPL *, WT_EVICT_QUEUE *, u_int, u_int *); #define WT_EVICT_HAS_WORKERS(s) \ (S2C(s)->evict_threads.current_threads > 1) /* - * __evict_read_gen -- + * __evict_entry_priority -- * Get the adjusted read generation for an eviction entry. */ static inline uint64_t -__evict_read_gen(const WT_EVICT_ENTRY *entry) +__evict_entry_priority(WT_SESSION_IMPL *session, WT_REF *ref) { WT_BTREE *btree; WT_PAGE *page; uint64_t read_gen; - btree = entry->btree; - page = entry->ref->page; + btree = S2BT(session); + page = ref->page; /* Any page set to the oldest generation should be discarded. */ if (page->read_gen == WT_READGEN_OLDEST) @@ -60,7 +60,14 @@ __evict_read_gen(const WT_EVICT_ENTRY *entry) * The base read-generation is skewed by the eviction priority. * Internal pages are also adjusted, we prefer to evict leaf pages. */ - read_gen = page->read_gen + btree->evict_priority; + if (page->modify != NULL && + F_ISSET(S2C(session)->cache, WT_CACHE_EVICT_DIRTY) && + !F_ISSET(S2C(session)->cache, WT_CACHE_EVICT_CLEAN)) + read_gen = page->modify->update_txn; + else + read_gen = page->read_gen; + + read_gen += btree->evict_priority; if (WT_PAGE_IS_INTERNAL(page)) read_gen += WT_EVICT_INT_SKEW; @@ -327,8 +334,6 @@ __evict_server(WT_SESSION_IMPL *session, bool *did_work) __wt_spin_unlock(session, &conn->dhandle_lock); WT_RET(ret); - /* Next time we wake up, reverse the sweep direction. */ - cache->flags ^= WT_CACHE_WALK_REVERSE; cache->pages_evicted = 0; } else if (cache->pages_evicted != cache->pages_evict) { cache->pages_evicted = cache->pages_evict; @@ -641,7 +646,7 @@ __evict_pass(WT_SESSION_IMPL *session) * Clear a single walk point. */ static int -__evict_clear_walk(WT_SESSION_IMPL *session) +__evict_clear_walk(WT_SESSION_IMPL *session, bool count_stat) { WT_BTREE *btree; WT_CACHE *cache; @@ -658,6 +663,9 @@ __evict_clear_walk(WT_SESSION_IMPL *session) if ((ref = btree->evict_ref) == NULL) return (0); + if (count_stat) + WT_STAT_FAST_CONN_INCR(session, cache_eviction_walks_abandoned); + /* * Clear evict_ref first, in case releasing it forces eviction (we * assert we never try to evict the current eviction walk point). @@ -684,8 +692,8 @@ __evict_clear_all_walks(WT_SESSION_IMPL *session) TAILQ_FOREACH(dhandle, &conn->dhqh, q) if (WT_PREFIX_MATCH(dhandle->name, "file:")) - WT_WITH_DHANDLE(session, - dhandle, WT_TRET(__evict_clear_walk(session))); + WT_WITH_DHANDLE(session, dhandle, + WT_TRET(__evict_clear_walk(session, true))); return (ret); } @@ -730,7 +738,7 @@ __wt_evict_file_exclusive_on(WT_SESSION_IMPL *session) /* Clear any existing LRU eviction walk for the file. */ WT_WITH_PASS_LOCK(session, ret, - ret = __evict_clear_walk(session)); + ret = __evict_clear_walk(session, true)); (void)__wt_atomic_subv32(&cache->pass_intr, 1); WT_ERR(ret); @@ -843,8 +851,11 @@ __evict_lru_walk(WT_SESSION_IMPL *session) cache = S2C(session)->cache; /* Age out the score of how much the queue has been empty recently. */ - if (cache->evict_empty_score > 0) + if (cache->evict_empty_score > 0) { --cache->evict_empty_score; + WT_STAT_FAST_CONN_SET(session, cache_eviction_empty_score, + cache->evict_empty_score); + } /* Fill the next queue (that isn't the urgent queue). */ queue = cache->evict_fill_queue; @@ -894,10 +905,14 @@ __evict_lru_walk(WT_SESSION_IMPL *session) */ if (__evict_queue_empty(queue)) { if (F_ISSET(cache, - WT_CACHE_EVICT_CLEAN_HARD | WT_CACHE_EVICT_DIRTY_HARD)) + WT_CACHE_EVICT_CLEAN_HARD | WT_CACHE_EVICT_DIRTY_HARD)) { cache->evict_empty_score = WT_MIN( cache->evict_empty_score + WT_EVICT_SCORE_BUMP, WT_EVICT_SCORE_MAX); + WT_STAT_FAST_CONN_SET(session, + cache_eviction_empty_score, + cache->evict_empty_score); + } WT_STAT_FAST_CONN_INCR(session, cache_eviction_queue_empty); } else WT_STAT_FAST_CONN_INCR(session, cache_eviction_queue_not_empty); @@ -1014,8 +1029,8 @@ __evict_walk(WT_SESSION_IMPL *session, WT_EVICT_QUEUE *queue) WT_CONNECTION_IMPL *conn; WT_DATA_HANDLE *dhandle; WT_DECL_RET; - u_int max_entries, prev_slot, retries, slot, start_slot, spins; - bool dhandle_locked, incr, progress; + u_int max_entries, retries, slot, start_slot, spins; + bool dhandle_locked, incr; conn = S2C(session); cache = S2C(session)->cache; @@ -1121,8 +1136,6 @@ retry: while (slot < max_entries) { btree->evict_walk_skips++ < btree->evict_walk_period) continue; btree->evict_walk_skips = 0; - prev_slot = slot; - progress = false; (void)__wt_atomic_addi32(&dhandle->session_inuse, 1); incr = true; @@ -1145,22 +1158,12 @@ retry: while (slot < max_entries) { cache->evict_file_next = dhandle; WT_WITH_DHANDLE(session, dhandle, ret = __evict_walk_file(session, queue, - max_entries, &slot, &progress)); + max_entries, &slot)); WT_ASSERT(session, session->split_gen == 0); } __wt_spin_unlock(session, &cache->evict_walk_lock); WT_ERR(ret); } - - /* - * If we didn't find any candidates in the file, skip it next - * time. - */ - if (slot == prev_slot && !progress) - btree->evict_walk_period = WT_MIN( - WT_MAX(1, 2 * btree->evict_walk_period), 100); - else - btree->evict_walk_period = 0; } if (incr) { @@ -1229,7 +1232,7 @@ __evict_push_candidate(WT_SESSION_IMPL *session, evict->btree = S2BT(session); evict->ref = ref; - evict->score = __evict_read_gen(evict); + evict->score = __evict_entry_priority(session, ref); /* Adjust for size when doing dirty eviction. */ if (F_ISSET(S2C(session)->cache, WT_CACHE_EVICT_DIRTY) && @@ -1247,7 +1250,7 @@ __evict_push_candidate(WT_SESSION_IMPL *session, */ static int __evict_walk_file(WT_SESSION_IMPL *session, - WT_EVICT_QUEUE *queue, u_int max_entries, u_int *slotp, bool *progressp) + WT_EVICT_QUEUE *queue, u_int max_entries, u_int *slotp) { WT_BTREE *btree; WT_CACHE *cache; @@ -1259,17 +1262,18 @@ __evict_walk_file(WT_SESSION_IMPL *session, WT_REF *ref; WT_TXN_GLOBAL *txn_global; uint64_t btree_inuse, bytes_per_slot, cache_inuse; - uint64_t pages_seen, refs_walked; + uint64_t pages_seen, pages_queued, refs_walked; uint32_t remaining_slots, total_slots, walk_flags; uint32_t target_pages_clean, target_pages_dirty, target_pages; int internal_pages, restarts; - bool modified; + bool give_up, modified, urgent_queued; conn = S2C(session); btree = S2BT(session); cache = conn->cache; - internal_pages = restarts = 0; txn_global = &conn->txn_global; + internal_pages = restarts = 0; + give_up = urgent_queued = false; /* * Figure out how many slots to fill from this tree. @@ -1324,8 +1328,10 @@ __evict_walk_file(WT_SESSION_IMPL *session, walk_flags = WT_READ_CACHE | WT_READ_NO_EVICT | WT_READ_NO_GEN | WT_READ_NO_WAIT; - if (F_ISSET(cache, WT_CACHE_WALK_REVERSE)) - walk_flags |= WT_READ_PREV; + + /* Randomize the walk direction. */ + if (btree->evict_walk_reverse) + FLD_SET(walk_flags, WT_READ_PREV); /* * Get some more eviction candidate pages. @@ -1339,10 +1345,22 @@ __evict_walk_file(WT_SESSION_IMPL *session, * Once we hit the page limit, do one more step through the walk in * case we are appending and only the last page in the file is live. */ - for (evict = start, pages_seen = refs_walked = 0; + for (evict = start, pages_queued = pages_seen = refs_walked = 0; evict < end && (ret == 0 || ret == WT_NOTFOUND); ret = __wt_tree_walk_count( session, &btree->evict_ref, &refs_walked, walk_flags)) { + /* + * Check whether we're finding a good ration of candidates vs + * pages seen. Some workloads create "deserts" in trees where + * no good eviction candidates can be found. Abandon the walk + * if we get into that situation. + */ + give_up = pages_seen > 100 && + (pages_queued == 0 || (pages_seen / pages_queued) > + (10 * total_slots / target_pages)); + if (give_up) + break; + if ((ref = btree->evict_ref) == NULL) { if (++restarts == 2) break; @@ -1382,7 +1400,7 @@ __evict_walk_file(WT_SESSION_IMPL *session, WT_STAT_FAST_CONN_INCR( session, cache_eviction_pages_queued_oldest); if (__wt_page_evict_urgent(session, ref)) - *progressp = true; + urgent_queued = true; continue; } @@ -1426,6 +1444,7 @@ fast: /* If the page can't be evicted, give up. */ if (!__evict_push_candidate(session, queue, evict, ref)) continue; ++evict; + ++pages_queued; if (WT_PAGE_IS_INTERNAL(page)) ++internal_pages; @@ -1441,6 +1460,18 @@ fast: /* If the page can't be evicted, give up. */ session, cache_eviction_pages_queued, (u_int)(evict - start)); /* + * If we didn't find any candidates in the file, reverse the direction + * of the walk and skip it next time. + */ + if (give_up) + btree->evict_walk_reverse = !btree->evict_walk_reverse; + if (give_up && !urgent_queued) + btree->evict_walk_period = WT_MIN( + WT_MAX(1, 2 * btree->evict_walk_period), 100); + else if (pages_queued == target_pages) + btree->evict_walk_period = 0; + + /* * If we happen to end up on the root page, clear it. We have to track * hazard pointers, and the root page complicates that calculation. * @@ -1452,8 +1483,9 @@ fast: /* If the page can't be evicted, give up. */ * page: we want this page evicted as quickly as possible. */ if ((ref = btree->evict_ref) != NULL) { - if (__wt_ref_is_root(ref) || evict == start) - WT_RET(__evict_clear_walk(session)); + /* Give up the walk occasionally. */ + if (__wt_ref_is_root(ref) || evict == start || give_up) + WT_RET(__evict_clear_walk(session, restarts == 0)); else if (ref->page->read_gen == WT_READGEN_OLDEST) WT_RET_NOTFOUND_OK(__wt_tree_walk_count( session, &btree->evict_ref, diff --git a/src/include/btree.h b/src/include/btree.h index f1365c6c933..cfaf59e70e1 100644 --- a/src/include/btree.h +++ b/src/include/btree.h @@ -140,6 +140,7 @@ struct __wt_btree { u_int evict_walk_skips; /* Number of walks skipped */ u_int evict_disabled; /* Eviction disabled count */ volatile uint32_t evict_busy; /* Count of threads in eviction */ + bool evict_walk_reverse; /* Walk direction */ enum { WT_CKPT_OFF, WT_CKPT_PREPARE, WT_CKPT_RUNNING diff --git a/src/include/cache.h b/src/include/cache.h index 0cb61f01435..515135f26ab 100644 --- a/src/include/cache.h +++ b/src/include/cache.h @@ -181,7 +181,6 @@ struct __wt_cache { #define WT_CACHE_EVICT_MASK 0x0FF #define WT_CACHE_POOL_MANAGER 0x100 /* The active cache pool manager */ #define WT_CACHE_POOL_RUN 0x200 /* Cache pool thread running */ -#define WT_CACHE_WALK_REVERSE 0x400 /* Scan backwards for candidates */ uint32_t flags; }; diff --git a/src/include/stat.h b/src/include/stat.h index b61c568783b..e9c6d64a850 100644 --- a/src/include/stat.h +++ b/src/include/stat.h @@ -286,12 +286,14 @@ struct __wt_connection_stats { int64_t cache_eviction_get_ref_empty; int64_t cache_eviction_get_ref_empty2; int64_t cache_eviction_aggressive_set; + int64_t cache_eviction_empty_score; int64_t cache_eviction_queue_empty; int64_t cache_eviction_queue_not_empty; int64_t cache_eviction_server_evicting; int64_t cache_eviction_server_slept; int64_t cache_eviction_slow; int64_t cache_eviction_state; + int64_t cache_eviction_walks_abandoned; int64_t cache_eviction_worker_evicting; int64_t cache_eviction_force_fail; int64_t cache_eviction_walks_active; diff --git a/src/include/wiredtiger.in b/src/include/wiredtiger.in index 61a66bd4086..f4763a113f1 100644 --- a/src/include/wiredtiger.in +++ b/src/include/wiredtiger.in @@ -1812,7 +1812,7 @@ struct __wt_connection { * of checkpoints to bring the dirty content in cache to this level\, * expressed as a percentage of the total cache size. Ignored if set to * zero or \c in_memory is \c true., an integer between 0 and 99; - * default \c 15.} + * default \c 5.} * @config{eviction_dirty_target, perform eviction in worker threads * when the cache contains at least this much dirty content\, expressed * as a percentage of the total cache size. Ignored if \c in_memory is @@ -2278,7 +2278,7 @@ struct __wt_connection { * @config{eviction_checkpoint_target, perform eviction at the beginning of * checkpoints to bring the dirty content in cache to this level\, expressed as * a percentage of the total cache size. Ignored if set to zero or \c in_memory - * is \c true., an integer between 0 and 99; default \c 15.} + * is \c true., an integer between 0 and 99; default \c 5.} * @config{eviction_dirty_target, perform eviction in worker threads when the * cache contains at least this much dirty content\, expressed as a percentage * of the total cache size. Ignored if \c in_memory is \c true., an integer @@ -4294,360 +4294,364 @@ extern int wiredtiger_extension_terminate(WT_CONNECTION *connection); #define WT_STAT_CONN_CACHE_EVICTION_GET_REF_EMPTY2 1039 /*! cache: eviction currently operating in aggressive mode */ #define WT_STAT_CONN_CACHE_EVICTION_AGGRESSIVE_SET 1040 +/*! cache: eviction empty score */ +#define WT_STAT_CONN_CACHE_EVICTION_EMPTY_SCORE 1041 /*! cache: eviction server candidate queue empty when topping up */ -#define WT_STAT_CONN_CACHE_EVICTION_QUEUE_EMPTY 1041 +#define WT_STAT_CONN_CACHE_EVICTION_QUEUE_EMPTY 1042 /*! cache: eviction server candidate queue not empty when topping up */ -#define WT_STAT_CONN_CACHE_EVICTION_QUEUE_NOT_EMPTY 1042 +#define WT_STAT_CONN_CACHE_EVICTION_QUEUE_NOT_EMPTY 1043 /*! cache: eviction server evicting pages */ -#define WT_STAT_CONN_CACHE_EVICTION_SERVER_EVICTING 1043 +#define WT_STAT_CONN_CACHE_EVICTION_SERVER_EVICTING 1044 /*! * cache: eviction server slept, because we did not make progress with * eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_SERVER_SLEPT 1044 +#define WT_STAT_CONN_CACHE_EVICTION_SERVER_SLEPT 1045 /*! cache: eviction server unable to reach eviction goal */ -#define WT_STAT_CONN_CACHE_EVICTION_SLOW 1045 +#define WT_STAT_CONN_CACHE_EVICTION_SLOW 1046 /*! cache: eviction state */ -#define WT_STAT_CONN_CACHE_EVICTION_STATE 1046 +#define WT_STAT_CONN_CACHE_EVICTION_STATE 1047 +/*! cache: eviction walks abandoned */ +#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ABANDONED 1048 /*! cache: eviction worker thread evicting pages */ -#define WT_STAT_CONN_CACHE_EVICTION_WORKER_EVICTING 1047 +#define WT_STAT_CONN_CACHE_EVICTION_WORKER_EVICTING 1049 /*! cache: failed eviction of pages that exceeded the in-memory maximum */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_FAIL 1048 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_FAIL 1050 /*! cache: files with active eviction walks */ -#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ACTIVE 1049 +#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ACTIVE 1051 /*! cache: files with new eviction walks started */ -#define WT_STAT_CONN_CACHE_EVICTION_WALKS_STARTED 1050 +#define WT_STAT_CONN_CACHE_EVICTION_WALKS_STARTED 1052 /*! cache: hazard pointer blocked page eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_HAZARD 1051 +#define WT_STAT_CONN_CACHE_EVICTION_HAZARD 1053 /*! cache: hazard pointer check calls */ -#define WT_STAT_CONN_CACHE_HAZARD_CHECKS 1052 +#define WT_STAT_CONN_CACHE_HAZARD_CHECKS 1054 /*! cache: hazard pointer check entries walked */ -#define WT_STAT_CONN_CACHE_HAZARD_WALKS 1053 +#define WT_STAT_CONN_CACHE_HAZARD_WALKS 1055 /*! cache: hazard pointer maximum array length */ -#define WT_STAT_CONN_CACHE_HAZARD_MAX 1054 +#define WT_STAT_CONN_CACHE_HAZARD_MAX 1056 /*! cache: in-memory page passed criteria to be split */ -#define WT_STAT_CONN_CACHE_INMEM_SPLITTABLE 1055 +#define WT_STAT_CONN_CACHE_INMEM_SPLITTABLE 1057 /*! cache: in-memory page splits */ -#define WT_STAT_CONN_CACHE_INMEM_SPLIT 1056 +#define WT_STAT_CONN_CACHE_INMEM_SPLIT 1058 /*! cache: internal pages evicted */ -#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL 1057 +#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL 1059 /*! cache: internal pages split during eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_INTERNAL 1058 +#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_INTERNAL 1060 /*! cache: leaf pages split during eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_LEAF 1059 +#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_LEAF 1061 /*! cache: lookaside table insert calls */ -#define WT_STAT_CONN_CACHE_LOOKASIDE_INSERT 1060 +#define WT_STAT_CONN_CACHE_LOOKASIDE_INSERT 1062 /*! cache: lookaside table remove calls */ -#define WT_STAT_CONN_CACHE_LOOKASIDE_REMOVE 1061 +#define WT_STAT_CONN_CACHE_LOOKASIDE_REMOVE 1063 /*! cache: maximum bytes configured */ -#define WT_STAT_CONN_CACHE_BYTES_MAX 1062 +#define WT_STAT_CONN_CACHE_BYTES_MAX 1064 /*! cache: maximum page size at eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_MAXIMUM_PAGE_SIZE 1063 +#define WT_STAT_CONN_CACHE_EVICTION_MAXIMUM_PAGE_SIZE 1065 /*! cache: modified pages evicted */ -#define WT_STAT_CONN_CACHE_EVICTION_DIRTY 1064 +#define WT_STAT_CONN_CACHE_EVICTION_DIRTY 1066 /*! cache: modified pages evicted by application threads */ -#define WT_STAT_CONN_CACHE_EVICTION_APP_DIRTY 1065 +#define WT_STAT_CONN_CACHE_EVICTION_APP_DIRTY 1067 /*! cache: overflow pages read into cache */ -#define WT_STAT_CONN_CACHE_READ_OVERFLOW 1066 +#define WT_STAT_CONN_CACHE_READ_OVERFLOW 1068 /*! cache: overflow values cached in memory */ -#define WT_STAT_CONN_CACHE_OVERFLOW_VALUE 1067 +#define WT_STAT_CONN_CACHE_OVERFLOW_VALUE 1069 /*! cache: page split during eviction deepened the tree */ -#define WT_STAT_CONN_CACHE_EVICTION_DEEPEN 1068 +#define WT_STAT_CONN_CACHE_EVICTION_DEEPEN 1070 /*! cache: page written requiring lookaside records */ -#define WT_STAT_CONN_CACHE_WRITE_LOOKASIDE 1069 +#define WT_STAT_CONN_CACHE_WRITE_LOOKASIDE 1071 /*! cache: pages currently held in the cache */ -#define WT_STAT_CONN_CACHE_PAGES_INUSE 1070 +#define WT_STAT_CONN_CACHE_PAGES_INUSE 1072 /*! cache: pages evicted because they exceeded the in-memory maximum */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE 1071 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE 1073 /*! cache: pages evicted because they had chains of deleted items */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DELETE 1072 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DELETE 1074 /*! cache: pages evicted by application threads */ -#define WT_STAT_CONN_CACHE_EVICTION_APP 1073 +#define WT_STAT_CONN_CACHE_EVICTION_APP 1075 /*! cache: pages queued for eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED 1074 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED 1076 /*! cache: pages queued for urgent eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_URGENT 1075 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_URGENT 1077 /*! cache: pages queued for urgent eviction during walk */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_OLDEST 1076 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_OLDEST 1078 /*! cache: pages read into cache */ -#define WT_STAT_CONN_CACHE_READ 1077 +#define WT_STAT_CONN_CACHE_READ 1079 /*! cache: pages read into cache requiring lookaside entries */ -#define WT_STAT_CONN_CACHE_READ_LOOKASIDE 1078 +#define WT_STAT_CONN_CACHE_READ_LOOKASIDE 1080 /*! cache: pages requested from the cache */ -#define WT_STAT_CONN_CACHE_PAGES_REQUESTED 1079 +#define WT_STAT_CONN_CACHE_PAGES_REQUESTED 1081 /*! cache: pages seen by eviction walk */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_SEEN 1080 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_SEEN 1082 /*! cache: pages selected for eviction unable to be evicted */ -#define WT_STAT_CONN_CACHE_EVICTION_FAIL 1081 +#define WT_STAT_CONN_CACHE_EVICTION_FAIL 1083 /*! cache: pages walked for eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_WALK 1082 +#define WT_STAT_CONN_CACHE_EVICTION_WALK 1084 /*! cache: pages written from cache */ -#define WT_STAT_CONN_CACHE_WRITE 1083 +#define WT_STAT_CONN_CACHE_WRITE 1085 /*! cache: pages written requiring in-memory restoration */ -#define WT_STAT_CONN_CACHE_WRITE_RESTORE 1084 +#define WT_STAT_CONN_CACHE_WRITE_RESTORE 1086 /*! cache: percentage overhead */ -#define WT_STAT_CONN_CACHE_OVERHEAD 1085 +#define WT_STAT_CONN_CACHE_OVERHEAD 1087 /*! cache: tracked bytes belonging to internal pages in the cache */ -#define WT_STAT_CONN_CACHE_BYTES_INTERNAL 1086 +#define WT_STAT_CONN_CACHE_BYTES_INTERNAL 1088 /*! cache: tracked bytes belonging to leaf pages in the cache */ -#define WT_STAT_CONN_CACHE_BYTES_LEAF 1087 +#define WT_STAT_CONN_CACHE_BYTES_LEAF 1089 /*! cache: tracked dirty bytes in the cache */ -#define WT_STAT_CONN_CACHE_BYTES_DIRTY 1088 +#define WT_STAT_CONN_CACHE_BYTES_DIRTY 1090 /*! cache: tracked dirty pages in the cache */ -#define WT_STAT_CONN_CACHE_PAGES_DIRTY 1089 +#define WT_STAT_CONN_CACHE_PAGES_DIRTY 1091 /*! cache: unmodified pages evicted */ -#define WT_STAT_CONN_CACHE_EVICTION_CLEAN 1090 +#define WT_STAT_CONN_CACHE_EVICTION_CLEAN 1092 /*! connection: auto adjusting condition resets */ -#define WT_STAT_CONN_COND_AUTO_WAIT_RESET 1091 +#define WT_STAT_CONN_COND_AUTO_WAIT_RESET 1093 /*! connection: auto adjusting condition wait calls */ -#define WT_STAT_CONN_COND_AUTO_WAIT 1092 +#define WT_STAT_CONN_COND_AUTO_WAIT 1094 /*! connection: files currently open */ -#define WT_STAT_CONN_FILE_OPEN 1093 +#define WT_STAT_CONN_FILE_OPEN 1095 /*! connection: memory allocations */ -#define WT_STAT_CONN_MEMORY_ALLOCATION 1094 +#define WT_STAT_CONN_MEMORY_ALLOCATION 1096 /*! connection: memory frees */ -#define WT_STAT_CONN_MEMORY_FREE 1095 +#define WT_STAT_CONN_MEMORY_FREE 1097 /*! connection: memory re-allocations */ -#define WT_STAT_CONN_MEMORY_GROW 1096 +#define WT_STAT_CONN_MEMORY_GROW 1098 /*! connection: pthread mutex condition wait calls */ -#define WT_STAT_CONN_COND_WAIT 1097 +#define WT_STAT_CONN_COND_WAIT 1099 /*! connection: pthread mutex shared lock read-lock calls */ -#define WT_STAT_CONN_RWLOCK_READ 1098 +#define WT_STAT_CONN_RWLOCK_READ 1100 /*! connection: pthread mutex shared lock write-lock calls */ -#define WT_STAT_CONN_RWLOCK_WRITE 1099 +#define WT_STAT_CONN_RWLOCK_WRITE 1101 /*! connection: total fsync I/Os */ -#define WT_STAT_CONN_FSYNC_IO 1100 +#define WT_STAT_CONN_FSYNC_IO 1102 /*! connection: total read I/Os */ -#define WT_STAT_CONN_READ_IO 1101 +#define WT_STAT_CONN_READ_IO 1103 /*! connection: total write I/Os */ -#define WT_STAT_CONN_WRITE_IO 1102 +#define WT_STAT_CONN_WRITE_IO 1104 /*! cursor: cursor create calls */ -#define WT_STAT_CONN_CURSOR_CREATE 1103 +#define WT_STAT_CONN_CURSOR_CREATE 1105 /*! cursor: cursor insert calls */ -#define WT_STAT_CONN_CURSOR_INSERT 1104 +#define WT_STAT_CONN_CURSOR_INSERT 1106 /*! cursor: cursor next calls */ -#define WT_STAT_CONN_CURSOR_NEXT 1105 +#define WT_STAT_CONN_CURSOR_NEXT 1107 /*! cursor: cursor prev calls */ -#define WT_STAT_CONN_CURSOR_PREV 1106 +#define WT_STAT_CONN_CURSOR_PREV 1108 /*! cursor: cursor remove calls */ -#define WT_STAT_CONN_CURSOR_REMOVE 1107 +#define WT_STAT_CONN_CURSOR_REMOVE 1109 /*! cursor: cursor reset calls */ -#define WT_STAT_CONN_CURSOR_RESET 1108 +#define WT_STAT_CONN_CURSOR_RESET 1110 /*! cursor: cursor restarted searches */ -#define WT_STAT_CONN_CURSOR_RESTART 1109 +#define WT_STAT_CONN_CURSOR_RESTART 1111 /*! cursor: cursor search calls */ -#define WT_STAT_CONN_CURSOR_SEARCH 1110 +#define WT_STAT_CONN_CURSOR_SEARCH 1112 /*! cursor: cursor search near calls */ -#define WT_STAT_CONN_CURSOR_SEARCH_NEAR 1111 +#define WT_STAT_CONN_CURSOR_SEARCH_NEAR 1113 /*! cursor: cursor update calls */ -#define WT_STAT_CONN_CURSOR_UPDATE 1112 +#define WT_STAT_CONN_CURSOR_UPDATE 1114 /*! cursor: truncate calls */ -#define WT_STAT_CONN_CURSOR_TRUNCATE 1113 +#define WT_STAT_CONN_CURSOR_TRUNCATE 1115 /*! data-handle: connection data handles currently active */ -#define WT_STAT_CONN_DH_CONN_HANDLE_COUNT 1114 +#define WT_STAT_CONN_DH_CONN_HANDLE_COUNT 1116 /*! data-handle: connection sweep candidate became referenced */ -#define WT_STAT_CONN_DH_SWEEP_REF 1115 +#define WT_STAT_CONN_DH_SWEEP_REF 1117 /*! data-handle: connection sweep dhandles closed */ -#define WT_STAT_CONN_DH_SWEEP_CLOSE 1116 +#define WT_STAT_CONN_DH_SWEEP_CLOSE 1118 /*! data-handle: connection sweep dhandles removed from hash list */ -#define WT_STAT_CONN_DH_SWEEP_REMOVE 1117 +#define WT_STAT_CONN_DH_SWEEP_REMOVE 1119 /*! data-handle: connection sweep time-of-death sets */ -#define WT_STAT_CONN_DH_SWEEP_TOD 1118 +#define WT_STAT_CONN_DH_SWEEP_TOD 1120 /*! data-handle: connection sweeps */ -#define WT_STAT_CONN_DH_SWEEPS 1119 +#define WT_STAT_CONN_DH_SWEEPS 1121 /*! data-handle: session dhandles swept */ -#define WT_STAT_CONN_DH_SESSION_HANDLES 1120 +#define WT_STAT_CONN_DH_SESSION_HANDLES 1122 /*! data-handle: session sweep attempts */ -#define WT_STAT_CONN_DH_SESSION_SWEEPS 1121 +#define WT_STAT_CONN_DH_SESSION_SWEEPS 1123 /*! log: busy returns attempting to switch slots */ -#define WT_STAT_CONN_LOG_SLOT_SWITCH_BUSY 1122 +#define WT_STAT_CONN_LOG_SLOT_SWITCH_BUSY 1124 /*! log: consolidated slot closures */ -#define WT_STAT_CONN_LOG_SLOT_CLOSES 1123 +#define WT_STAT_CONN_LOG_SLOT_CLOSES 1125 /*! log: consolidated slot join races */ -#define WT_STAT_CONN_LOG_SLOT_RACES 1124 +#define WT_STAT_CONN_LOG_SLOT_RACES 1126 /*! log: consolidated slot join transitions */ -#define WT_STAT_CONN_LOG_SLOT_TRANSITIONS 1125 +#define WT_STAT_CONN_LOG_SLOT_TRANSITIONS 1127 /*! log: consolidated slot joins */ -#define WT_STAT_CONN_LOG_SLOT_JOINS 1126 +#define WT_STAT_CONN_LOG_SLOT_JOINS 1128 /*! log: consolidated slot unbuffered writes */ -#define WT_STAT_CONN_LOG_SLOT_UNBUFFERED 1127 +#define WT_STAT_CONN_LOG_SLOT_UNBUFFERED 1129 /*! log: log bytes of payload data */ -#define WT_STAT_CONN_LOG_BYTES_PAYLOAD 1128 +#define WT_STAT_CONN_LOG_BYTES_PAYLOAD 1130 /*! log: log bytes written */ -#define WT_STAT_CONN_LOG_BYTES_WRITTEN 1129 +#define WT_STAT_CONN_LOG_BYTES_WRITTEN 1131 /*! log: log files manually zero-filled */ -#define WT_STAT_CONN_LOG_ZERO_FILLS 1130 +#define WT_STAT_CONN_LOG_ZERO_FILLS 1132 /*! log: log flush operations */ -#define WT_STAT_CONN_LOG_FLUSH 1131 +#define WT_STAT_CONN_LOG_FLUSH 1133 /*! log: log force write operations */ -#define WT_STAT_CONN_LOG_FORCE_WRITE 1132 +#define WT_STAT_CONN_LOG_FORCE_WRITE 1134 /*! log: log force write operations skipped */ -#define WT_STAT_CONN_LOG_FORCE_WRITE_SKIP 1133 +#define WT_STAT_CONN_LOG_FORCE_WRITE_SKIP 1135 /*! log: log records compressed */ -#define WT_STAT_CONN_LOG_COMPRESS_WRITES 1134 +#define WT_STAT_CONN_LOG_COMPRESS_WRITES 1136 /*! log: log records not compressed */ -#define WT_STAT_CONN_LOG_COMPRESS_WRITE_FAILS 1135 +#define WT_STAT_CONN_LOG_COMPRESS_WRITE_FAILS 1137 /*! log: log records too small to compress */ -#define WT_STAT_CONN_LOG_COMPRESS_SMALL 1136 +#define WT_STAT_CONN_LOG_COMPRESS_SMALL 1138 /*! log: log release advances write LSN */ -#define WT_STAT_CONN_LOG_RELEASE_WRITE_LSN 1137 +#define WT_STAT_CONN_LOG_RELEASE_WRITE_LSN 1139 /*! log: log scan operations */ -#define WT_STAT_CONN_LOG_SCANS 1138 +#define WT_STAT_CONN_LOG_SCANS 1140 /*! log: log scan records requiring two reads */ -#define WT_STAT_CONN_LOG_SCAN_REREADS 1139 +#define WT_STAT_CONN_LOG_SCAN_REREADS 1141 /*! log: log server thread advances write LSN */ -#define WT_STAT_CONN_LOG_WRITE_LSN 1140 +#define WT_STAT_CONN_LOG_WRITE_LSN 1142 /*! log: log server thread write LSN walk skipped */ -#define WT_STAT_CONN_LOG_WRITE_LSN_SKIP 1141 +#define WT_STAT_CONN_LOG_WRITE_LSN_SKIP 1143 /*! log: log sync operations */ -#define WT_STAT_CONN_LOG_SYNC 1142 +#define WT_STAT_CONN_LOG_SYNC 1144 /*! log: log sync time duration (usecs) */ -#define WT_STAT_CONN_LOG_SYNC_DURATION 1143 +#define WT_STAT_CONN_LOG_SYNC_DURATION 1145 /*! log: log sync_dir operations */ -#define WT_STAT_CONN_LOG_SYNC_DIR 1144 +#define WT_STAT_CONN_LOG_SYNC_DIR 1146 /*! log: log sync_dir time duration (usecs) */ -#define WT_STAT_CONN_LOG_SYNC_DIR_DURATION 1145 +#define WT_STAT_CONN_LOG_SYNC_DIR_DURATION 1147 /*! log: log write operations */ -#define WT_STAT_CONN_LOG_WRITES 1146 +#define WT_STAT_CONN_LOG_WRITES 1148 /*! log: logging bytes consolidated */ -#define WT_STAT_CONN_LOG_SLOT_CONSOLIDATED 1147 +#define WT_STAT_CONN_LOG_SLOT_CONSOLIDATED 1149 /*! log: maximum log file size */ -#define WT_STAT_CONN_LOG_MAX_FILESIZE 1148 +#define WT_STAT_CONN_LOG_MAX_FILESIZE 1150 /*! log: number of pre-allocated log files to create */ -#define WT_STAT_CONN_LOG_PREALLOC_MAX 1149 +#define WT_STAT_CONN_LOG_PREALLOC_MAX 1151 /*! log: pre-allocated log files not ready and missed */ -#define WT_STAT_CONN_LOG_PREALLOC_MISSED 1150 +#define WT_STAT_CONN_LOG_PREALLOC_MISSED 1152 /*! log: pre-allocated log files prepared */ -#define WT_STAT_CONN_LOG_PREALLOC_FILES 1151 +#define WT_STAT_CONN_LOG_PREALLOC_FILES 1153 /*! log: pre-allocated log files used */ -#define WT_STAT_CONN_LOG_PREALLOC_USED 1152 +#define WT_STAT_CONN_LOG_PREALLOC_USED 1154 /*! log: records processed by log scan */ -#define WT_STAT_CONN_LOG_SCAN_RECORDS 1153 +#define WT_STAT_CONN_LOG_SCAN_RECORDS 1155 /*! log: total in-memory size of compressed records */ -#define WT_STAT_CONN_LOG_COMPRESS_MEM 1154 +#define WT_STAT_CONN_LOG_COMPRESS_MEM 1156 /*! log: total log buffer size */ -#define WT_STAT_CONN_LOG_BUFFER_SIZE 1155 +#define WT_STAT_CONN_LOG_BUFFER_SIZE 1157 /*! log: total size of compressed records */ -#define WT_STAT_CONN_LOG_COMPRESS_LEN 1156 +#define WT_STAT_CONN_LOG_COMPRESS_LEN 1158 /*! log: written slots coalesced */ -#define WT_STAT_CONN_LOG_SLOT_COALESCED 1157 +#define WT_STAT_CONN_LOG_SLOT_COALESCED 1159 /*! log: yields waiting for previous log file close */ -#define WT_STAT_CONN_LOG_CLOSE_YIELDS 1158 +#define WT_STAT_CONN_LOG_CLOSE_YIELDS 1160 /*! reconciliation: fast-path pages deleted */ -#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1159 +#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1161 /*! reconciliation: page reconciliation calls */ -#define WT_STAT_CONN_REC_PAGES 1160 +#define WT_STAT_CONN_REC_PAGES 1162 /*! reconciliation: page reconciliation calls for eviction */ -#define WT_STAT_CONN_REC_PAGES_EVICTION 1161 +#define WT_STAT_CONN_REC_PAGES_EVICTION 1163 /*! reconciliation: pages deleted */ -#define WT_STAT_CONN_REC_PAGE_DELETE 1162 +#define WT_STAT_CONN_REC_PAGE_DELETE 1164 /*! reconciliation: split bytes currently awaiting free */ -#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1163 +#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1165 /*! reconciliation: split objects currently awaiting free */ -#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1164 +#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1166 /*! session: open cursor count */ -#define WT_STAT_CONN_SESSION_CURSOR_OPEN 1165 +#define WT_STAT_CONN_SESSION_CURSOR_OPEN 1167 /*! session: open session count */ -#define WT_STAT_CONN_SESSION_OPEN 1166 +#define WT_STAT_CONN_SESSION_OPEN 1168 /*! session: table compact failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1167 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1169 /*! session: table compact successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1168 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1170 /*! session: table create failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1169 +#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1171 /*! session: table create successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1170 +#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1172 /*! session: table drop failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1171 +#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1173 /*! session: table drop successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1172 +#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1174 /*! session: table rebalance failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_FAIL 1173 +#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_FAIL 1175 /*! session: table rebalance successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_SUCCESS 1174 +#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_SUCCESS 1176 /*! session: table rename failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1175 +#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1177 /*! session: table rename successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1176 +#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1178 /*! session: table salvage failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1177 +#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1179 /*! session: table salvage successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1178 +#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1180 /*! session: table truncate failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1179 +#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1181 /*! session: table truncate successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1180 +#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1182 /*! session: table verify failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1181 +#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1183 /*! session: table verify successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1182 +#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1184 /*! thread-state: active filesystem fsync calls */ -#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1183 +#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1185 /*! thread-state: active filesystem read calls */ -#define WT_STAT_CONN_THREAD_READ_ACTIVE 1184 +#define WT_STAT_CONN_THREAD_READ_ACTIVE 1186 /*! thread-state: active filesystem write calls */ -#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1185 +#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1187 /*! thread-yield: page acquire busy blocked */ -#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1186 +#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1188 /*! thread-yield: page acquire eviction blocked */ -#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1187 +#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1189 /*! thread-yield: page acquire locked blocked */ -#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1188 +#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1190 /*! thread-yield: page acquire read blocked */ -#define WT_STAT_CONN_PAGE_READ_BLOCKED 1189 +#define WT_STAT_CONN_PAGE_READ_BLOCKED 1191 /*! thread-yield: page acquire time sleeping (usecs) */ -#define WT_STAT_CONN_PAGE_SLEEP 1190 +#define WT_STAT_CONN_PAGE_SLEEP 1192 /*! transaction: number of named snapshots created */ -#define WT_STAT_CONN_TXN_SNAPSHOTS_CREATED 1191 +#define WT_STAT_CONN_TXN_SNAPSHOTS_CREATED 1193 /*! transaction: number of named snapshots dropped */ -#define WT_STAT_CONN_TXN_SNAPSHOTS_DROPPED 1192 +#define WT_STAT_CONN_TXN_SNAPSHOTS_DROPPED 1194 /*! transaction: transaction begins */ -#define WT_STAT_CONN_TXN_BEGIN 1193 +#define WT_STAT_CONN_TXN_BEGIN 1195 /*! transaction: transaction checkpoint currently running */ -#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1194 +#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1196 /*! transaction: transaction checkpoint generation */ -#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1195 +#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1197 /*! transaction: transaction checkpoint max time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1196 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1198 /*! transaction: transaction checkpoint min time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1197 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1199 /*! transaction: transaction checkpoint most recent time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1198 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1200 /*! transaction: transaction checkpoint scrub dirty target */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1199 +#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1201 /*! transaction: transaction checkpoint scrub time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1200 +#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1202 /*! transaction: transaction checkpoint total time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1201 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1203 /*! transaction: transaction checkpoints */ -#define WT_STAT_CONN_TXN_CHECKPOINT 1202 +#define WT_STAT_CONN_TXN_CHECKPOINT 1204 /*! transaction: transaction failures due to cache overflow */ -#define WT_STAT_CONN_TXN_FAIL_CACHE 1203 +#define WT_STAT_CONN_TXN_FAIL_CACHE 1205 /*! * transaction: transaction fsync calls for checkpoint after allocating * the transaction ID */ -#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1204 +#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1206 /*! * transaction: transaction fsync duration for checkpoint after * allocating the transaction ID (usecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1205 +#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1207 /*! transaction: transaction range of IDs currently pinned */ -#define WT_STAT_CONN_TXN_PINNED_RANGE 1206 +#define WT_STAT_CONN_TXN_PINNED_RANGE 1208 /*! transaction: transaction range of IDs currently pinned by a checkpoint */ -#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1207 +#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1209 /*! * transaction: transaction range of IDs currently pinned by named * snapshots */ -#define WT_STAT_CONN_TXN_PINNED_SNAPSHOT_RANGE 1208 +#define WT_STAT_CONN_TXN_PINNED_SNAPSHOT_RANGE 1210 /*! transaction: transaction sync calls */ -#define WT_STAT_CONN_TXN_SYNC 1209 +#define WT_STAT_CONN_TXN_SYNC 1211 /*! transaction: transactions committed */ -#define WT_STAT_CONN_TXN_COMMIT 1210 +#define WT_STAT_CONN_TXN_COMMIT 1212 /*! transaction: transactions rolled back */ -#define WT_STAT_CONN_TXN_ROLLBACK 1211 +#define WT_STAT_CONN_TXN_ROLLBACK 1213 /*! * @} diff --git a/src/support/stat.c b/src/support/stat.c index 81859ef1ca8..7150223e6cb 100644 --- a/src/support/stat.c +++ b/src/support/stat.c @@ -559,12 +559,14 @@ static const char * const __stats_connection_desc[] = { "cache: eviction calls to get a page found queue empty", "cache: eviction calls to get a page found queue empty after locking", "cache: eviction currently operating in aggressive mode", + "cache: eviction empty score", "cache: eviction server candidate queue empty when topping up", "cache: eviction server candidate queue not empty when topping up", "cache: eviction server evicting pages", "cache: eviction server slept, because we did not make progress with eviction", "cache: eviction server unable to reach eviction goal", "cache: eviction state", + "cache: eviction walks abandoned", "cache: eviction worker thread evicting pages", "cache: failed eviction of pages that exceeded the in-memory maximum", "cache: files with active eviction walks", @@ -801,12 +803,14 @@ __wt_stat_connection_clear_single(WT_CONNECTION_STATS *stats) stats->cache_eviction_get_ref_empty = 0; stats->cache_eviction_get_ref_empty2 = 0; /* not clearing cache_eviction_aggressive_set */ + /* not clearing cache_eviction_empty_score */ stats->cache_eviction_queue_empty = 0; stats->cache_eviction_queue_not_empty = 0; stats->cache_eviction_server_evicting = 0; stats->cache_eviction_server_slept = 0; stats->cache_eviction_slow = 0; /* not clearing cache_eviction_state */ + stats->cache_eviction_walks_abandoned = 0; stats->cache_eviction_worker_evicting = 0; stats->cache_eviction_force_fail = 0; /* not clearing cache_eviction_walks_active */ @@ -1041,6 +1045,8 @@ __wt_stat_connection_aggregate( WT_STAT_READ(from, cache_eviction_get_ref_empty2); to->cache_eviction_aggressive_set += WT_STAT_READ(from, cache_eviction_aggressive_set); + to->cache_eviction_empty_score += + WT_STAT_READ(from, cache_eviction_empty_score); to->cache_eviction_queue_empty += WT_STAT_READ(from, cache_eviction_queue_empty); to->cache_eviction_queue_not_empty += @@ -1051,6 +1057,8 @@ __wt_stat_connection_aggregate( WT_STAT_READ(from, cache_eviction_server_slept); to->cache_eviction_slow += WT_STAT_READ(from, cache_eviction_slow); to->cache_eviction_state += WT_STAT_READ(from, cache_eviction_state); + to->cache_eviction_walks_abandoned += + WT_STAT_READ(from, cache_eviction_walks_abandoned); to->cache_eviction_worker_evicting += WT_STAT_READ(from, cache_eviction_worker_evicting); to->cache_eviction_force_fail += diff --git a/tools/wtstats/stat_data.py b/tools/wtstats/stat_data.py index 1eb60c9d513..8f47b86a23e 100644 --- a/tools/wtstats/stat_data.py +++ b/tools/wtstats/stat_data.py @@ -7,6 +7,7 @@ no_scale_per_second_list = [ 'cache: bytes currently in the cache', 'cache: bytes not belonging to page images in the cache', 'cache: eviction currently operating in aggressive mode', + 'cache: eviction empty score', 'cache: eviction state', 'cache: files with active eviction walks', 'cache: hazard pointer maximum array length', @@ -103,6 +104,7 @@ no_clear_list = [ 'cache: bytes currently in the cache', 'cache: bytes not belonging to page images in the cache', 'cache: eviction currently operating in aggressive mode', + 'cache: eviction empty score', 'cache: eviction state', 'cache: files with active eviction walks', 'cache: maximum bytes configured', |