diff options
author | Alex Gorrod <alexander.gorrod@mongodb.com> | 2017-10-27 18:02:02 +1100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-27 18:02:02 +1100 |
commit | ec5e7a0eb7db26a15efd62559ee5c8d70548d67a (patch) | |
tree | bbca008b0f408f2e9feb891fdf3707f3146b8d0d | |
parent | b59b8856c040531ef883b6e68010ff1f47ce1495 (diff) | |
download | mongo-ec5e7a0eb7db26a15efd62559ee5c8d70548d67a.tar.gz |
Revert "WT-3652 Skip unnecessary lookaside reads / writes. (#3744)" (#3763)
This reverts commit b59b8856c040531ef883b6e68010ff1f47ce1495.
-rw-r--r-- | dist/stat_data.py | 1 | ||||
-rw-r--r-- | src/btree/bt_read.c | 78 | ||||
-rw-r--r-- | src/btree/bt_split.c | 33 | ||||
-rw-r--r-- | src/conn/conn_cache.c | 13 | ||||
-rw-r--r-- | src/evict/evict_lru.c | 30 | ||||
-rw-r--r-- | src/evict/evict_page.c | 17 | ||||
-rw-r--r-- | src/include/btmem.h | 6 | ||||
-rw-r--r-- | src/include/cache.h | 36 | ||||
-rw-r--r-- | src/include/cache.i | 53 | ||||
-rw-r--r-- | src/include/stat.h | 1 | ||||
-rw-r--r-- | src/include/wiredtiger.in | 410 | ||||
-rw-r--r-- | src/reconcile/rec_write.c | 53 | ||||
-rw-r--r-- | src/support/stat.c | 4 |
13 files changed, 328 insertions, 407 deletions
diff --git a/dist/stat_data.py b/dist/stat_data.py index 64d3d46818b..24610b9ab14 100644 --- a/dist/stat_data.py +++ b/dist/stat_data.py @@ -257,7 +257,6 @@ connection_stats = [ CacheStat('cache_lookaside_entries', 'lookaside table entries', 'no_clear,no_scale'), CacheStat('cache_lookaside_insert', 'lookaside table insert calls'), CacheStat('cache_lookaside_remove', 'lookaside table remove calls'), - CacheStat('cache_lookaside_score', 'lookaside score', 'no_clear,no_scale'), CacheStat('cache_overhead', 'percentage overhead', 'no_clear,no_scale'), CacheStat('cache_pages_dirty', 'tracked dirty pages in the cache', 'no_clear,no_scale'), CacheStat('cache_pages_inuse', 'pages currently held in the cache', 'no_clear,no_scale'), diff --git a/src/btree/bt_read.c b/src/btree/bt_read.c index eaf025d5468..2dd366d8d5e 100644 --- a/src/btree/bt_read.c +++ b/src/btree/bt_read.c @@ -430,61 +430,6 @@ err: /* } /* - * __page_in_lookaside_check -- - * Review lookaside page references for page in - */ -static inline int -__page_in_lookaside_check(WT_SESSION_IMPL *session, WT_REF *ref) -{ - WT_TXN *txn; - WT_TXN_GLOBAL *txn_global; - - txn = &session->txn; - txn_global = &S2C(session)->txn_global; - - /* - * Skip lookaside pages if reading without a timestamp and all the - * updates in lookaside are in the past. - * - * If we skip a lookaside page, the tree cannot be left clean: - * lookaside entries must be resolved before the tree can be discarded. - * - * Lookaside eviction preferentially chooses the newest updates when - * creating page image with no stable timestamp. If a stable timestamp - * has been set, we have to visit the page because eviction chooses old - * version of records in that case. - * - * One case where we may need to visit the page is if lookaside - * eviction is active in tree 2 when a checkpoint has started and is - * working its way through tree 1. In that case, lookaside may have - * created a page image with updates in the future of the checkpoint. - */ - if (!F_ISSET(txn, WT_TXN_HAS_TS_READ) && - F_ISSET(txn, WT_TXN_HAS_SNAPSHOT) && - !txn_global->has_stable_timestamp && - WT_TXNID_LT(ref->page_las->las_max_txn, - txn->snap_min)) { - __wt_tree_modify_set(session); - return (WT_NOTFOUND); - } -#ifdef HAVE_TIMESTAMPS - /* - * Skip lookaside pages if reading as of a timestamp and all the - * updates are in the future. - */ - if (F_ISSET(&session->txn, WT_TXN_HAS_TS_READ) && - txn_global->has_stable_timestamp && - WT_TXNID_LT(ref->page_las->las_max_txn, txn->snap_min) && - __wt_timestamp_cmp( - &ref->page_las->min_timestamp, &session->txn.read_timestamp) > 0) { - __wt_tree_modify_set(session); - return (WT_NOTFOUND); - } -#endif - return (0); -} - -/* * __wt_page_in_func -- * Acquire a hazard pointer to a page; if the page is not in-memory, * read it from the disk and build an in-memory version. @@ -528,8 +473,23 @@ __wt_page_in_func(WT_SESSION_IMPL *session, WT_REF *ref, uint32_t flags if (ref->state != WT_REF_LOOKASIDE || !LF_ISSET(WT_READ_LOOKASIDE)) return (WT_NOTFOUND); - - WT_RET(__page_in_lookaside_check(session, ref)); +#ifdef HAVE_TIMESTAMPS + /* + * Skip lookaside pages if reading as of a + * timestamp and all the updates are in the + * future. If we skip a lookaside page, the + * tree cannot be left clean: it must be + * visited by future checkpoints. + */ + if (F_ISSET( + &session->txn, WT_TXN_HAS_TS_READ) && + __wt_timestamp_cmp( + &ref->page_las->min_timestamp, + &session->txn.read_timestamp) > 0) { + __wt_tree_modify_set(session); + return (WT_NOTFOUND); + } +#endif } /* @@ -643,7 +603,7 @@ __wt_page_in_func(WT_SESSION_IMPL *session, WT_REF *ref, uint32_t flags continue; } -skip_evict: /* + /* * If we read the page and are configured to not trash * the cache, and no other thread has already used the * page, set the read generation so the page is evicted @@ -662,7 +622,7 @@ skip_evict: /* __wt_cache_read_gen_new(session, page); } else if (!LF_ISSET(WT_READ_NO_GEN)) __wt_cache_read_gen_bump(session, page); - +skip_evict: /* * Check if we need an autocommit transaction. * Starting a transaction can trigger eviction, so skip diff --git a/src/btree/bt_split.c b/src/btree/bt_split.c index 24c88128a0e..66f0478c542 100644 --- a/src/btree/bt_split.c +++ b/src/btree/bt_split.c @@ -1383,7 +1383,7 @@ __split_multi_inmem( WT_DECL_RET; WT_PAGE *page; WT_SAVE_UPD *supd; - WT_UPDATE *upd; + WT_UPDATE *prev_upd, *upd; uint64_t recno; uint32_t i, slot; @@ -1474,6 +1474,36 @@ __split_multi_inmem( break; WT_ILLEGAL_VALUE_ERR(session); } + + /* + * Discard the update used to create the on-page disk image. + * This is not just a performance issue: if the update used to + * create the value for this on-page disk image was a modify, + * and it was applied to the previous on-page value to + * determine a value to write to this disk image, that update + * cannot be applied to the new on-page value without risking + * corruption. + */ + if (supd->onpage_upd != NULL) { + for (prev_upd = upd; prev_upd != NULL && + prev_upd->next != supd->onpage_upd; + prev_upd = prev_upd->next) + ; + /* + * If the on-page update was in fact a tombstone, there + * will be no value on the page. Don't throw the + * tombstone away: we may need it to correctly resolve + * modifications. + */ + if (supd->onpage_upd->type == WT_UPDATE_DELETED && + prev_upd != NULL) + prev_upd = prev_upd->next; + if (prev_upd != NULL) { + __wt_update_obsolete_free( + session, page, prev_upd->next); + prev_upd->next = NULL; + } + } } /* @@ -1643,7 +1673,6 @@ __wt_multi_to_ref(WT_SESSION_IMPL *session, WT_RET(__wt_calloc_one(session, &ref->page_las)); ref->page_las->las_pageid = multi->las_pageid; - ref->page_las->las_max_txn = multi->las_max_txn; #ifdef HAVE_TIMESTAMPS __wt_timestamp_set( &ref->page_las->min_timestamp, &multi->las_min_timestamp); diff --git a/src/conn/conn_cache.c b/src/conn/conn_cache.c index 007aa8757da..c83fb544982 100644 --- a/src/conn/conn_cache.c +++ b/src/conn/conn_cache.c @@ -266,19 +266,6 @@ __wt_cache_stats_update(WT_SESSION_IMPL *session) WT_STAT_SET(session, stats, cache_pages_dirty, cache->pages_dirty_intl + cache->pages_dirty_leaf); - WT_STAT_CONN_SET(session, cache_eviction_state, cache->flags); - WT_STAT_CONN_SET(session, - cache_eviction_aggressive_set, cache->evict_aggressive_score); - WT_STAT_CONN_SET(session, - cache_eviction_empty_score, cache->evict_empty_score); - WT_STAT_CONN_SET(session, - cache_lookaside_score, __wt_cache_lookaside_score(cache)); - - WT_STAT_CONN_SET(session, - cache_eviction_active_workers, conn->evict_threads.current_threads); - WT_STAT_CONN_SET(session, cache_eviction_stable_state_workers, - cache->evict_tune_workers_best); - /* * The number of files with active walks ~= number of hazard pointers * in the walk session. Note: reading without locking. diff --git a/src/evict/evict_lru.c b/src/evict/evict_lru.c index 2e559531f4b..daee1b3d29a 100644 --- a/src/evict/evict_lru.c +++ b/src/evict/evict_lru.c @@ -617,6 +617,8 @@ __evict_update_work(WT_SESSION_IMPL *session) F_CLR(cache, WT_CACHE_EVICT_CLEAN | WT_CACHE_EVICT_CLEAN_HARD); } + WT_STAT_CONN_SET(session, cache_eviction_state, cache->flags); + return (F_ISSET(cache, WT_CACHE_EVICT_ALL | WT_CACHE_EVICT_URGENT)); } @@ -725,6 +727,9 @@ __evict_pass(WT_SESSION_IMPL *session) txn_global->current != oldest_id && cache->evict_aggressive_score < 100) ++cache->evict_aggressive_score; + WT_STAT_CONN_SET(session, + cache_eviction_aggressive_set, + cache->evict_aggressive_score); prev = now; prev_oldest_id = oldest_id; } @@ -756,8 +761,12 @@ __evict_pass(WT_SESSION_IMPL *session) "%s", "unable to reach eviction goal"); break; } else { - if (cache->evict_aggressive_score > 0) + if (cache->evict_aggressive_score > 0) { --cache->evict_aggressive_score; + WT_STAT_CONN_SET(session, + cache_eviction_aggressive_set, + cache->evict_aggressive_score); + } loop = 0; eviction_progress = cache->eviction_progress; } @@ -1089,7 +1098,12 @@ __evict_tune_workers(WT_SESSION_IMPL *session) WT_STAT_CONN_INCR(session, cache_eviction_worker_removed); } + WT_STAT_CONN_SET(session, + cache_eviction_stable_state_workers, + cache->evict_tune_workers_best); cache->evict_tune_stable = true; + WT_STAT_CONN_SET(session, cache_eviction_active_workers, + conn->evict_threads.current_threads); goto done; } } @@ -1121,6 +1135,9 @@ __evict_tune_workers(WT_SESSION_IMPL *session) cache->evict_tune_last_action_time = current_time; } + WT_STAT_CONN_SET(session, cache_eviction_active_workers, + conn->evict_threads.current_threads); + done: cache->evict_tune_last_time = current_time; cache->evict_tune_progress_last = eviction_progress; } @@ -1170,8 +1187,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_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; @@ -1201,10 +1221,14 @@ __evict_lru_walk(WT_SESSION_IMPL *session) */ if (__evict_queue_empty(queue, false)) { 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_CONN_SET(session, + cache_eviction_empty_score, + cache->evict_empty_score); + } WT_STAT_CONN_INCR(session, cache_eviction_queue_empty); } else WT_STAT_CONN_INCR(session, cache_eviction_queue_not_empty); diff --git a/src/evict/evict_page.c b/src/evict/evict_page.c index d0128d8bcdd..edf80ec4460 100644 --- a/src/evict/evict_page.c +++ b/src/evict/evict_page.c @@ -576,13 +576,18 @@ __evict_review( } /* - * If the cache is under pressure with many updates - * that can't be evicted, check if reconciliation - * suggests trying the lookaside table. + * If the cache is nearly stuck, check if + * reconciliation suggests trying the lookaside table + * unless lookaside eviction is disabled globally. + * + * We don't wait until the cache is completely stuck: + * for workloads where lookaside eviction is necessary + * to make progress, we don't want a single successful + * page eviction to make the cache "unstuck" so we have + * to wait again before evicting the next page. */ - if (!F_ISSET(conn, WT_CONN_EVICTION_NO_LOOKASIDE) && - (__wt_cache_lookaside_score(cache) > 50 || - __wt_cache_stuck(session))) + if (__wt_cache_nearly_stuck(session) && + !F_ISSET(conn, WT_CONN_EVICTION_NO_LOOKASIDE)) lookaside_retryp = &lookaside_retry; } } diff --git a/src/include/btmem.h b/src/include/btmem.h index 8662c40c635..158fcf87d29 100644 --- a/src/include/btmem.h +++ b/src/include/btmem.h @@ -242,7 +242,6 @@ struct __wt_page_modify { /* The page has lookaside entries. */ uint64_t las_pageid; - uint64_t las_max_txn; WT_DECL_TIMESTAMP(las_min_timestamp) } r; #undef mod_replace @@ -251,8 +250,6 @@ struct __wt_page_modify { #define mod_disk_image u1.r.disk_image #undef mod_replace_las_pageid #define mod_replace_las_pageid u1.r.las_pageid -#undef mod_replace_las_max_txn -#define mod_replace_las_max_txn u1.r.las_max_txn #undef mod_replace_las_min_timestamp #define mod_replace_las_min_timestamp u1.r.las_min_timestamp @@ -301,7 +298,6 @@ struct __wt_page_modify { uint32_t checksum; uint64_t las_pageid; - uint64_t las_max_txn; WT_DECL_TIMESTAMP(las_min_timestamp) } *multi; uint32_t multi_entries; /* Multiple blocks element count */ @@ -730,8 +726,6 @@ struct __wt_page_deleted { */ struct __wt_page_lookaside { uint64_t las_pageid; /* Page ID in lookaside */ - uint64_t las_max_txn; /* Maximum transaction ID in - lookaside */ WT_DECL_TIMESTAMP(min_timestamp) /* Oldest timestamp in lookaside for the page */ }; diff --git a/src/include/cache.h b/src/include/cache.h index 0a42853b95b..456cb0382e4 100644 --- a/src/include/cache.h +++ b/src/include/cache.h @@ -152,28 +152,20 @@ struct __wt_cache { #define WT_EVICT_SCORE_BUMP 10 #define WT_EVICT_SCORE_CUTOFF 10 #define WT_EVICT_SCORE_MAX 100 - /* - * Score of how aggressive eviction should be about selecting eviction - * candidates. If eviction is struggling to make progress, this score - * rises (up to a maximum of 100), at which point the cache is "stuck" - * and transaction will be rolled back. - */ - uint32_t evict_aggressive_score; - - /* - * Score of how often LRU queues are empty on refill. This score varies - * between 0 (if the queue hasn't been empty for a long time) and 100 - * (if the queue has been empty the last 10 times we filled up. - */ - uint32_t evict_empty_score; - - /* - * Score of how much pressure storing historical versions is having on - * eviction. This score varies between 0, if reconciliation always - * sees updates that are globally visible and hence can be discarded, - * to 100 if no updates are globally visible. - */ - int32_t evict_lookaside_score; + uint32_t evict_aggressive_score;/* Score of how aggressive eviction + should be about selecting eviction + candidates. If eviction is + struggling to make progress, this + score rises (up to a maximum of + 100), at which point the cache is + "stuck" and transaction will be + rolled back. */ + uint32_t evict_empty_score; /* Score of how often LRU queues are + empty on refill. This score varies + between 0 (if the queue hasn't been + empty for a long time) and 100 (if + the queue has been empty the last 10 + times we filled up. */ /* * Cache pool information. diff --git a/src/include/cache.i b/src/include/cache.i index e160dbf4d64..33b1bf2a7af 100644 --- a/src/include/cache.i +++ b/src/include/cache.i @@ -79,6 +79,22 @@ __wt_cache_read_gen_new(WT_SESSION_IMPL *session, WT_PAGE *page) } /* + * __wt_cache_nearly_stuck -- + * Indicate if the cache is nearly stuck. + */ +static inline bool +__wt_cache_nearly_stuck(WT_SESSION_IMPL *session) +{ + WT_CACHE *cache; + + cache = S2C(session)->cache; + return (cache->evict_aggressive_score >= + (WT_EVICT_SCORE_MAX - WT_EVICT_SCORE_BUMP) && + F_ISSET(cache, + WT_CACHE_EVICT_CLEAN_HARD | WT_CACHE_EVICT_DIRTY_HARD)); +} + +/* * __wt_cache_stuck -- * Indicate if the cache is stuck (i.e., not making progress). */ @@ -189,43 +205,6 @@ __wt_cache_bytes_other(WT_CACHE *cache) } /* - * __wt_cache_lookaside_score -- - * Get the current lookaside score (between 0 and 100). - */ -static inline uint32_t -__wt_cache_lookaside_score(WT_CACHE *cache) -{ - int32_t global_score; - - global_score = cache->evict_lookaside_score; - return ((uint32_t)WT_MIN(WT_MAX(global_score, 0), 100)); -} - -/* - * __wt_cache_update_lookaside_score -- - * Update the lookaside score based how many unstable updates are seen. - */ -static inline void -__wt_cache_update_lookaside_score( - WT_SESSION_IMPL *session, u_int updates_seen, u_int updates_unstable) -{ - WT_CACHE *cache; - int32_t global_score, score; - - if (updates_seen == 0) - return; - - cache = S2C(session)->cache; - score = (int32_t)((100 * updates_unstable) / updates_seen); - global_score = cache->evict_lookaside_score; - - if (score > global_score && global_score < 100) - __wt_atomic_addi32(&cache->evict_lookaside_score, 1); - else if (score < global_score && global_score > 0) - __wt_atomic_subi32(&cache->evict_lookaside_score, 1); -} - -/* * __wt_session_can_wait -- * Return if a session available for a potentially slow operation. */ diff --git a/src/include/stat.h b/src/include/stat.h index 12a7d532496..922b211bec4 100644 --- a/src/include/stat.h +++ b/src/include/stat.h @@ -341,7 +341,6 @@ struct __wt_connection_stats { int64_t cache_eviction_internal; int64_t cache_eviction_split_internal; int64_t cache_eviction_split_leaf; - int64_t cache_lookaside_score; int64_t cache_lookaside_entries; int64_t cache_lookaside_insert; int64_t cache_lookaside_remove; diff --git a/src/include/wiredtiger.in b/src/include/wiredtiger.in index 41dd970d3ba..aeea3394015 100644 --- a/src/include/wiredtiger.in +++ b/src/include/wiredtiger.in @@ -4854,458 +4854,456 @@ extern int wiredtiger_extension_terminate(WT_CONNECTION *connection); #define WT_STAT_CONN_CACHE_EVICTION_SPLIT_INTERNAL 1082 /*! cache: leaf pages split during eviction */ #define WT_STAT_CONN_CACHE_EVICTION_SPLIT_LEAF 1083 -/*! cache: lookaside score */ -#define WT_STAT_CONN_CACHE_LOOKASIDE_SCORE 1084 /*! cache: lookaside table entries */ -#define WT_STAT_CONN_CACHE_LOOKASIDE_ENTRIES 1085 +#define WT_STAT_CONN_CACHE_LOOKASIDE_ENTRIES 1084 /*! cache: lookaside table insert calls */ -#define WT_STAT_CONN_CACHE_LOOKASIDE_INSERT 1086 +#define WT_STAT_CONN_CACHE_LOOKASIDE_INSERT 1085 /*! cache: lookaside table remove calls */ -#define WT_STAT_CONN_CACHE_LOOKASIDE_REMOVE 1087 +#define WT_STAT_CONN_CACHE_LOOKASIDE_REMOVE 1086 /*! cache: maximum bytes configured */ -#define WT_STAT_CONN_CACHE_BYTES_MAX 1088 +#define WT_STAT_CONN_CACHE_BYTES_MAX 1087 /*! cache: maximum page size at eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_MAXIMUM_PAGE_SIZE 1089 +#define WT_STAT_CONN_CACHE_EVICTION_MAXIMUM_PAGE_SIZE 1088 /*! cache: modified pages evicted */ -#define WT_STAT_CONN_CACHE_EVICTION_DIRTY 1090 +#define WT_STAT_CONN_CACHE_EVICTION_DIRTY 1089 /*! cache: modified pages evicted by application threads */ -#define WT_STAT_CONN_CACHE_EVICTION_APP_DIRTY 1091 +#define WT_STAT_CONN_CACHE_EVICTION_APP_DIRTY 1090 /*! cache: overflow pages read into cache */ -#define WT_STAT_CONN_CACHE_READ_OVERFLOW 1092 +#define WT_STAT_CONN_CACHE_READ_OVERFLOW 1091 /*! cache: page split during eviction deepened the tree */ -#define WT_STAT_CONN_CACHE_EVICTION_DEEPEN 1093 +#define WT_STAT_CONN_CACHE_EVICTION_DEEPEN 1092 /*! cache: page written requiring lookaside records */ -#define WT_STAT_CONN_CACHE_WRITE_LOOKASIDE 1094 +#define WT_STAT_CONN_CACHE_WRITE_LOOKASIDE 1093 /*! cache: pages currently held in the cache */ -#define WT_STAT_CONN_CACHE_PAGES_INUSE 1095 +#define WT_STAT_CONN_CACHE_PAGES_INUSE 1094 /*! cache: pages evicted because they exceeded the in-memory maximum count */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE 1096 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE 1095 /*! * cache: pages evicted because they exceeded the in-memory maximum time * (usecs) */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_TIME 1097 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_TIME 1096 /*! cache: pages evicted because they had chains of deleted items count */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DELETE 1098 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DELETE 1097 /*! * cache: pages evicted because they had chains of deleted items time * (usecs) */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DELETE_TIME 1099 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DELETE_TIME 1098 /*! cache: pages evicted by application threads */ -#define WT_STAT_CONN_CACHE_EVICTION_APP 1100 +#define WT_STAT_CONN_CACHE_EVICTION_APP 1099 /*! cache: pages queued for eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED 1101 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED 1100 /*! cache: pages queued for urgent eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_URGENT 1102 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_URGENT 1101 /*! cache: pages queued for urgent eviction during walk */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_OLDEST 1103 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_OLDEST 1102 /*! cache: pages read into cache */ -#define WT_STAT_CONN_CACHE_READ 1104 +#define WT_STAT_CONN_CACHE_READ 1103 /*! cache: pages read into cache requiring lookaside entries */ -#define WT_STAT_CONN_CACHE_READ_LOOKASIDE 1105 +#define WT_STAT_CONN_CACHE_READ_LOOKASIDE 1104 /*! cache: pages requested from the cache */ -#define WT_STAT_CONN_CACHE_PAGES_REQUESTED 1106 +#define WT_STAT_CONN_CACHE_PAGES_REQUESTED 1105 /*! cache: pages seen by eviction walk */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_SEEN 1107 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_SEEN 1106 /*! cache: pages selected for eviction unable to be evicted */ -#define WT_STAT_CONN_CACHE_EVICTION_FAIL 1108 +#define WT_STAT_CONN_CACHE_EVICTION_FAIL 1107 /*! cache: pages walked for eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_WALK 1109 +#define WT_STAT_CONN_CACHE_EVICTION_WALK 1108 /*! cache: pages written from cache */ -#define WT_STAT_CONN_CACHE_WRITE 1110 +#define WT_STAT_CONN_CACHE_WRITE 1109 /*! cache: pages written requiring in-memory restoration */ -#define WT_STAT_CONN_CACHE_WRITE_RESTORE 1111 +#define WT_STAT_CONN_CACHE_WRITE_RESTORE 1110 /*! cache: percentage overhead */ -#define WT_STAT_CONN_CACHE_OVERHEAD 1112 +#define WT_STAT_CONN_CACHE_OVERHEAD 1111 /*! cache: tracked bytes belonging to internal pages in the cache */ -#define WT_STAT_CONN_CACHE_BYTES_INTERNAL 1113 +#define WT_STAT_CONN_CACHE_BYTES_INTERNAL 1112 /*! cache: tracked bytes belonging to leaf pages in the cache */ -#define WT_STAT_CONN_CACHE_BYTES_LEAF 1114 +#define WT_STAT_CONN_CACHE_BYTES_LEAF 1113 /*! cache: tracked dirty bytes in the cache */ -#define WT_STAT_CONN_CACHE_BYTES_DIRTY 1115 +#define WT_STAT_CONN_CACHE_BYTES_DIRTY 1114 /*! cache: tracked dirty pages in the cache */ -#define WT_STAT_CONN_CACHE_PAGES_DIRTY 1116 +#define WT_STAT_CONN_CACHE_PAGES_DIRTY 1115 /*! cache: unmodified pages evicted */ -#define WT_STAT_CONN_CACHE_EVICTION_CLEAN 1117 +#define WT_STAT_CONN_CACHE_EVICTION_CLEAN 1116 /*! connection: auto adjusting condition resets */ -#define WT_STAT_CONN_COND_AUTO_WAIT_RESET 1118 +#define WT_STAT_CONN_COND_AUTO_WAIT_RESET 1117 /*! connection: auto adjusting condition wait calls */ -#define WT_STAT_CONN_COND_AUTO_WAIT 1119 +#define WT_STAT_CONN_COND_AUTO_WAIT 1118 /*! connection: detected system time went backwards */ -#define WT_STAT_CONN_TIME_TRAVEL 1120 +#define WT_STAT_CONN_TIME_TRAVEL 1119 /*! connection: files currently open */ -#define WT_STAT_CONN_FILE_OPEN 1121 +#define WT_STAT_CONN_FILE_OPEN 1120 /*! connection: memory allocations */ -#define WT_STAT_CONN_MEMORY_ALLOCATION 1122 +#define WT_STAT_CONN_MEMORY_ALLOCATION 1121 /*! connection: memory frees */ -#define WT_STAT_CONN_MEMORY_FREE 1123 +#define WT_STAT_CONN_MEMORY_FREE 1122 /*! connection: memory re-allocations */ -#define WT_STAT_CONN_MEMORY_GROW 1124 +#define WT_STAT_CONN_MEMORY_GROW 1123 /*! connection: pthread mutex condition wait calls */ -#define WT_STAT_CONN_COND_WAIT 1125 +#define WT_STAT_CONN_COND_WAIT 1124 /*! connection: pthread mutex shared lock read-lock calls */ -#define WT_STAT_CONN_RWLOCK_READ 1126 +#define WT_STAT_CONN_RWLOCK_READ 1125 /*! connection: pthread mutex shared lock write-lock calls */ -#define WT_STAT_CONN_RWLOCK_WRITE 1127 +#define WT_STAT_CONN_RWLOCK_WRITE 1126 /*! connection: total fsync I/Os */ -#define WT_STAT_CONN_FSYNC_IO 1128 +#define WT_STAT_CONN_FSYNC_IO 1127 /*! connection: total read I/Os */ -#define WT_STAT_CONN_READ_IO 1129 +#define WT_STAT_CONN_READ_IO 1128 /*! connection: total write I/Os */ -#define WT_STAT_CONN_WRITE_IO 1130 +#define WT_STAT_CONN_WRITE_IO 1129 /*! cursor: cursor create calls */ -#define WT_STAT_CONN_CURSOR_CREATE 1131 +#define WT_STAT_CONN_CURSOR_CREATE 1130 /*! cursor: cursor insert calls */ -#define WT_STAT_CONN_CURSOR_INSERT 1132 +#define WT_STAT_CONN_CURSOR_INSERT 1131 /*! cursor: cursor modify calls */ -#define WT_STAT_CONN_CURSOR_MODIFY 1133 +#define WT_STAT_CONN_CURSOR_MODIFY 1132 /*! cursor: cursor next calls */ -#define WT_STAT_CONN_CURSOR_NEXT 1134 +#define WT_STAT_CONN_CURSOR_NEXT 1133 /*! cursor: cursor prev calls */ -#define WT_STAT_CONN_CURSOR_PREV 1135 +#define WT_STAT_CONN_CURSOR_PREV 1134 /*! cursor: cursor remove calls */ -#define WT_STAT_CONN_CURSOR_REMOVE 1136 +#define WT_STAT_CONN_CURSOR_REMOVE 1135 /*! cursor: cursor reserve calls */ -#define WT_STAT_CONN_CURSOR_RESERVE 1137 +#define WT_STAT_CONN_CURSOR_RESERVE 1136 /*! cursor: cursor reset calls */ -#define WT_STAT_CONN_CURSOR_RESET 1138 +#define WT_STAT_CONN_CURSOR_RESET 1137 /*! cursor: cursor restarted searches */ -#define WT_STAT_CONN_CURSOR_RESTART 1139 +#define WT_STAT_CONN_CURSOR_RESTART 1138 /*! cursor: cursor search calls */ -#define WT_STAT_CONN_CURSOR_SEARCH 1140 +#define WT_STAT_CONN_CURSOR_SEARCH 1139 /*! cursor: cursor search near calls */ -#define WT_STAT_CONN_CURSOR_SEARCH_NEAR 1141 +#define WT_STAT_CONN_CURSOR_SEARCH_NEAR 1140 /*! cursor: cursor update calls */ -#define WT_STAT_CONN_CURSOR_UPDATE 1142 +#define WT_STAT_CONN_CURSOR_UPDATE 1141 /*! cursor: truncate calls */ -#define WT_STAT_CONN_CURSOR_TRUNCATE 1143 +#define WT_STAT_CONN_CURSOR_TRUNCATE 1142 /*! data-handle: connection data handles currently active */ -#define WT_STAT_CONN_DH_CONN_HANDLE_COUNT 1144 +#define WT_STAT_CONN_DH_CONN_HANDLE_COUNT 1143 /*! data-handle: connection sweep candidate became referenced */ -#define WT_STAT_CONN_DH_SWEEP_REF 1145 +#define WT_STAT_CONN_DH_SWEEP_REF 1144 /*! data-handle: connection sweep dhandles closed */ -#define WT_STAT_CONN_DH_SWEEP_CLOSE 1146 +#define WT_STAT_CONN_DH_SWEEP_CLOSE 1145 /*! data-handle: connection sweep dhandles removed from hash list */ -#define WT_STAT_CONN_DH_SWEEP_REMOVE 1147 +#define WT_STAT_CONN_DH_SWEEP_REMOVE 1146 /*! data-handle: connection sweep time-of-death sets */ -#define WT_STAT_CONN_DH_SWEEP_TOD 1148 +#define WT_STAT_CONN_DH_SWEEP_TOD 1147 /*! data-handle: connection sweeps */ -#define WT_STAT_CONN_DH_SWEEPS 1149 +#define WT_STAT_CONN_DH_SWEEPS 1148 /*! data-handle: session dhandles swept */ -#define WT_STAT_CONN_DH_SESSION_HANDLES 1150 +#define WT_STAT_CONN_DH_SESSION_HANDLES 1149 /*! data-handle: session sweep attempts */ -#define WT_STAT_CONN_DH_SESSION_SWEEPS 1151 +#define WT_STAT_CONN_DH_SESSION_SWEEPS 1150 /*! lock: checkpoint lock acquisitions */ -#define WT_STAT_CONN_LOCK_CHECKPOINT_COUNT 1152 +#define WT_STAT_CONN_LOCK_CHECKPOINT_COUNT 1151 /*! lock: checkpoint lock application thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_APPLICATION 1153 +#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_APPLICATION 1152 /*! lock: checkpoint lock internal thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_INTERNAL 1154 +#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_INTERNAL 1153 /*! * lock: dhandle lock application thread time waiting for the dhandle * lock (usecs) */ -#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_APPLICATION 1155 +#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_APPLICATION 1154 /*! * lock: dhandle lock internal thread time waiting for the dhandle lock * (usecs) */ -#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_INTERNAL 1156 +#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_INTERNAL 1155 /*! lock: dhandle read lock acquisitions */ -#define WT_STAT_CONN_LOCK_DHANDLE_READ_COUNT 1157 +#define WT_STAT_CONN_LOCK_DHANDLE_READ_COUNT 1156 /*! lock: dhandle write lock acquisitions */ -#define WT_STAT_CONN_LOCK_DHANDLE_WRITE_COUNT 1158 +#define WT_STAT_CONN_LOCK_DHANDLE_WRITE_COUNT 1157 /*! lock: metadata lock acquisitions */ -#define WT_STAT_CONN_LOCK_METADATA_COUNT 1159 +#define WT_STAT_CONN_LOCK_METADATA_COUNT 1158 /*! lock: metadata lock application thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_METADATA_WAIT_APPLICATION 1160 +#define WT_STAT_CONN_LOCK_METADATA_WAIT_APPLICATION 1159 /*! lock: metadata lock internal thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_METADATA_WAIT_INTERNAL 1161 +#define WT_STAT_CONN_LOCK_METADATA_WAIT_INTERNAL 1160 /*! lock: schema lock acquisitions */ -#define WT_STAT_CONN_LOCK_SCHEMA_COUNT 1162 +#define WT_STAT_CONN_LOCK_SCHEMA_COUNT 1161 /*! lock: schema lock application thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_APPLICATION 1163 +#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_APPLICATION 1162 /*! lock: schema lock internal thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_INTERNAL 1164 +#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_INTERNAL 1163 /*! * lock: table lock application thread time waiting for the table lock * (usecs) */ -#define WT_STAT_CONN_LOCK_TABLE_WAIT_APPLICATION 1165 +#define WT_STAT_CONN_LOCK_TABLE_WAIT_APPLICATION 1164 /*! * lock: table lock internal thread time waiting for the table lock * (usecs) */ -#define WT_STAT_CONN_LOCK_TABLE_WAIT_INTERNAL 1166 +#define WT_STAT_CONN_LOCK_TABLE_WAIT_INTERNAL 1165 /*! lock: table read lock acquisitions */ -#define WT_STAT_CONN_LOCK_TABLE_READ_COUNT 1167 +#define WT_STAT_CONN_LOCK_TABLE_READ_COUNT 1166 /*! lock: table write lock acquisitions */ -#define WT_STAT_CONN_LOCK_TABLE_WRITE_COUNT 1168 +#define WT_STAT_CONN_LOCK_TABLE_WRITE_COUNT 1167 /*! log: busy returns attempting to switch slots */ -#define WT_STAT_CONN_LOG_SLOT_SWITCH_BUSY 1169 +#define WT_STAT_CONN_LOG_SLOT_SWITCH_BUSY 1168 /*! log: force checkpoint calls slept */ -#define WT_STAT_CONN_LOG_FORCE_CKPT_SLEEP 1170 +#define WT_STAT_CONN_LOG_FORCE_CKPT_SLEEP 1169 /*! log: log bytes of payload data */ -#define WT_STAT_CONN_LOG_BYTES_PAYLOAD 1171 +#define WT_STAT_CONN_LOG_BYTES_PAYLOAD 1170 /*! log: log bytes written */ -#define WT_STAT_CONN_LOG_BYTES_WRITTEN 1172 +#define WT_STAT_CONN_LOG_BYTES_WRITTEN 1171 /*! log: log files manually zero-filled */ -#define WT_STAT_CONN_LOG_ZERO_FILLS 1173 +#define WT_STAT_CONN_LOG_ZERO_FILLS 1172 /*! log: log flush operations */ -#define WT_STAT_CONN_LOG_FLUSH 1174 +#define WT_STAT_CONN_LOG_FLUSH 1173 /*! log: log force write operations */ -#define WT_STAT_CONN_LOG_FORCE_WRITE 1175 +#define WT_STAT_CONN_LOG_FORCE_WRITE 1174 /*! log: log force write operations skipped */ -#define WT_STAT_CONN_LOG_FORCE_WRITE_SKIP 1176 +#define WT_STAT_CONN_LOG_FORCE_WRITE_SKIP 1175 /*! log: log records compressed */ -#define WT_STAT_CONN_LOG_COMPRESS_WRITES 1177 +#define WT_STAT_CONN_LOG_COMPRESS_WRITES 1176 /*! log: log records not compressed */ -#define WT_STAT_CONN_LOG_COMPRESS_WRITE_FAILS 1178 +#define WT_STAT_CONN_LOG_COMPRESS_WRITE_FAILS 1177 /*! log: log records too small to compress */ -#define WT_STAT_CONN_LOG_COMPRESS_SMALL 1179 +#define WT_STAT_CONN_LOG_COMPRESS_SMALL 1178 /*! log: log release advances write LSN */ -#define WT_STAT_CONN_LOG_RELEASE_WRITE_LSN 1180 +#define WT_STAT_CONN_LOG_RELEASE_WRITE_LSN 1179 /*! log: log scan operations */ -#define WT_STAT_CONN_LOG_SCANS 1181 +#define WT_STAT_CONN_LOG_SCANS 1180 /*! log: log scan records requiring two reads */ -#define WT_STAT_CONN_LOG_SCAN_REREADS 1182 +#define WT_STAT_CONN_LOG_SCAN_REREADS 1181 /*! log: log server thread advances write LSN */ -#define WT_STAT_CONN_LOG_WRITE_LSN 1183 +#define WT_STAT_CONN_LOG_WRITE_LSN 1182 /*! log: log server thread write LSN walk skipped */ -#define WT_STAT_CONN_LOG_WRITE_LSN_SKIP 1184 +#define WT_STAT_CONN_LOG_WRITE_LSN_SKIP 1183 /*! log: log sync operations */ -#define WT_STAT_CONN_LOG_SYNC 1185 +#define WT_STAT_CONN_LOG_SYNC 1184 /*! log: log sync time duration (usecs) */ -#define WT_STAT_CONN_LOG_SYNC_DURATION 1186 +#define WT_STAT_CONN_LOG_SYNC_DURATION 1185 /*! log: log sync_dir operations */ -#define WT_STAT_CONN_LOG_SYNC_DIR 1187 +#define WT_STAT_CONN_LOG_SYNC_DIR 1186 /*! log: log sync_dir time duration (usecs) */ -#define WT_STAT_CONN_LOG_SYNC_DIR_DURATION 1188 +#define WT_STAT_CONN_LOG_SYNC_DIR_DURATION 1187 /*! log: log write operations */ -#define WT_STAT_CONN_LOG_WRITES 1189 +#define WT_STAT_CONN_LOG_WRITES 1188 /*! log: logging bytes consolidated */ -#define WT_STAT_CONN_LOG_SLOT_CONSOLIDATED 1190 +#define WT_STAT_CONN_LOG_SLOT_CONSOLIDATED 1189 /*! log: maximum log file size */ -#define WT_STAT_CONN_LOG_MAX_FILESIZE 1191 +#define WT_STAT_CONN_LOG_MAX_FILESIZE 1190 /*! log: number of pre-allocated log files to create */ -#define WT_STAT_CONN_LOG_PREALLOC_MAX 1192 +#define WT_STAT_CONN_LOG_PREALLOC_MAX 1191 /*! log: pre-allocated log files not ready and missed */ -#define WT_STAT_CONN_LOG_PREALLOC_MISSED 1193 +#define WT_STAT_CONN_LOG_PREALLOC_MISSED 1192 /*! log: pre-allocated log files prepared */ -#define WT_STAT_CONN_LOG_PREALLOC_FILES 1194 +#define WT_STAT_CONN_LOG_PREALLOC_FILES 1193 /*! log: pre-allocated log files used */ -#define WT_STAT_CONN_LOG_PREALLOC_USED 1195 +#define WT_STAT_CONN_LOG_PREALLOC_USED 1194 /*! log: records processed by log scan */ -#define WT_STAT_CONN_LOG_SCAN_RECORDS 1196 +#define WT_STAT_CONN_LOG_SCAN_RECORDS 1195 /*! log: slot close lost race */ -#define WT_STAT_CONN_LOG_SLOT_CLOSE_RACE 1197 +#define WT_STAT_CONN_LOG_SLOT_CLOSE_RACE 1196 /*! log: slot close unbuffered waits */ -#define WT_STAT_CONN_LOG_SLOT_CLOSE_UNBUF 1198 +#define WT_STAT_CONN_LOG_SLOT_CLOSE_UNBUF 1197 /*! log: slot closures */ -#define WT_STAT_CONN_LOG_SLOT_CLOSES 1199 +#define WT_STAT_CONN_LOG_SLOT_CLOSES 1198 /*! log: slot join atomic update races */ -#define WT_STAT_CONN_LOG_SLOT_RACES 1200 +#define WT_STAT_CONN_LOG_SLOT_RACES 1199 /*! log: slot join calls atomic updates raced */ -#define WT_STAT_CONN_LOG_SLOT_YIELD_RACE 1201 +#define WT_STAT_CONN_LOG_SLOT_YIELD_RACE 1200 /*! log: slot join calls did not yield */ -#define WT_STAT_CONN_LOG_SLOT_IMMEDIATE 1202 +#define WT_STAT_CONN_LOG_SLOT_IMMEDIATE 1201 /*! log: slot join calls found active slot closed */ -#define WT_STAT_CONN_LOG_SLOT_YIELD_CLOSE 1203 +#define WT_STAT_CONN_LOG_SLOT_YIELD_CLOSE 1202 /*! log: slot join calls slept */ -#define WT_STAT_CONN_LOG_SLOT_YIELD_SLEEP 1204 +#define WT_STAT_CONN_LOG_SLOT_YIELD_SLEEP 1203 /*! log: slot join calls yielded */ -#define WT_STAT_CONN_LOG_SLOT_YIELD 1205 +#define WT_STAT_CONN_LOG_SLOT_YIELD 1204 /*! log: slot join found active slot closed */ -#define WT_STAT_CONN_LOG_SLOT_ACTIVE_CLOSED 1206 +#define WT_STAT_CONN_LOG_SLOT_ACTIVE_CLOSED 1205 /*! log: slot joins yield time (usecs) */ -#define WT_STAT_CONN_LOG_SLOT_YIELD_DURATION 1207 +#define WT_STAT_CONN_LOG_SLOT_YIELD_DURATION 1206 /*! log: slot transitions unable to find free slot */ -#define WT_STAT_CONN_LOG_SLOT_NO_FREE_SLOTS 1208 +#define WT_STAT_CONN_LOG_SLOT_NO_FREE_SLOTS 1207 /*! log: slot unbuffered writes */ -#define WT_STAT_CONN_LOG_SLOT_UNBUFFERED 1209 +#define WT_STAT_CONN_LOG_SLOT_UNBUFFERED 1208 /*! log: total in-memory size of compressed records */ -#define WT_STAT_CONN_LOG_COMPRESS_MEM 1210 +#define WT_STAT_CONN_LOG_COMPRESS_MEM 1209 /*! log: total log buffer size */ -#define WT_STAT_CONN_LOG_BUFFER_SIZE 1211 +#define WT_STAT_CONN_LOG_BUFFER_SIZE 1210 /*! log: total size of compressed records */ -#define WT_STAT_CONN_LOG_COMPRESS_LEN 1212 +#define WT_STAT_CONN_LOG_COMPRESS_LEN 1211 /*! log: written slots coalesced */ -#define WT_STAT_CONN_LOG_SLOT_COALESCED 1213 +#define WT_STAT_CONN_LOG_SLOT_COALESCED 1212 /*! log: yields waiting for previous log file close */ -#define WT_STAT_CONN_LOG_CLOSE_YIELDS 1214 +#define WT_STAT_CONN_LOG_CLOSE_YIELDS 1213 /*! reconciliation: fast-path pages deleted */ -#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1215 +#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1214 /*! reconciliation: page reconciliation calls */ -#define WT_STAT_CONN_REC_PAGES 1216 +#define WT_STAT_CONN_REC_PAGES 1215 /*! reconciliation: page reconciliation calls for eviction */ -#define WT_STAT_CONN_REC_PAGES_EVICTION 1217 +#define WT_STAT_CONN_REC_PAGES_EVICTION 1216 /*! reconciliation: pages deleted */ -#define WT_STAT_CONN_REC_PAGE_DELETE 1218 +#define WT_STAT_CONN_REC_PAGE_DELETE 1217 /*! reconciliation: split bytes currently awaiting free */ -#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1219 +#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1218 /*! reconciliation: split objects currently awaiting free */ -#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1220 +#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1219 /*! session: open cursor count */ -#define WT_STAT_CONN_SESSION_CURSOR_OPEN 1221 +#define WT_STAT_CONN_SESSION_CURSOR_OPEN 1220 /*! session: open session count */ -#define WT_STAT_CONN_SESSION_OPEN 1222 +#define WT_STAT_CONN_SESSION_OPEN 1221 /*! session: table alter failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1223 +#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1222 /*! session: table alter successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1224 +#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1223 /*! session: table alter unchanged and skipped */ -#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1225 +#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1224 /*! session: table compact failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1226 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1225 /*! session: table compact successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1227 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1226 /*! session: table create failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1228 +#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1227 /*! session: table create successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1229 +#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1228 /*! session: table drop failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1230 +#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1229 /*! session: table drop successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1231 +#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1230 /*! session: table rebalance failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_FAIL 1232 +#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_FAIL 1231 /*! session: table rebalance successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_SUCCESS 1233 +#define WT_STAT_CONN_SESSION_TABLE_REBALANCE_SUCCESS 1232 /*! session: table rename failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1234 +#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1233 /*! session: table rename successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1235 +#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1234 /*! session: table salvage failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1236 +#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1235 /*! session: table salvage successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1237 +#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1236 /*! session: table truncate failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1238 +#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1237 /*! session: table truncate successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1239 +#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1238 /*! session: table verify failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1240 +#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1239 /*! session: table verify successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1241 +#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1240 /*! thread-state: active filesystem fsync calls */ -#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1242 +#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1241 /*! thread-state: active filesystem read calls */ -#define WT_STAT_CONN_THREAD_READ_ACTIVE 1243 +#define WT_STAT_CONN_THREAD_READ_ACTIVE 1242 /*! thread-state: active filesystem write calls */ -#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1244 +#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1243 /*! thread-yield: application thread time evicting (usecs) */ -#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1245 +#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1244 /*! thread-yield: application thread time waiting for cache (usecs) */ -#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1246 +#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1245 /*! * thread-yield: connection close blocked waiting for transaction state * stabilization */ -#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1247 +#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1246 /*! thread-yield: connection close yielded for lsm manager shutdown */ -#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1248 +#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1247 /*! thread-yield: data handle lock yielded */ -#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1249 +#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1248 /*! * thread-yield: get reference for page index and slot time sleeping * (usecs) */ -#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1250 +#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1249 /*! thread-yield: log server sync yielded for log write */ -#define WT_STAT_CONN_LOG_SERVER_SYNC_BLOCKED 1251 +#define WT_STAT_CONN_LOG_SERVER_SYNC_BLOCKED 1250 /*! thread-yield: page acquire busy blocked */ -#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1252 +#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1251 /*! thread-yield: page acquire eviction blocked */ -#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1253 +#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1252 /*! thread-yield: page acquire locked blocked */ -#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1254 +#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1253 /*! thread-yield: page acquire read blocked */ -#define WT_STAT_CONN_PAGE_READ_BLOCKED 1255 +#define WT_STAT_CONN_PAGE_READ_BLOCKED 1254 /*! thread-yield: page acquire time sleeping (usecs) */ -#define WT_STAT_CONN_PAGE_SLEEP 1256 +#define WT_STAT_CONN_PAGE_SLEEP 1255 /*! * thread-yield: page delete rollback time sleeping for state change * (usecs) */ -#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1257 +#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1256 /*! thread-yield: page reconciliation yielded due to child modification */ -#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1258 +#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1257 /*! * thread-yield: tree descend one level yielded for split page index * update */ -#define WT_STAT_CONN_TREE_DESCEND_BLOCKED 1259 +#define WT_STAT_CONN_TREE_DESCEND_BLOCKED 1258 /*! transaction: number of named snapshots created */ -#define WT_STAT_CONN_TXN_SNAPSHOTS_CREATED 1260 +#define WT_STAT_CONN_TXN_SNAPSHOTS_CREATED 1259 /*! transaction: number of named snapshots dropped */ -#define WT_STAT_CONN_TXN_SNAPSHOTS_DROPPED 1261 +#define WT_STAT_CONN_TXN_SNAPSHOTS_DROPPED 1260 /*! transaction: transaction begins */ -#define WT_STAT_CONN_TXN_BEGIN 1262 +#define WT_STAT_CONN_TXN_BEGIN 1261 /*! transaction: transaction checkpoint currently running */ -#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1263 +#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1262 /*! transaction: transaction checkpoint generation */ -#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1264 +#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1263 /*! transaction: transaction checkpoint max time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1265 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1264 /*! transaction: transaction checkpoint min time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1266 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1265 /*! transaction: transaction checkpoint most recent time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1267 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1266 /*! transaction: transaction checkpoint scrub dirty target */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1268 +#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1267 /*! transaction: transaction checkpoint scrub time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1269 +#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1268 /*! transaction: transaction checkpoint total time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1270 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1269 /*! transaction: transaction checkpoints */ -#define WT_STAT_CONN_TXN_CHECKPOINT 1271 +#define WT_STAT_CONN_TXN_CHECKPOINT 1270 /*! * transaction: transaction checkpoints skipped because database was * clean */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1272 +#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1271 /*! transaction: transaction failures due to cache overflow */ -#define WT_STAT_CONN_TXN_FAIL_CACHE 1273 +#define WT_STAT_CONN_TXN_FAIL_CACHE 1272 /*! * transaction: transaction fsync calls for checkpoint after allocating * the transaction ID */ -#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1274 +#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1273 /*! * transaction: transaction fsync duration for checkpoint after * allocating the transaction ID (usecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1275 +#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1274 /*! transaction: transaction range of IDs currently pinned */ -#define WT_STAT_CONN_TXN_PINNED_RANGE 1276 +#define WT_STAT_CONN_TXN_PINNED_RANGE 1275 /*! transaction: transaction range of IDs currently pinned by a checkpoint */ -#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1277 +#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1276 /*! * transaction: transaction range of IDs currently pinned by named * snapshots */ -#define WT_STAT_CONN_TXN_PINNED_SNAPSHOT_RANGE 1278 +#define WT_STAT_CONN_TXN_PINNED_SNAPSHOT_RANGE 1277 /*! transaction: transaction sync calls */ -#define WT_STAT_CONN_TXN_SYNC 1279 +#define WT_STAT_CONN_TXN_SYNC 1278 /*! transaction: transactions commit timestamp queue inserts to head */ -#define WT_STAT_CONN_TXN_COMMIT_QUEUE_HEAD 1280 +#define WT_STAT_CONN_TXN_COMMIT_QUEUE_HEAD 1279 /*! transaction: transactions commit timestamp queue inserts total */ -#define WT_STAT_CONN_TXN_COMMIT_QUEUE_INSERTS 1281 +#define WT_STAT_CONN_TXN_COMMIT_QUEUE_INSERTS 1280 /*! transaction: transactions commit timestamp queue length */ -#define WT_STAT_CONN_TXN_COMMIT_QUEUE_LEN 1282 +#define WT_STAT_CONN_TXN_COMMIT_QUEUE_LEN 1281 /*! transaction: transactions committed */ -#define WT_STAT_CONN_TXN_COMMIT 1283 +#define WT_STAT_CONN_TXN_COMMIT 1282 /*! transaction: transactions read timestamp queue inserts to head */ -#define WT_STAT_CONN_TXN_READ_QUEUE_HEAD 1284 +#define WT_STAT_CONN_TXN_READ_QUEUE_HEAD 1283 /*! transaction: transactions read timestamp queue inserts total */ -#define WT_STAT_CONN_TXN_READ_QUEUE_INSERTS 1285 +#define WT_STAT_CONN_TXN_READ_QUEUE_INSERTS 1284 /*! transaction: transactions read timestamp queue length */ -#define WT_STAT_CONN_TXN_READ_QUEUE_LEN 1286 +#define WT_STAT_CONN_TXN_READ_QUEUE_LEN 1285 /*! transaction: transactions rolled back */ -#define WT_STAT_CONN_TXN_ROLLBACK 1287 +#define WT_STAT_CONN_TXN_ROLLBACK 1286 /*! transaction: update conflicts */ -#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1288 +#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1287 /*! * @} diff --git a/src/reconcile/rec_write.c b/src/reconcile/rec_write.c index c3e0cb20ec1..ae856649ede 100644 --- a/src/reconcile/rec_write.c +++ b/src/reconcile/rec_write.c @@ -50,9 +50,6 @@ typedef struct { WT_DECL_TIMESTAMP(max_timestamp) WT_DECL_TIMESTAMP(min_saved_timestamp) - u_int updates_seen; /* Count of updates seen. */ - u_int updates_unstable; /* Count of updates not visible_all. */ - bool update_uncommitted; /* An update was uncommitted */ bool update_used; /* An update could be used */ @@ -453,15 +450,6 @@ __wt_reconcile(WT_SESSION_IMPL *session, WT_REF *ref, WT_ILLEGAL_VALUE_SET(session); } - /* - * Update the global lookaside score. Only use observations during - * eviction, not checkpoints and don't count eviction of the lookaside - * table itself. - */ - if (F_ISSET(r, WT_REC_EVICT) && !F_ISSET(btree, WT_BTREE_LOOKASIDE)) - __wt_cache_update_lookaside_score( - session, r->updates_seen, r->updates_unstable); - /* Check for a successful reconciliation. */ WT_TRET(__rec_write_check_complete(session, r, ret, lookaside_retryp)); @@ -982,7 +970,6 @@ __rec_init(WT_SESSION_IMPL *session, #endif /* Track if updates were used and/or uncommitted. */ - r->updates_seen = r->updates_unstable = 0; r->update_uncommitted = r->update_used = false; /* Track if the page can be marked clean. */ @@ -1268,7 +1255,6 @@ __rec_txn_read(WT_SESSION_IMPL *session, WT_RECONCILE *r, if ((txnid = upd->txnid) == WT_TXN_ABORTED) continue; - ++r->updates_seen; upd_memsize += WT_UPDATE_MEMSIZE(upd); /* @@ -1311,28 +1297,10 @@ __rec_txn_read(WT_SESSION_IMPL *session, WT_RECONCILE *r, * uncommitted updates). Lookaside eviction can save any * committed update. Regular eviction checks that the maximum * transaction ID and timestamp seen are stable. - * - * Lookaside eviction tries to choose the same version as a - * subsequent checkpoint, so that checkpoint can skip over - * pages with lookaside entries. If the application has - * supplied a stable timestamp, we assume (a) that it is old, - * and (b) that the next checkpoint will use it, so we wait to - * see a stable update. If there is no stable timestamp, we - * assume the next checkpoint will write the most recent - * version (but we save enough information that checkpoint can - * fix things up if we choose an update that is too new). */ - if (*updp == NULL && F_ISSET(r, WT_REC_LOOKASIDE) && - F_ISSET(r, WT_REC_VISIBLE_ALL) && - !S2C(session)->txn_global.has_stable_timestamp) - *updp = upd; - if (F_ISSET(r, WT_REC_VISIBLE_ALL) ? !__wt_txn_upd_visible_all(session, upd) : !__wt_txn_upd_visible(session, upd)) { - if (F_ISSET(r, WT_REC_EVICT)) - ++r->updates_unstable; - /* * Rare case: when applications run at low isolation * levels, update/restore eviction may see a stable @@ -1473,14 +1441,12 @@ check_original_value: /* * Returning an update means the original on-page value might be lost, * and that's a problem if there's a reader that needs it. There are - * three cases: any update from a modify operation (because the modify - * has to be applied to a stable update, not the new on-page update), - * any lookaside table eviction (because the backing disk image is - * rewritten), or any reconciliation of a backing overflow record that - * will be physically removed once it's no longer needed. - */ - if (*updp != NULL && ((*updp)->type == WT_UPDATE_MODIFIED || - F_ISSET(r, WT_REC_LOOKASIDE) || (vpack != NULL && + * two cases: any lookaside table eviction (because the backing disk + * image is rewritten), or any reconciliation of a backing overflow + * record that will be physically removed once it's no longer needed. + */ + if (*updp != NULL && (F_ISSET(r, WT_REC_LOOKASIDE) || + (vpack != NULL && vpack->ovfl && vpack->raw != WT_CELL_VALUE_OVFL_RM))) WT_RET( __rec_append_orig_value(session, page, first_upd, vpack)); @@ -3335,12 +3301,6 @@ __rec_split_write_supd(WT_SESSION_IMPL *session, r->supd_next = j; } - /* Track the oldest timestamp seen so far. */ -#ifdef HAVE_TIMESTAMPS - multi->las_max_txn = r->max_txn; - __wt_timestamp_set(&multi->las_min_timestamp, &r->min_saved_timestamp); -#endif - err: __wt_scr_free(session, &key); return (ret); } @@ -5910,7 +5870,6 @@ __rec_write_wrapup(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_PAGE *page) mod->mod_disk_image = r->multi->disk_image; r->multi->disk_image = NULL; mod->mod_replace_las_pageid = r->multi->las_pageid; - mod->mod_replace_las_max_txn = r->max_txn; #ifdef HAVE_TIMESTAMPS __wt_timestamp_set(&mod->mod_replace_las_min_timestamp, &r->min_saved_timestamp); diff --git a/src/support/stat.c b/src/support/stat.c index 924afaa21d6..57dcd33c7f1 100644 --- a/src/support/stat.c +++ b/src/support/stat.c @@ -809,7 +809,6 @@ static const char * const __stats_connection_desc[] = { "cache: internal pages evicted", "cache: internal pages split during eviction", "cache: leaf pages split during eviction", - "cache: lookaside score", "cache: lookaside table entries", "cache: lookaside table insert calls", "cache: lookaside table remove calls", @@ -1140,7 +1139,6 @@ __wt_stat_connection_clear_single(WT_CONNECTION_STATS *stats) stats->cache_eviction_internal = 0; stats->cache_eviction_split_internal = 0; stats->cache_eviction_split_leaf = 0; - /* not clearing cache_lookaside_score */ /* not clearing cache_lookaside_entries */ stats->cache_lookaside_insert = 0; stats->cache_lookaside_remove = 0; @@ -1492,8 +1490,6 @@ __wt_stat_connection_aggregate( WT_STAT_READ(from, cache_eviction_split_internal); to->cache_eviction_split_leaf += WT_STAT_READ(from, cache_eviction_split_leaf); - to->cache_lookaside_score += - WT_STAT_READ(from, cache_lookaside_score); to->cache_lookaside_entries += WT_STAT_READ(from, cache_lookaside_entries); to->cache_lookaside_insert += |