diff options
author | Luke Chen <luke.chen@mongodb.com> | 2021-09-15 19:33:33 +1000 |
---|---|---|
committer | Luke Chen <luke.chen@mongodb.com> | 2021-09-15 19:33:33 +1000 |
commit | 253746c54d5aed69cf5ffbf616178a638230a426 (patch) | |
tree | 9851044e428863a8919d23c2ed4d9f0f85ff16c7 | |
parent | b20afc2d424ac2548d1a6c9eae979fba2cb42733 (diff) | |
download | mongo-253746c54d5aed69cf5ffbf616178a638230a426.tar.gz |
Import wiredtiger: 5c22078378a3ba78c86ea9c88c555d87128a7373 from branch mongodb-5.0r5.0.3-rc1
ref: 1acbb32edf..5c22078378
for: 5.0.3
WT-7853 Validate the update chain before we attempt to insert it into the history store
WT-7973 Skip deleting updates in the history store if all the records in the history store are obsolete
WT-8045 Align eviction behaviour for handling of out of order timestamps
-rw-r--r-- | src/third_party/wiredtiger/dist/s_string.ok | 1 | ||||
-rw-r--r-- | src/third_party/wiredtiger/dist/stat_data.py | 4 | ||||
-rw-r--r-- | src/third_party/wiredtiger/import.data | 2 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/history/hs_rec.c | 83 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/include/extern.h | 2 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/include/stat.h | 8 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/include/wiredtiger.in | 1262 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/reconcile/rec_col.c | 12 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/reconcile/rec_row.c | 11 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/reconcile/rec_visibility.c | 175 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/support/stat.c | 48 | ||||
-rw-r--r-- | src/third_party/wiredtiger/test/suite/test_hs24.py | 19 | ||||
-rw-r--r-- | src/third_party/wiredtiger/test/suite/test_hs_evict_race01.py | 109 |
13 files changed, 1051 insertions, 685 deletions
diff --git a/src/third_party/wiredtiger/dist/s_string.ok b/src/third_party/wiredtiger/dist/s_string.ok index 7ed2f3b6473..4de70302311 100644 --- a/src/third_party/wiredtiger/dist/s_string.ok +++ b/src/third_party/wiredtiger/dist/s_string.ok @@ -103,6 +103,7 @@ DIRECTIO DNE DOI DONTNEED +DS DSK DUPLICATEV DataSet diff --git a/src/third_party/wiredtiger/dist/stat_data.py b/src/third_party/wiredtiger/dist/stat_data.py index 05efc9107ca..b26301b26bb 100644 --- a/src/third_party/wiredtiger/dist/stat_data.py +++ b/src/third_party/wiredtiger/dist/stat_data.py @@ -762,6 +762,10 @@ conn_dsrc_stats = [ CacheStat('cache_bytes_write', 'bytes written from cache', 'size'), CacheStat('cache_eviction_checkpoint', 'checkpoint blocked page eviction'), CacheStat('cache_eviction_blocked_checkpoint_hs', 'checkpoint of history store file blocked non-history store page eviction'), + CacheStat('cache_eviction_blocked_ooo_checkpoint_race_1', 'eviction gave up due to detecting an out of order on disk value behind the last update on the chain'), + CacheStat('cache_eviction_blocked_ooo_checkpoint_race_2', 'eviction gave up due to detecting an out of order tombstone ahead of the selected on disk update'), + CacheStat('cache_eviction_blocked_ooo_checkpoint_race_3', 'eviction gave up due to detecting an out of order tombstone ahead of the selected on disk update after validating the update chain'), + CacheStat('cache_eviction_blocked_ooo_checkpoint_race_4', 'eviction gave up due to detecting out of order timestamps on the update chain after the selected on disk update'), 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'), diff --git a/src/third_party/wiredtiger/import.data b/src/third_party/wiredtiger/import.data index f3611add433..5724efd8ccb 100644 --- a/src/third_party/wiredtiger/import.data +++ b/src/third_party/wiredtiger/import.data @@ -2,5 +2,5 @@ "vendor": "wiredtiger", "github": "wiredtiger/wiredtiger.git", "branch": "mongodb-5.0", - "commit": "1acbb32edf1cdecd61717d77b87a5072f47fd90b" + "commit": "5c22078378a3ba78c86ea9c88c555d87128a7373" } diff --git a/src/third_party/wiredtiger/src/history/hs_rec.c b/src/third_party/wiredtiger/src/history/hs_rec.c index 1f927309f94..777c2a74863 100644 --- a/src/third_party/wiredtiger/src/history/hs_rec.c +++ b/src/third_party/wiredtiger/src/history/hs_rec.c @@ -9,7 +9,8 @@ #include "wt_internal.h" static int __hs_delete_reinsert_from_pos(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, - uint32_t btree_id, const WT_ITEM *key, wt_timestamp_t ts, bool reinsert, uint64_t *hs_counter); + uint32_t btree_id, const WT_ITEM *key, wt_timestamp_t ts, bool reinsert, bool error_on_ooo_ts, + uint64_t *hs_counter); /* * __hs_verbose_cache_stats -- @@ -63,7 +64,7 @@ __hs_verbose_cache_stats(WT_SESSION_IMPL *session, WT_BTREE *btree) */ static int __hs_insert_record(WT_SESSION_IMPL *session, WT_CURSOR *cursor, WT_BTREE *btree, const WT_ITEM *key, - const uint8_t type, const WT_ITEM *hs_value, WT_TIME_WINDOW *tw, bool checkpoint_running) + const uint8_t type, const WT_ITEM *hs_value, WT_TIME_WINDOW *tw, bool error_on_ooo_ts) { #ifdef HAVE_DIAGNOSTIC WT_CURSOR_BTREE *hs_cbt; @@ -137,10 +138,6 @@ __hs_insert_record(WT_SESSION_IMPL *session, WT_CURSOR *cursor, WT_BTREE *btree, cursor->set_key(cursor, 4, btree->id, key, tw->start_ts, UINT64_MAX); WT_ERR_NOTFOUND_OK(__wt_curhs_search_near_before(session, cursor), true); - /* Only clear the flag if it wasn't set when we entered the function. */ - if (!hs_read_all_flag) - F_CLR(cursor, WT_CURSTD_HS_READ_ALL); - if (ret == 0) { WT_ERR(cursor->get_key(cursor, &hs_btree_id, hs_key, &hs_start_ts, &hs_counter)); @@ -189,28 +186,12 @@ __hs_insert_record(WT_SESSION_IMPL *session, WT_CURSOR *cursor, WT_BTREE *btree, if (ret == 0) WT_ERR_NOTFOUND_OK(cursor->next(cursor), true); else { - F_SET(cursor, WT_CURSTD_HS_READ_ALL); - cursor->set_key(cursor, 3, btree->id, key, tw->start_ts + 1); WT_ERR_NOTFOUND_OK(__wt_curhs_search_near_after(session, cursor), true); - - if (!hs_read_all_flag) - F_CLR(cursor, WT_CURSTD_HS_READ_ALL); } - if (ret == 0) { - /* - * Fail the eviction if we detect out of order timestamp when checkpoint is running. We - * cannot modify the history store to fix the out of order timestamp updates as it may make - * the history store checkpoint inconsistent. - */ - if (checkpoint_running) { - ret = EBUSY; - WT_STAT_CONN_INCR(session, cache_eviction_fail_checkpoint_out_of_order_ts); - goto err; - } + if (ret == 0) WT_ERR(__hs_delete_reinsert_from_pos( - session, cursor, btree->id, key, tw->start_ts + 1, true, &counter)); - } + session, cursor, btree->id, key, tw->start_ts + 1, true, error_on_ooo_ts, &counter)); #ifdef HAVE_DIAGNOSTIC /* @@ -312,9 +293,9 @@ __wt_hs_insert_updates(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_MULTI *mult uint32_t i; uint8_t *p; int nentries; - bool checkpoint_running, enable_reverse_modify, hs_inserted, squashed; + bool enable_reverse_modify, error_on_ooo_ts, hs_inserted, squashed; - checkpoint_running = F_ISSET(r, WT_REC_CHECKPOINT_RUNNING); + error_on_ooo_ts = F_ISSET(r, WT_REC_CHECKPOINT_RUNNING); r->cache_write_hs = false; btree = S2BT(session); prev_upd = NULL; @@ -434,11 +415,11 @@ __wt_hs_insert_updates(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_MULTI *mult if (min_ts_upd != NULL && min_ts_upd->start_ts < upd->start_ts && out_of_order_ts_upd != min_ts_upd) { /* - * Fail the eviction if we detect out of order timestamp when checkpoint is running. + * Fail the eviction if we detect out of order timestamps and the error flag is set. * We cannot modify the history store to fix the out of order timestamp updates as * it may make the history store checkpoint inconsistent. */ - if (checkpoint_running) { + if (error_on_ooo_ts) { ret = EBUSY; WT_STAT_CONN_INCR(session, cache_eviction_fail_checkpoint_out_of_order_ts); goto err; @@ -513,7 +494,7 @@ __wt_hs_insert_updates(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_MULTI *mult if (!F_ISSET(fix_ts_upd, WT_UPDATE_FIXED_HS)) { /* Delete and reinsert any update of the key with a higher timestamp. */ WT_ERR(__wt_hs_delete_key_from_ts(session, hs_cursor, btree->id, key, - fix_ts_upd->start_ts + 1, true, checkpoint_running)); + fix_ts_upd->start_ts + 1, true, error_on_ooo_ts)); F_SET(fix_ts_upd, WT_UPDATE_FIXED_HS); } } @@ -670,13 +651,13 @@ __wt_hs_insert_updates(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_MULTI *mult entries, &nentries) == 0) { WT_ERR(__wt_modify_pack(hs_cursor, entries, nentries, &modify_value)); ret = __hs_insert_record(session, hs_cursor, btree, key, WT_UPDATE_MODIFY, - modify_value, &tw, checkpoint_running); + modify_value, &tw, error_on_ooo_ts); __wt_scr_free(session, &modify_value); ++modify_cnt; } else { modify_cnt = 0; ret = __hs_insert_record(session, hs_cursor, btree, key, WT_UPDATE_STANDARD, - full_value, &tw, checkpoint_running); + full_value, &tw, error_on_ooo_ts); } /* @@ -763,7 +744,7 @@ err: */ int __wt_hs_delete_key_from_ts(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, uint32_t btree_id, - const WT_ITEM *key, wt_timestamp_t ts, bool reinsert, bool checkpoint_running) + const WT_ITEM *key, wt_timestamp_t ts, bool reinsert, bool error_on_ooo_ts) { WT_DECL_RET; WT_ITEM hs_key; @@ -781,6 +762,10 @@ __wt_hs_delete_key_from_ts(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, uint3 hs_read_all_flag = F_ISSET(hs_cursor, WT_CURSTD_HS_READ_ALL); hs_cursor->set_key(hs_cursor, 3, btree_id, key, ts); + /* + * Setting the flag WT_CURSTD_HS_READ_ALL before searching the history store optimizes the + * search routine as we do not skip globally visible tombstones during the search. + */ F_SET(hs_cursor, WT_CURSTD_HS_READ_ALL); WT_ERR_NOTFOUND_OK(__wt_curhs_search_near_after(session, hs_cursor), true); /* Empty history store is fine. */ @@ -792,19 +777,9 @@ __wt_hs_delete_key_from_ts(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, uint3 ++hs_counter; } - /* - * Fail the eviction if we detect out of order timestamp when checkpoint is running. We cannot - * modify the history store to fix the out of order timestamp updates as it may make the history - * store checkpoint inconsistent. - */ - if (checkpoint_running) { - ret = EBUSY; - WT_STAT_CONN_INCR(session, cache_eviction_fail_checkpoint_out_of_order_ts); - goto err; - } + WT_ERR(__hs_delete_reinsert_from_pos( + session, hs_cursor, btree_id, key, ts, reinsert, error_on_ooo_ts, &hs_counter)); - WT_ERR( - __hs_delete_reinsert_from_pos(session, hs_cursor, btree_id, key, ts, reinsert, &hs_counter)); done: err: if (!hs_read_all_flag) @@ -821,13 +796,13 @@ err: */ static int __hs_delete_reinsert_from_pos(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, uint32_t btree_id, - const WT_ITEM *key, wt_timestamp_t ts, bool reinsert, uint64_t *counter) + const WT_ITEM *key, wt_timestamp_t ts, bool reinsert, bool error_on_ooo_ts, uint64_t *counter) { WT_CURSOR *hs_insert_cursor; WT_CURSOR_BTREE *hs_cbt; WT_DECL_RET; WT_ITEM hs_key, hs_value; - WT_TIME_WINDOW tw, hs_insert_tw; + WT_TIME_WINDOW hs_insert_tw, tw, *twp; wt_timestamp_t hs_ts; uint64_t hs_counter, hs_upd_type; uint32_t hs_btree_id; @@ -850,6 +825,11 @@ __hs_delete_reinsert_from_pos(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, ui WT_ASSERT(session, ts > WT_TS_NONE || !reinsert); for (; ret == 0; ret = hs_cursor->next(hs_cursor)) { + /* Ignore records that are obsolete. */ + __wt_hs_upd_time_window(hs_cursor, &twp); + if (__wt_txn_tw_stop_visible_all(session, twp)) + continue; + /* We shouldn't have crossed the btree and user key search space. */ WT_ERR(hs_cursor->get_key(hs_cursor, &hs_btree_id, &hs_key, &hs_ts, &hs_counter)); WT_ASSERT(session, hs_btree_id == btree_id); @@ -866,6 +846,17 @@ __hs_delete_reinsert_from_pos(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, ui WT_ERR(ret); /* + * Fail the eviction if we detect out of order timestamps when we've passed the error return + * flag. We cannot modify the history store to fix the out of order timestamp updates as it may + * make the history store checkpoint inconsistent. + */ + if (error_on_ooo_ts) { + ret = EBUSY; + WT_STAT_CONN_INCR(session, cache_eviction_fail_checkpoint_out_of_order_ts); + goto err; + } + + /* * The goal of this function is to move out-of-order content to maintain ordering in the * history store. We do this by removing content with higher timestamps and reinserting it * behind (from search's point of view) the newly inserted update. Even though these updates diff --git a/src/third_party/wiredtiger/src/include/extern.h b/src/third_party/wiredtiger/src/include/extern.h index 601eff81c29..de46a4347be 100644 --- a/src/third_party/wiredtiger/src/include/extern.h +++ b/src/third_party/wiredtiger/src/include/extern.h @@ -778,7 +778,7 @@ extern int __wt_hex_to_raw(WT_SESSION_IMPL *session, const char *from, WT_ITEM * extern int __wt_hs_config(WT_SESSION_IMPL *session, const char **cfg) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result)); extern int __wt_hs_delete_key_from_ts(WT_SESSION_IMPL *session, WT_CURSOR *hs_cursor, - uint32_t btree_id, const WT_ITEM *key, wt_timestamp_t ts, bool reinsert, bool checkpoint_running) + uint32_t btree_id, const WT_ITEM *key, wt_timestamp_t ts, bool reinsert, bool error_on_ooo_ts) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result)); extern int __wt_hs_find_upd(WT_SESSION_IMPL *session, uint32_t btree_id, WT_ITEM *key, const char *value_format, uint64_t recno, WT_UPDATE_VALUE *upd_value, WT_ITEM *base_value_buf) diff --git a/src/third_party/wiredtiger/src/include/stat.h b/src/third_party/wiredtiger/src/include/stat.h index 4b6b9cec111..fa97bd881c9 100644 --- a/src/third_party/wiredtiger/src/include/stat.h +++ b/src/third_party/wiredtiger/src/include/stat.h @@ -357,6 +357,10 @@ struct __wt_connection_stats { int64_t cache_eviction_get_ref_empty2; int64_t cache_eviction_aggressive_set; int64_t cache_eviction_empty_score; + int64_t cache_eviction_blocked_ooo_checkpoint_race_1; + int64_t cache_eviction_blocked_ooo_checkpoint_race_2; + int64_t cache_eviction_blocked_ooo_checkpoint_race_3; + int64_t cache_eviction_blocked_ooo_checkpoint_race_4; int64_t cache_eviction_walk_passes; int64_t cache_eviction_queue_empty; int64_t cache_eviction_queue_not_empty; @@ -855,6 +859,10 @@ struct __wt_dsrc_stats { int64_t cache_eviction_checkpoint; int64_t cache_eviction_blocked_checkpoint_hs; int64_t cache_eviction_fail; + int64_t cache_eviction_blocked_ooo_checkpoint_race_1; + int64_t cache_eviction_blocked_ooo_checkpoint_race_2; + int64_t cache_eviction_blocked_ooo_checkpoint_race_3; + int64_t cache_eviction_blocked_ooo_checkpoint_race_4; int64_t cache_eviction_walk_passes; int64_t cache_eviction_target_page_lt10; int64_t cache_eviction_target_page_lt32; diff --git a/src/third_party/wiredtiger/src/include/wiredtiger.in b/src/third_party/wiredtiger/src/include/wiredtiger.in index 5b12a73e017..f35b643db2b 100644 --- a/src/third_party/wiredtiger/src/include/wiredtiger.in +++ b/src/third_party/wiredtiger/src/include/wiredtiger.in @@ -5080,1085 +5080,1105 @@ extern int wiredtiger_extension_terminate(WT_CONNECTION *connection); #define WT_STAT_CONN_CACHE_EVICTION_AGGRESSIVE_SET 1042 /*! cache: eviction empty score */ #define WT_STAT_CONN_CACHE_EVICTION_EMPTY_SCORE 1043 +/*! + * cache: eviction gave up due to detecting an out of order on disk value + * behind the last update on the chain + */ +#define WT_STAT_CONN_CACHE_EVICTION_BLOCKED_OOO_CHECKPOINT_RACE_1 1044 +/*! + * cache: eviction gave up due to detecting an out of order tombstone + * ahead of the selected on disk update + */ +#define WT_STAT_CONN_CACHE_EVICTION_BLOCKED_OOO_CHECKPOINT_RACE_2 1045 +/*! + * cache: eviction gave up due to detecting an out of order tombstone + * ahead of the selected on disk update after validating the update chain + */ +#define WT_STAT_CONN_CACHE_EVICTION_BLOCKED_OOO_CHECKPOINT_RACE_3 1046 +/*! + * cache: eviction gave up due to detecting out of order timestamps on + * the update chain after the selected on disk update + */ +#define WT_STAT_CONN_CACHE_EVICTION_BLOCKED_OOO_CHECKPOINT_RACE_4 1047 /*! cache: eviction passes of a file */ -#define WT_STAT_CONN_CACHE_EVICTION_WALK_PASSES 1044 +#define WT_STAT_CONN_CACHE_EVICTION_WALK_PASSES 1048 /*! cache: eviction server candidate queue empty when topping up */ -#define WT_STAT_CONN_CACHE_EVICTION_QUEUE_EMPTY 1045 +#define WT_STAT_CONN_CACHE_EVICTION_QUEUE_EMPTY 1049 /*! cache: eviction server candidate queue not empty when topping up */ -#define WT_STAT_CONN_CACHE_EVICTION_QUEUE_NOT_EMPTY 1046 +#define WT_STAT_CONN_CACHE_EVICTION_QUEUE_NOT_EMPTY 1050 /*! cache: eviction server evicting pages */ -#define WT_STAT_CONN_CACHE_EVICTION_SERVER_EVICTING 1047 +#define WT_STAT_CONN_CACHE_EVICTION_SERVER_EVICTING 1051 /*! * cache: eviction server slept, because we did not make progress with * eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_SERVER_SLEPT 1048 +#define WT_STAT_CONN_CACHE_EVICTION_SERVER_SLEPT 1052 /*! cache: eviction server unable to reach eviction goal */ -#define WT_STAT_CONN_CACHE_EVICTION_SLOW 1049 +#define WT_STAT_CONN_CACHE_EVICTION_SLOW 1053 /*! cache: eviction server waiting for a leaf page */ -#define WT_STAT_CONN_CACHE_EVICTION_WALK_LEAF_NOTFOUND 1050 +#define WT_STAT_CONN_CACHE_EVICTION_WALK_LEAF_NOTFOUND 1054 /*! cache: eviction state */ -#define WT_STAT_CONN_CACHE_EVICTION_STATE 1051 +#define WT_STAT_CONN_CACHE_EVICTION_STATE 1055 /*! cache: eviction walk target pages histogram - 0-9 */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT10 1052 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT10 1056 /*! cache: eviction walk target pages histogram - 10-31 */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT32 1053 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT32 1057 /*! cache: eviction walk target pages histogram - 128 and higher */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_GE128 1054 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_GE128 1058 /*! cache: eviction walk target pages histogram - 32-63 */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT64 1055 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT64 1059 /*! cache: eviction walk target pages histogram - 64-128 */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT128 1056 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_LT128 1060 /*! * cache: eviction walk target pages reduced due to history store cache * pressure */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_REDUCED 1057 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_PAGE_REDUCED 1061 /*! cache: eviction walk target strategy both clean and dirty pages */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_BOTH_CLEAN_AND_DIRTY 1058 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_BOTH_CLEAN_AND_DIRTY 1062 /*! cache: eviction walk target strategy only clean pages */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_CLEAN 1059 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_CLEAN 1063 /*! cache: eviction walk target strategy only dirty pages */ -#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_DIRTY 1060 +#define WT_STAT_CONN_CACHE_EVICTION_TARGET_STRATEGY_DIRTY 1064 /*! cache: eviction walks abandoned */ -#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ABANDONED 1061 +#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ABANDONED 1065 /*! cache: eviction walks gave up because they restarted their walk twice */ -#define WT_STAT_CONN_CACHE_EVICTION_WALKS_STOPPED 1062 +#define WT_STAT_CONN_CACHE_EVICTION_WALKS_STOPPED 1066 /*! * cache: eviction walks gave up because they saw too many pages and * found no candidates */ -#define WT_STAT_CONN_CACHE_EVICTION_WALKS_GAVE_UP_NO_TARGETS 1063 +#define WT_STAT_CONN_CACHE_EVICTION_WALKS_GAVE_UP_NO_TARGETS 1067 /*! * cache: eviction walks gave up because they saw too many pages and * found too few candidates */ -#define WT_STAT_CONN_CACHE_EVICTION_WALKS_GAVE_UP_RATIO 1064 +#define WT_STAT_CONN_CACHE_EVICTION_WALKS_GAVE_UP_RATIO 1068 /*! cache: eviction walks reached end of tree */ -#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ENDED 1065 +#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ENDED 1069 /*! cache: eviction walks restarted */ -#define WT_STAT_CONN_CACHE_EVICTION_WALK_RESTART 1066 +#define WT_STAT_CONN_CACHE_EVICTION_WALK_RESTART 1070 /*! cache: eviction walks started from root of tree */ -#define WT_STAT_CONN_CACHE_EVICTION_WALK_FROM_ROOT 1067 +#define WT_STAT_CONN_CACHE_EVICTION_WALK_FROM_ROOT 1071 /*! cache: eviction walks started from saved location in tree */ -#define WT_STAT_CONN_CACHE_EVICTION_WALK_SAVED_POS 1068 +#define WT_STAT_CONN_CACHE_EVICTION_WALK_SAVED_POS 1072 /*! cache: eviction worker thread active */ -#define WT_STAT_CONN_CACHE_EVICTION_ACTIVE_WORKERS 1069 +#define WT_STAT_CONN_CACHE_EVICTION_ACTIVE_WORKERS 1073 /*! cache: eviction worker thread created */ -#define WT_STAT_CONN_CACHE_EVICTION_WORKER_CREATED 1070 +#define WT_STAT_CONN_CACHE_EVICTION_WORKER_CREATED 1074 /*! cache: eviction worker thread evicting pages */ -#define WT_STAT_CONN_CACHE_EVICTION_WORKER_EVICTING 1071 +#define WT_STAT_CONN_CACHE_EVICTION_WORKER_EVICTING 1075 /*! cache: eviction worker thread removed */ -#define WT_STAT_CONN_CACHE_EVICTION_WORKER_REMOVED 1072 +#define WT_STAT_CONN_CACHE_EVICTION_WORKER_REMOVED 1076 /*! cache: eviction worker thread stable number */ -#define WT_STAT_CONN_CACHE_EVICTION_STABLE_STATE_WORKERS 1073 +#define WT_STAT_CONN_CACHE_EVICTION_STABLE_STATE_WORKERS 1077 /*! cache: files with active eviction walks */ -#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ACTIVE 1074 +#define WT_STAT_CONN_CACHE_EVICTION_WALKS_ACTIVE 1078 /*! cache: files with new eviction walks started */ -#define WT_STAT_CONN_CACHE_EVICTION_WALKS_STARTED 1075 +#define WT_STAT_CONN_CACHE_EVICTION_WALKS_STARTED 1079 /*! cache: force re-tuning of eviction workers once in a while */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_RETUNE 1076 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_RETUNE 1080 /*! * cache: forced eviction - history store pages failed to evict while * session has history store cursor open */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS_FAIL 1077 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS_FAIL 1081 /*! * cache: forced eviction - history store pages selected while session * has history store cursor open */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS 1078 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS 1082 /*! * cache: forced eviction - history store pages successfully evicted * while session has history store cursor open */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS_SUCCESS 1079 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_HS_SUCCESS 1083 /*! cache: forced eviction - pages evicted that were clean count */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_CLEAN 1080 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_CLEAN 1084 /*! cache: forced eviction - pages evicted that were clean time (usecs) */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_CLEAN_TIME 1081 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_CLEAN_TIME 1085 /*! cache: forced eviction - pages evicted that were dirty count */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DIRTY 1082 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DIRTY 1086 /*! cache: forced eviction - pages evicted that were dirty time (usecs) */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DIRTY_TIME 1083 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DIRTY_TIME 1087 /*! * cache: forced eviction - pages selected because of a large number of * updates to a single item */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_LONG_UPDATE_LIST 1084 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_LONG_UPDATE_LIST 1088 /*! * cache: forced eviction - pages selected because of too many deleted * items count */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DELETE 1085 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_DELETE 1089 /*! cache: forced eviction - pages selected count */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE 1086 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE 1090 /*! cache: forced eviction - pages selected unable to be evicted count */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_FAIL 1087 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_FAIL 1091 /*! cache: forced eviction - pages selected unable to be evicted time */ -#define WT_STAT_CONN_CACHE_EVICTION_FORCE_FAIL_TIME 1088 +#define WT_STAT_CONN_CACHE_EVICTION_FORCE_FAIL_TIME 1092 /*! cache: hazard pointer blocked page eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_HAZARD 1089 +#define WT_STAT_CONN_CACHE_EVICTION_HAZARD 1093 /*! cache: hazard pointer check calls */ -#define WT_STAT_CONN_CACHE_HAZARD_CHECKS 1090 +#define WT_STAT_CONN_CACHE_HAZARD_CHECKS 1094 /*! cache: hazard pointer check entries walked */ -#define WT_STAT_CONN_CACHE_HAZARD_WALKS 1091 +#define WT_STAT_CONN_CACHE_HAZARD_WALKS 1095 /*! cache: hazard pointer maximum array length */ -#define WT_STAT_CONN_CACHE_HAZARD_MAX 1092 +#define WT_STAT_CONN_CACHE_HAZARD_MAX 1096 /*! cache: history store score */ -#define WT_STAT_CONN_CACHE_HS_SCORE 1093 +#define WT_STAT_CONN_CACHE_HS_SCORE 1097 /*! cache: history store table insert calls */ -#define WT_STAT_CONN_CACHE_HS_INSERT 1094 +#define WT_STAT_CONN_CACHE_HS_INSERT 1098 /*! cache: history store table insert calls that returned restart */ -#define WT_STAT_CONN_CACHE_HS_INSERT_RESTART 1095 +#define WT_STAT_CONN_CACHE_HS_INSERT_RESTART 1099 /*! cache: history store table max on-disk size */ -#define WT_STAT_CONN_CACHE_HS_ONDISK_MAX 1096 +#define WT_STAT_CONN_CACHE_HS_ONDISK_MAX 1100 /*! cache: history store table on-disk size */ -#define WT_STAT_CONN_CACHE_HS_ONDISK 1097 +#define WT_STAT_CONN_CACHE_HS_ONDISK 1101 /*! * cache: history store table out-of-order resolved updates that lose * their durable timestamp */ -#define WT_STAT_CONN_CACHE_HS_ORDER_LOSE_DURABLE_TIMESTAMP 1098 +#define WT_STAT_CONN_CACHE_HS_ORDER_LOSE_DURABLE_TIMESTAMP 1102 /*! * cache: history store table out-of-order updates that were fixed up by * reinserting with the fixed timestamp */ -#define WT_STAT_CONN_CACHE_HS_ORDER_REINSERT 1099 +#define WT_STAT_CONN_CACHE_HS_ORDER_REINSERT 1103 /*! cache: history store table reads */ -#define WT_STAT_CONN_CACHE_HS_READ 1100 +#define WT_STAT_CONN_CACHE_HS_READ 1104 /*! cache: history store table reads missed */ -#define WT_STAT_CONN_CACHE_HS_READ_MISS 1101 +#define WT_STAT_CONN_CACHE_HS_READ_MISS 1105 /*! cache: history store table reads requiring squashed modifies */ -#define WT_STAT_CONN_CACHE_HS_READ_SQUASH 1102 +#define WT_STAT_CONN_CACHE_HS_READ_SQUASH 1106 /*! * cache: history store table truncation by rollback to stable to remove * an unstable update */ -#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_RTS_UNSTABLE 1103 +#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_RTS_UNSTABLE 1107 /*! * cache: history store table truncation by rollback to stable to remove * an update */ -#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_RTS 1104 +#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_RTS 1108 /*! cache: history store table truncation to remove an update */ -#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE 1105 +#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE 1109 /*! * cache: history store table truncation to remove range of updates due * to key being removed from the data page during reconciliation */ -#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_ONPAGE_REMOVAL 1106 +#define WT_STAT_CONN_CACHE_HS_KEY_TRUNCATE_ONPAGE_REMOVAL 1110 /*! * cache: history store table truncation to remove range of updates due * to out-of-order timestamp update on data page */ -#define WT_STAT_CONN_CACHE_HS_ORDER_REMOVE 1107 +#define WT_STAT_CONN_CACHE_HS_ORDER_REMOVE 1111 /*! cache: history store table writes requiring squashed modifies */ -#define WT_STAT_CONN_CACHE_HS_WRITE_SQUASH 1108 +#define WT_STAT_CONN_CACHE_HS_WRITE_SQUASH 1112 /*! cache: in-memory page passed criteria to be split */ -#define WT_STAT_CONN_CACHE_INMEM_SPLITTABLE 1109 +#define WT_STAT_CONN_CACHE_INMEM_SPLITTABLE 1113 /*! cache: in-memory page splits */ -#define WT_STAT_CONN_CACHE_INMEM_SPLIT 1110 +#define WT_STAT_CONN_CACHE_INMEM_SPLIT 1114 /*! cache: internal pages evicted */ -#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL 1111 +#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL 1115 /*! cache: internal pages queued for eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_QUEUED 1112 +#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_QUEUED 1116 /*! cache: internal pages seen by eviction walk */ -#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_SEEN 1113 +#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_SEEN 1117 /*! cache: internal pages seen by eviction walk that are already queued */ -#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_ALREADY_QUEUED 1114 +#define WT_STAT_CONN_CACHE_EVICTION_INTERNAL_PAGES_ALREADY_QUEUED 1118 /*! cache: internal pages split during eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_INTERNAL 1115 +#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_INTERNAL 1119 /*! cache: leaf pages split during eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_LEAF 1116 +#define WT_STAT_CONN_CACHE_EVICTION_SPLIT_LEAF 1120 /*! cache: maximum bytes configured */ -#define WT_STAT_CONN_CACHE_BYTES_MAX 1117 +#define WT_STAT_CONN_CACHE_BYTES_MAX 1121 /*! cache: maximum page size at eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_MAXIMUM_PAGE_SIZE 1118 +#define WT_STAT_CONN_CACHE_EVICTION_MAXIMUM_PAGE_SIZE 1122 /*! cache: modified pages evicted */ -#define WT_STAT_CONN_CACHE_EVICTION_DIRTY 1119 +#define WT_STAT_CONN_CACHE_EVICTION_DIRTY 1123 /*! cache: modified pages evicted by application threads */ -#define WT_STAT_CONN_CACHE_EVICTION_APP_DIRTY 1120 +#define WT_STAT_CONN_CACHE_EVICTION_APP_DIRTY 1124 /*! cache: operations timed out waiting for space in cache */ -#define WT_STAT_CONN_CACHE_TIMED_OUT_OPS 1121 +#define WT_STAT_CONN_CACHE_TIMED_OUT_OPS 1125 /*! cache: overflow pages read into cache */ -#define WT_STAT_CONN_CACHE_READ_OVERFLOW 1122 +#define WT_STAT_CONN_CACHE_READ_OVERFLOW 1126 /*! cache: page split during eviction deepened the tree */ -#define WT_STAT_CONN_CACHE_EVICTION_DEEPEN 1123 +#define WT_STAT_CONN_CACHE_EVICTION_DEEPEN 1127 /*! cache: page written requiring history store records */ -#define WT_STAT_CONN_CACHE_WRITE_HS 1124 +#define WT_STAT_CONN_CACHE_WRITE_HS 1128 /*! cache: pages currently held in the cache */ -#define WT_STAT_CONN_CACHE_PAGES_INUSE 1125 +#define WT_STAT_CONN_CACHE_PAGES_INUSE 1129 /*! cache: pages evicted by application threads */ -#define WT_STAT_CONN_CACHE_EVICTION_APP 1126 +#define WT_STAT_CONN_CACHE_EVICTION_APP 1130 /*! cache: pages evicted in parallel with checkpoint */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_IN_PARALLEL_WITH_CHECKPOINT 1127 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_IN_PARALLEL_WITH_CHECKPOINT 1131 /*! cache: pages queued for eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED 1128 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED 1132 /*! cache: pages queued for eviction post lru sorting */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_POST_LRU 1129 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_POST_LRU 1133 /*! cache: pages queued for urgent eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_URGENT 1130 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_URGENT 1134 /*! cache: pages queued for urgent eviction during walk */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_OLDEST 1131 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_OLDEST 1135 /*! * cache: pages queued for urgent eviction from history store due to high * dirty content */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_URGENT_HS_DIRTY 1132 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_QUEUED_URGENT_HS_DIRTY 1136 /*! cache: pages read into cache */ -#define WT_STAT_CONN_CACHE_READ 1133 +#define WT_STAT_CONN_CACHE_READ 1137 /*! cache: pages read into cache after truncate */ -#define WT_STAT_CONN_CACHE_READ_DELETED 1134 +#define WT_STAT_CONN_CACHE_READ_DELETED 1138 /*! cache: pages read into cache after truncate in prepare state */ -#define WT_STAT_CONN_CACHE_READ_DELETED_PREPARED 1135 +#define WT_STAT_CONN_CACHE_READ_DELETED_PREPARED 1139 /*! cache: pages requested from the cache */ -#define WT_STAT_CONN_CACHE_PAGES_REQUESTED 1136 +#define WT_STAT_CONN_CACHE_PAGES_REQUESTED 1140 /*! cache: pages seen by eviction walk */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_SEEN 1137 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_SEEN 1141 /*! cache: pages seen by eviction walk that are already queued */ -#define WT_STAT_CONN_CACHE_EVICTION_PAGES_ALREADY_QUEUED 1138 +#define WT_STAT_CONN_CACHE_EVICTION_PAGES_ALREADY_QUEUED 1142 /*! cache: pages selected for eviction unable to be evicted */ -#define WT_STAT_CONN_CACHE_EVICTION_FAIL 1139 +#define WT_STAT_CONN_CACHE_EVICTION_FAIL 1143 /*! * cache: pages selected for eviction unable to be evicted as the parent * page has overflow items */ -#define WT_STAT_CONN_CACHE_EVICTION_FAIL_PARENT_HAS_OVERFLOW_ITEMS 1140 +#define WT_STAT_CONN_CACHE_EVICTION_FAIL_PARENT_HAS_OVERFLOW_ITEMS 1144 /*! * cache: pages selected for eviction unable to be evicted because of * active children on an internal page */ -#define WT_STAT_CONN_CACHE_EVICTION_FAIL_ACTIVE_CHILDREN_ON_AN_INTERNAL_PAGE 1141 +#define WT_STAT_CONN_CACHE_EVICTION_FAIL_ACTIVE_CHILDREN_ON_AN_INTERNAL_PAGE 1145 /*! * cache: pages selected for eviction unable to be evicted because of * failure in reconciliation */ -#define WT_STAT_CONN_CACHE_EVICTION_FAIL_IN_RECONCILIATION 1142 +#define WT_STAT_CONN_CACHE_EVICTION_FAIL_IN_RECONCILIATION 1146 /*! * cache: pages selected for eviction unable to be evicted because of * race between checkpoint and out of order timestamps handling */ -#define WT_STAT_CONN_CACHE_EVICTION_FAIL_CHECKPOINT_OUT_OF_ORDER_TS 1143 +#define WT_STAT_CONN_CACHE_EVICTION_FAIL_CHECKPOINT_OUT_OF_ORDER_TS 1147 /*! cache: pages walked for eviction */ -#define WT_STAT_CONN_CACHE_EVICTION_WALK 1144 +#define WT_STAT_CONN_CACHE_EVICTION_WALK 1148 /*! cache: pages written from cache */ -#define WT_STAT_CONN_CACHE_WRITE 1145 +#define WT_STAT_CONN_CACHE_WRITE 1149 /*! cache: pages written requiring in-memory restoration */ -#define WT_STAT_CONN_CACHE_WRITE_RESTORE 1146 +#define WT_STAT_CONN_CACHE_WRITE_RESTORE 1150 /*! cache: percentage overhead */ -#define WT_STAT_CONN_CACHE_OVERHEAD 1147 +#define WT_STAT_CONN_CACHE_OVERHEAD 1151 /*! cache: tracked bytes belonging to internal pages in the cache */ -#define WT_STAT_CONN_CACHE_BYTES_INTERNAL 1148 +#define WT_STAT_CONN_CACHE_BYTES_INTERNAL 1152 /*! cache: tracked bytes belonging to leaf pages in the cache */ -#define WT_STAT_CONN_CACHE_BYTES_LEAF 1149 +#define WT_STAT_CONN_CACHE_BYTES_LEAF 1153 /*! cache: tracked dirty bytes in the cache */ -#define WT_STAT_CONN_CACHE_BYTES_DIRTY 1150 +#define WT_STAT_CONN_CACHE_BYTES_DIRTY 1154 /*! cache: tracked dirty pages in the cache */ -#define WT_STAT_CONN_CACHE_PAGES_DIRTY 1151 +#define WT_STAT_CONN_CACHE_PAGES_DIRTY 1155 /*! cache: unmodified pages evicted */ -#define WT_STAT_CONN_CACHE_EVICTION_CLEAN 1152 +#define WT_STAT_CONN_CACHE_EVICTION_CLEAN 1156 /*! capacity: background fsync file handles considered */ -#define WT_STAT_CONN_FSYNC_ALL_FH_TOTAL 1153 +#define WT_STAT_CONN_FSYNC_ALL_FH_TOTAL 1157 /*! capacity: background fsync file handles synced */ -#define WT_STAT_CONN_FSYNC_ALL_FH 1154 +#define WT_STAT_CONN_FSYNC_ALL_FH 1158 /*! capacity: background fsync time (msecs) */ -#define WT_STAT_CONN_FSYNC_ALL_TIME 1155 +#define WT_STAT_CONN_FSYNC_ALL_TIME 1159 /*! capacity: bytes read */ -#define WT_STAT_CONN_CAPACITY_BYTES_READ 1156 +#define WT_STAT_CONN_CAPACITY_BYTES_READ 1160 /*! capacity: bytes written for checkpoint */ -#define WT_STAT_CONN_CAPACITY_BYTES_CKPT 1157 +#define WT_STAT_CONN_CAPACITY_BYTES_CKPT 1161 /*! capacity: bytes written for eviction */ -#define WT_STAT_CONN_CAPACITY_BYTES_EVICT 1158 +#define WT_STAT_CONN_CAPACITY_BYTES_EVICT 1162 /*! capacity: bytes written for log */ -#define WT_STAT_CONN_CAPACITY_BYTES_LOG 1159 +#define WT_STAT_CONN_CAPACITY_BYTES_LOG 1163 /*! capacity: bytes written total */ -#define WT_STAT_CONN_CAPACITY_BYTES_WRITTEN 1160 +#define WT_STAT_CONN_CAPACITY_BYTES_WRITTEN 1164 /*! capacity: threshold to call fsync */ -#define WT_STAT_CONN_CAPACITY_THRESHOLD 1161 +#define WT_STAT_CONN_CAPACITY_THRESHOLD 1165 /*! capacity: time waiting due to total capacity (usecs) */ -#define WT_STAT_CONN_CAPACITY_TIME_TOTAL 1162 +#define WT_STAT_CONN_CAPACITY_TIME_TOTAL 1166 /*! capacity: time waiting during checkpoint (usecs) */ -#define WT_STAT_CONN_CAPACITY_TIME_CKPT 1163 +#define WT_STAT_CONN_CAPACITY_TIME_CKPT 1167 /*! capacity: time waiting during eviction (usecs) */ -#define WT_STAT_CONN_CAPACITY_TIME_EVICT 1164 +#define WT_STAT_CONN_CAPACITY_TIME_EVICT 1168 /*! capacity: time waiting during logging (usecs) */ -#define WT_STAT_CONN_CAPACITY_TIME_LOG 1165 +#define WT_STAT_CONN_CAPACITY_TIME_LOG 1169 /*! capacity: time waiting during read (usecs) */ -#define WT_STAT_CONN_CAPACITY_TIME_READ 1166 +#define WT_STAT_CONN_CAPACITY_TIME_READ 1170 /*! checkpoint-cleanup: pages added for eviction */ -#define WT_STAT_CONN_CC_PAGES_EVICT 1167 +#define WT_STAT_CONN_CC_PAGES_EVICT 1171 /*! checkpoint-cleanup: pages removed */ -#define WT_STAT_CONN_CC_PAGES_REMOVED 1168 +#define WT_STAT_CONN_CC_PAGES_REMOVED 1172 /*! checkpoint-cleanup: pages skipped during tree walk */ -#define WT_STAT_CONN_CC_PAGES_WALK_SKIPPED 1169 +#define WT_STAT_CONN_CC_PAGES_WALK_SKIPPED 1173 /*! checkpoint-cleanup: pages visited */ -#define WT_STAT_CONN_CC_PAGES_VISITED 1170 +#define WT_STAT_CONN_CC_PAGES_VISITED 1174 /*! connection: auto adjusting condition resets */ -#define WT_STAT_CONN_COND_AUTO_WAIT_RESET 1171 +#define WT_STAT_CONN_COND_AUTO_WAIT_RESET 1175 /*! connection: auto adjusting condition wait calls */ -#define WT_STAT_CONN_COND_AUTO_WAIT 1172 +#define WT_STAT_CONN_COND_AUTO_WAIT 1176 /*! * connection: auto adjusting condition wait raced to update timeout and * skipped updating */ -#define WT_STAT_CONN_COND_AUTO_WAIT_SKIPPED 1173 +#define WT_STAT_CONN_COND_AUTO_WAIT_SKIPPED 1177 /*! connection: detected system time went backwards */ -#define WT_STAT_CONN_TIME_TRAVEL 1174 +#define WT_STAT_CONN_TIME_TRAVEL 1178 /*! connection: files currently open */ -#define WT_STAT_CONN_FILE_OPEN 1175 +#define WT_STAT_CONN_FILE_OPEN 1179 /*! connection: hash bucket array size for data handles */ -#define WT_STAT_CONN_BUCKETS_DH 1176 +#define WT_STAT_CONN_BUCKETS_DH 1180 /*! connection: hash bucket array size general */ -#define WT_STAT_CONN_BUCKETS 1177 +#define WT_STAT_CONN_BUCKETS 1181 /*! connection: memory allocations */ -#define WT_STAT_CONN_MEMORY_ALLOCATION 1178 +#define WT_STAT_CONN_MEMORY_ALLOCATION 1182 /*! connection: memory frees */ -#define WT_STAT_CONN_MEMORY_FREE 1179 +#define WT_STAT_CONN_MEMORY_FREE 1183 /*! connection: memory re-allocations */ -#define WT_STAT_CONN_MEMORY_GROW 1180 +#define WT_STAT_CONN_MEMORY_GROW 1184 /*! connection: pthread mutex condition wait calls */ -#define WT_STAT_CONN_COND_WAIT 1181 +#define WT_STAT_CONN_COND_WAIT 1185 /*! connection: pthread mutex shared lock read-lock calls */ -#define WT_STAT_CONN_RWLOCK_READ 1182 +#define WT_STAT_CONN_RWLOCK_READ 1186 /*! connection: pthread mutex shared lock write-lock calls */ -#define WT_STAT_CONN_RWLOCK_WRITE 1183 +#define WT_STAT_CONN_RWLOCK_WRITE 1187 /*! connection: total fsync I/Os */ -#define WT_STAT_CONN_FSYNC_IO 1184 +#define WT_STAT_CONN_FSYNC_IO 1188 /*! connection: total read I/Os */ -#define WT_STAT_CONN_READ_IO 1185 +#define WT_STAT_CONN_READ_IO 1189 /*! connection: total write I/Os */ -#define WT_STAT_CONN_WRITE_IO 1186 +#define WT_STAT_CONN_WRITE_IO 1190 /*! cursor: Total number of entries skipped by cursor next calls */ -#define WT_STAT_CONN_CURSOR_NEXT_SKIP_TOTAL 1187 +#define WT_STAT_CONN_CURSOR_NEXT_SKIP_TOTAL 1191 /*! cursor: Total number of entries skipped by cursor prev calls */ -#define WT_STAT_CONN_CURSOR_PREV_SKIP_TOTAL 1188 +#define WT_STAT_CONN_CURSOR_PREV_SKIP_TOTAL 1192 /*! * cursor: Total number of entries skipped to position the history store * cursor */ -#define WT_STAT_CONN_CURSOR_SKIP_HS_CUR_POSITION 1189 +#define WT_STAT_CONN_CURSOR_SKIP_HS_CUR_POSITION 1193 /*! * cursor: Total number of pages skipped without reading by cursor next * calls */ -#define WT_STAT_CONN_CURSOR_NEXT_SKIP_PAGE_COUNT 1190 +#define WT_STAT_CONN_CURSOR_NEXT_SKIP_PAGE_COUNT 1194 /*! * cursor: Total number of pages skipped without reading by cursor prev * calls */ -#define WT_STAT_CONN_CURSOR_PREV_SKIP_PAGE_COUNT 1191 +#define WT_STAT_CONN_CURSOR_PREV_SKIP_PAGE_COUNT 1195 /*! * cursor: Total number of times a search near has exited due to prefix * config */ -#define WT_STAT_CONN_CURSOR_SEARCH_NEAR_PREFIX_FAST_PATHS 1192 +#define WT_STAT_CONN_CURSOR_SEARCH_NEAR_PREFIX_FAST_PATHS 1196 /*! cursor: cached cursor count */ -#define WT_STAT_CONN_CURSOR_CACHED_COUNT 1193 +#define WT_STAT_CONN_CURSOR_CACHED_COUNT 1197 /*! cursor: cursor bulk loaded cursor insert calls */ -#define WT_STAT_CONN_CURSOR_INSERT_BULK 1194 +#define WT_STAT_CONN_CURSOR_INSERT_BULK 1198 /*! cursor: cursor close calls that result in cache */ -#define WT_STAT_CONN_CURSOR_CACHE 1195 +#define WT_STAT_CONN_CURSOR_CACHE 1199 /*! cursor: cursor create calls */ -#define WT_STAT_CONN_CURSOR_CREATE 1196 +#define WT_STAT_CONN_CURSOR_CREATE 1200 /*! cursor: cursor insert calls */ -#define WT_STAT_CONN_CURSOR_INSERT 1197 +#define WT_STAT_CONN_CURSOR_INSERT 1201 /*! cursor: cursor insert key and value bytes */ -#define WT_STAT_CONN_CURSOR_INSERT_BYTES 1198 +#define WT_STAT_CONN_CURSOR_INSERT_BYTES 1202 /*! cursor: cursor modify calls */ -#define WT_STAT_CONN_CURSOR_MODIFY 1199 +#define WT_STAT_CONN_CURSOR_MODIFY 1203 /*! cursor: cursor modify key and value bytes affected */ -#define WT_STAT_CONN_CURSOR_MODIFY_BYTES 1200 +#define WT_STAT_CONN_CURSOR_MODIFY_BYTES 1204 /*! cursor: cursor modify value bytes modified */ -#define WT_STAT_CONN_CURSOR_MODIFY_BYTES_TOUCH 1201 +#define WT_STAT_CONN_CURSOR_MODIFY_BYTES_TOUCH 1205 /*! cursor: cursor next calls */ -#define WT_STAT_CONN_CURSOR_NEXT 1202 +#define WT_STAT_CONN_CURSOR_NEXT 1206 /*! * cursor: cursor next calls that skip due to a globally visible history * store tombstone */ -#define WT_STAT_CONN_CURSOR_NEXT_HS_TOMBSTONE 1203 +#define WT_STAT_CONN_CURSOR_NEXT_HS_TOMBSTONE 1207 /*! * cursor: cursor next calls that skip greater than or equal to 100 * entries */ -#define WT_STAT_CONN_CURSOR_NEXT_SKIP_GE_100 1204 +#define WT_STAT_CONN_CURSOR_NEXT_SKIP_GE_100 1208 /*! cursor: cursor next calls that skip less than 100 entries */ -#define WT_STAT_CONN_CURSOR_NEXT_SKIP_LT_100 1205 +#define WT_STAT_CONN_CURSOR_NEXT_SKIP_LT_100 1209 /*! cursor: cursor operation restarted */ -#define WT_STAT_CONN_CURSOR_RESTART 1206 +#define WT_STAT_CONN_CURSOR_RESTART 1210 /*! cursor: cursor prev calls */ -#define WT_STAT_CONN_CURSOR_PREV 1207 +#define WT_STAT_CONN_CURSOR_PREV 1211 /*! * cursor: cursor prev calls that skip due to a globally visible history * store tombstone */ -#define WT_STAT_CONN_CURSOR_PREV_HS_TOMBSTONE 1208 +#define WT_STAT_CONN_CURSOR_PREV_HS_TOMBSTONE 1212 /*! * cursor: cursor prev calls that skip greater than or equal to 100 * entries */ -#define WT_STAT_CONN_CURSOR_PREV_SKIP_GE_100 1209 +#define WT_STAT_CONN_CURSOR_PREV_SKIP_GE_100 1213 /*! cursor: cursor prev calls that skip less than 100 entries */ -#define WT_STAT_CONN_CURSOR_PREV_SKIP_LT_100 1210 +#define WT_STAT_CONN_CURSOR_PREV_SKIP_LT_100 1214 /*! cursor: cursor remove calls */ -#define WT_STAT_CONN_CURSOR_REMOVE 1211 +#define WT_STAT_CONN_CURSOR_REMOVE 1215 /*! cursor: cursor remove key bytes removed */ -#define WT_STAT_CONN_CURSOR_REMOVE_BYTES 1212 +#define WT_STAT_CONN_CURSOR_REMOVE_BYTES 1216 /*! cursor: cursor reserve calls */ -#define WT_STAT_CONN_CURSOR_RESERVE 1213 +#define WT_STAT_CONN_CURSOR_RESERVE 1217 /*! cursor: cursor reset calls */ -#define WT_STAT_CONN_CURSOR_RESET 1214 +#define WT_STAT_CONN_CURSOR_RESET 1218 /*! cursor: cursor search calls */ -#define WT_STAT_CONN_CURSOR_SEARCH 1215 +#define WT_STAT_CONN_CURSOR_SEARCH 1219 /*! cursor: cursor search history store calls */ -#define WT_STAT_CONN_CURSOR_SEARCH_HS 1216 +#define WT_STAT_CONN_CURSOR_SEARCH_HS 1220 /*! cursor: cursor search near calls */ -#define WT_STAT_CONN_CURSOR_SEARCH_NEAR 1217 +#define WT_STAT_CONN_CURSOR_SEARCH_NEAR 1221 /*! cursor: cursor sweep buckets */ -#define WT_STAT_CONN_CURSOR_SWEEP_BUCKETS 1218 +#define WT_STAT_CONN_CURSOR_SWEEP_BUCKETS 1222 /*! cursor: cursor sweep cursors closed */ -#define WT_STAT_CONN_CURSOR_SWEEP_CLOSED 1219 +#define WT_STAT_CONN_CURSOR_SWEEP_CLOSED 1223 /*! cursor: cursor sweep cursors examined */ -#define WT_STAT_CONN_CURSOR_SWEEP_EXAMINED 1220 +#define WT_STAT_CONN_CURSOR_SWEEP_EXAMINED 1224 /*! cursor: cursor sweeps */ -#define WT_STAT_CONN_CURSOR_SWEEP 1221 +#define WT_STAT_CONN_CURSOR_SWEEP 1225 /*! cursor: cursor truncate calls */ -#define WT_STAT_CONN_CURSOR_TRUNCATE 1222 +#define WT_STAT_CONN_CURSOR_TRUNCATE 1226 /*! cursor: cursor update calls */ -#define WT_STAT_CONN_CURSOR_UPDATE 1223 +#define WT_STAT_CONN_CURSOR_UPDATE 1227 /*! cursor: cursor update key and value bytes */ -#define WT_STAT_CONN_CURSOR_UPDATE_BYTES 1224 +#define WT_STAT_CONN_CURSOR_UPDATE_BYTES 1228 /*! cursor: cursor update value size change */ -#define WT_STAT_CONN_CURSOR_UPDATE_BYTES_CHANGED 1225 +#define WT_STAT_CONN_CURSOR_UPDATE_BYTES_CHANGED 1229 /*! cursor: cursors reused from cache */ -#define WT_STAT_CONN_CURSOR_REOPEN 1226 +#define WT_STAT_CONN_CURSOR_REOPEN 1230 /*! cursor: open cursor count */ -#define WT_STAT_CONN_CURSOR_OPEN_COUNT 1227 +#define WT_STAT_CONN_CURSOR_OPEN_COUNT 1231 /*! data-handle: connection data handle size */ -#define WT_STAT_CONN_DH_CONN_HANDLE_SIZE 1228 +#define WT_STAT_CONN_DH_CONN_HANDLE_SIZE 1232 /*! data-handle: connection data handles currently active */ -#define WT_STAT_CONN_DH_CONN_HANDLE_COUNT 1229 +#define WT_STAT_CONN_DH_CONN_HANDLE_COUNT 1233 /*! data-handle: connection sweep candidate became referenced */ -#define WT_STAT_CONN_DH_SWEEP_REF 1230 +#define WT_STAT_CONN_DH_SWEEP_REF 1234 /*! data-handle: connection sweep dhandles closed */ -#define WT_STAT_CONN_DH_SWEEP_CLOSE 1231 +#define WT_STAT_CONN_DH_SWEEP_CLOSE 1235 /*! data-handle: connection sweep dhandles removed from hash list */ -#define WT_STAT_CONN_DH_SWEEP_REMOVE 1232 +#define WT_STAT_CONN_DH_SWEEP_REMOVE 1236 /*! data-handle: connection sweep time-of-death sets */ -#define WT_STAT_CONN_DH_SWEEP_TOD 1233 +#define WT_STAT_CONN_DH_SWEEP_TOD 1237 /*! data-handle: connection sweeps */ -#define WT_STAT_CONN_DH_SWEEPS 1234 +#define WT_STAT_CONN_DH_SWEEPS 1238 /*! * data-handle: connection sweeps skipped due to checkpoint gathering * handles */ -#define WT_STAT_CONN_DH_SWEEP_SKIP_CKPT 1235 +#define WT_STAT_CONN_DH_SWEEP_SKIP_CKPT 1239 /*! data-handle: session dhandles swept */ -#define WT_STAT_CONN_DH_SESSION_HANDLES 1236 +#define WT_STAT_CONN_DH_SESSION_HANDLES 1240 /*! data-handle: session sweep attempts */ -#define WT_STAT_CONN_DH_SESSION_SWEEPS 1237 +#define WT_STAT_CONN_DH_SESSION_SWEEPS 1241 /*! lock: checkpoint lock acquisitions */ -#define WT_STAT_CONN_LOCK_CHECKPOINT_COUNT 1238 +#define WT_STAT_CONN_LOCK_CHECKPOINT_COUNT 1242 /*! lock: checkpoint lock application thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_APPLICATION 1239 +#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_APPLICATION 1243 /*! lock: checkpoint lock internal thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_INTERNAL 1240 +#define WT_STAT_CONN_LOCK_CHECKPOINT_WAIT_INTERNAL 1244 /*! lock: dhandle lock application thread time waiting (usecs) */ -#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_APPLICATION 1241 +#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_APPLICATION 1245 /*! lock: dhandle lock internal thread time waiting (usecs) */ -#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_INTERNAL 1242 +#define WT_STAT_CONN_LOCK_DHANDLE_WAIT_INTERNAL 1246 /*! lock: dhandle read lock acquisitions */ -#define WT_STAT_CONN_LOCK_DHANDLE_READ_COUNT 1243 +#define WT_STAT_CONN_LOCK_DHANDLE_READ_COUNT 1247 /*! lock: dhandle write lock acquisitions */ -#define WT_STAT_CONN_LOCK_DHANDLE_WRITE_COUNT 1244 +#define WT_STAT_CONN_LOCK_DHANDLE_WRITE_COUNT 1248 /*! * lock: durable timestamp queue lock application thread time waiting * (usecs) */ -#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_APPLICATION 1245 +#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_APPLICATION 1249 /*! * lock: durable timestamp queue lock internal thread time waiting * (usecs) */ -#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_INTERNAL 1246 +#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WAIT_INTERNAL 1250 /*! lock: durable timestamp queue read lock acquisitions */ -#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_READ_COUNT 1247 +#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_READ_COUNT 1251 /*! lock: durable timestamp queue write lock acquisitions */ -#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WRITE_COUNT 1248 +#define WT_STAT_CONN_LOCK_DURABLE_TIMESTAMP_WRITE_COUNT 1252 /*! lock: metadata lock acquisitions */ -#define WT_STAT_CONN_LOCK_METADATA_COUNT 1249 +#define WT_STAT_CONN_LOCK_METADATA_COUNT 1253 /*! lock: metadata lock application thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_METADATA_WAIT_APPLICATION 1250 +#define WT_STAT_CONN_LOCK_METADATA_WAIT_APPLICATION 1254 /*! lock: metadata lock internal thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_METADATA_WAIT_INTERNAL 1251 +#define WT_STAT_CONN_LOCK_METADATA_WAIT_INTERNAL 1255 /*! * lock: read timestamp queue lock application thread time waiting * (usecs) */ -#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_APPLICATION 1252 +#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_APPLICATION 1256 /*! lock: read timestamp queue lock internal thread time waiting (usecs) */ -#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_INTERNAL 1253 +#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WAIT_INTERNAL 1257 /*! lock: read timestamp queue read lock acquisitions */ -#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_READ_COUNT 1254 +#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_READ_COUNT 1258 /*! lock: read timestamp queue write lock acquisitions */ -#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WRITE_COUNT 1255 +#define WT_STAT_CONN_LOCK_READ_TIMESTAMP_WRITE_COUNT 1259 /*! lock: schema lock acquisitions */ -#define WT_STAT_CONN_LOCK_SCHEMA_COUNT 1256 +#define WT_STAT_CONN_LOCK_SCHEMA_COUNT 1260 /*! lock: schema lock application thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_APPLICATION 1257 +#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_APPLICATION 1261 /*! lock: schema lock internal thread wait time (usecs) */ -#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_INTERNAL 1258 +#define WT_STAT_CONN_LOCK_SCHEMA_WAIT_INTERNAL 1262 /*! * lock: table lock application thread time waiting for the table lock * (usecs) */ -#define WT_STAT_CONN_LOCK_TABLE_WAIT_APPLICATION 1259 +#define WT_STAT_CONN_LOCK_TABLE_WAIT_APPLICATION 1263 /*! * lock: table lock internal thread time waiting for the table lock * (usecs) */ -#define WT_STAT_CONN_LOCK_TABLE_WAIT_INTERNAL 1260 +#define WT_STAT_CONN_LOCK_TABLE_WAIT_INTERNAL 1264 /*! lock: table read lock acquisitions */ -#define WT_STAT_CONN_LOCK_TABLE_READ_COUNT 1261 +#define WT_STAT_CONN_LOCK_TABLE_READ_COUNT 1265 /*! lock: table write lock acquisitions */ -#define WT_STAT_CONN_LOCK_TABLE_WRITE_COUNT 1262 +#define WT_STAT_CONN_LOCK_TABLE_WRITE_COUNT 1266 /*! lock: txn global lock application thread time waiting (usecs) */ -#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_APPLICATION 1263 +#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_APPLICATION 1267 /*! lock: txn global lock internal thread time waiting (usecs) */ -#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_INTERNAL 1264 +#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WAIT_INTERNAL 1268 /*! lock: txn global read lock acquisitions */ -#define WT_STAT_CONN_LOCK_TXN_GLOBAL_READ_COUNT 1265 +#define WT_STAT_CONN_LOCK_TXN_GLOBAL_READ_COUNT 1269 /*! lock: txn global write lock acquisitions */ -#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WRITE_COUNT 1266 +#define WT_STAT_CONN_LOCK_TXN_GLOBAL_WRITE_COUNT 1270 /*! log: busy returns attempting to switch slots */ -#define WT_STAT_CONN_LOG_SLOT_SWITCH_BUSY 1267 +#define WT_STAT_CONN_LOG_SLOT_SWITCH_BUSY 1271 /*! log: force archive time sleeping (usecs) */ -#define WT_STAT_CONN_LOG_FORCE_ARCHIVE_SLEEP 1268 +#define WT_STAT_CONN_LOG_FORCE_ARCHIVE_SLEEP 1272 /*! log: log bytes of payload data */ -#define WT_STAT_CONN_LOG_BYTES_PAYLOAD 1269 +#define WT_STAT_CONN_LOG_BYTES_PAYLOAD 1273 /*! log: log bytes written */ -#define WT_STAT_CONN_LOG_BYTES_WRITTEN 1270 +#define WT_STAT_CONN_LOG_BYTES_WRITTEN 1274 /*! log: log files manually zero-filled */ -#define WT_STAT_CONN_LOG_ZERO_FILLS 1271 +#define WT_STAT_CONN_LOG_ZERO_FILLS 1275 /*! log: log flush operations */ -#define WT_STAT_CONN_LOG_FLUSH 1272 +#define WT_STAT_CONN_LOG_FLUSH 1276 /*! log: log force write operations */ -#define WT_STAT_CONN_LOG_FORCE_WRITE 1273 +#define WT_STAT_CONN_LOG_FORCE_WRITE 1277 /*! log: log force write operations skipped */ -#define WT_STAT_CONN_LOG_FORCE_WRITE_SKIP 1274 +#define WT_STAT_CONN_LOG_FORCE_WRITE_SKIP 1278 /*! log: log records compressed */ -#define WT_STAT_CONN_LOG_COMPRESS_WRITES 1275 +#define WT_STAT_CONN_LOG_COMPRESS_WRITES 1279 /*! log: log records not compressed */ -#define WT_STAT_CONN_LOG_COMPRESS_WRITE_FAILS 1276 +#define WT_STAT_CONN_LOG_COMPRESS_WRITE_FAILS 1280 /*! log: log records too small to compress */ -#define WT_STAT_CONN_LOG_COMPRESS_SMALL 1277 +#define WT_STAT_CONN_LOG_COMPRESS_SMALL 1281 /*! log: log release advances write LSN */ -#define WT_STAT_CONN_LOG_RELEASE_WRITE_LSN 1278 +#define WT_STAT_CONN_LOG_RELEASE_WRITE_LSN 1282 /*! log: log scan operations */ -#define WT_STAT_CONN_LOG_SCANS 1279 +#define WT_STAT_CONN_LOG_SCANS 1283 /*! log: log scan records requiring two reads */ -#define WT_STAT_CONN_LOG_SCAN_REREADS 1280 +#define WT_STAT_CONN_LOG_SCAN_REREADS 1284 /*! log: log server thread advances write LSN */ -#define WT_STAT_CONN_LOG_WRITE_LSN 1281 +#define WT_STAT_CONN_LOG_WRITE_LSN 1285 /*! log: log server thread write LSN walk skipped */ -#define WT_STAT_CONN_LOG_WRITE_LSN_SKIP 1282 +#define WT_STAT_CONN_LOG_WRITE_LSN_SKIP 1286 /*! log: log sync operations */ -#define WT_STAT_CONN_LOG_SYNC 1283 +#define WT_STAT_CONN_LOG_SYNC 1287 /*! log: log sync time duration (usecs) */ -#define WT_STAT_CONN_LOG_SYNC_DURATION 1284 +#define WT_STAT_CONN_LOG_SYNC_DURATION 1288 /*! log: log sync_dir operations */ -#define WT_STAT_CONN_LOG_SYNC_DIR 1285 +#define WT_STAT_CONN_LOG_SYNC_DIR 1289 /*! log: log sync_dir time duration (usecs) */ -#define WT_STAT_CONN_LOG_SYNC_DIR_DURATION 1286 +#define WT_STAT_CONN_LOG_SYNC_DIR_DURATION 1290 /*! log: log write operations */ -#define WT_STAT_CONN_LOG_WRITES 1287 +#define WT_STAT_CONN_LOG_WRITES 1291 /*! log: logging bytes consolidated */ -#define WT_STAT_CONN_LOG_SLOT_CONSOLIDATED 1288 +#define WT_STAT_CONN_LOG_SLOT_CONSOLIDATED 1292 /*! log: maximum log file size */ -#define WT_STAT_CONN_LOG_MAX_FILESIZE 1289 +#define WT_STAT_CONN_LOG_MAX_FILESIZE 1293 /*! log: number of pre-allocated log files to create */ -#define WT_STAT_CONN_LOG_PREALLOC_MAX 1290 +#define WT_STAT_CONN_LOG_PREALLOC_MAX 1294 /*! log: pre-allocated log files not ready and missed */ -#define WT_STAT_CONN_LOG_PREALLOC_MISSED 1291 +#define WT_STAT_CONN_LOG_PREALLOC_MISSED 1295 /*! log: pre-allocated log files prepared */ -#define WT_STAT_CONN_LOG_PREALLOC_FILES 1292 +#define WT_STAT_CONN_LOG_PREALLOC_FILES 1296 /*! log: pre-allocated log files used */ -#define WT_STAT_CONN_LOG_PREALLOC_USED 1293 +#define WT_STAT_CONN_LOG_PREALLOC_USED 1297 /*! log: records processed by log scan */ -#define WT_STAT_CONN_LOG_SCAN_RECORDS 1294 +#define WT_STAT_CONN_LOG_SCAN_RECORDS 1298 /*! log: slot close lost race */ -#define WT_STAT_CONN_LOG_SLOT_CLOSE_RACE 1295 +#define WT_STAT_CONN_LOG_SLOT_CLOSE_RACE 1299 /*! log: slot close unbuffered waits */ -#define WT_STAT_CONN_LOG_SLOT_CLOSE_UNBUF 1296 +#define WT_STAT_CONN_LOG_SLOT_CLOSE_UNBUF 1300 /*! log: slot closures */ -#define WT_STAT_CONN_LOG_SLOT_CLOSES 1297 +#define WT_STAT_CONN_LOG_SLOT_CLOSES 1301 /*! log: slot join atomic update races */ -#define WT_STAT_CONN_LOG_SLOT_RACES 1298 +#define WT_STAT_CONN_LOG_SLOT_RACES 1302 /*! log: slot join calls atomic updates raced */ -#define WT_STAT_CONN_LOG_SLOT_YIELD_RACE 1299 +#define WT_STAT_CONN_LOG_SLOT_YIELD_RACE 1303 /*! log: slot join calls did not yield */ -#define WT_STAT_CONN_LOG_SLOT_IMMEDIATE 1300 +#define WT_STAT_CONN_LOG_SLOT_IMMEDIATE 1304 /*! log: slot join calls found active slot closed */ -#define WT_STAT_CONN_LOG_SLOT_YIELD_CLOSE 1301 +#define WT_STAT_CONN_LOG_SLOT_YIELD_CLOSE 1305 /*! log: slot join calls slept */ -#define WT_STAT_CONN_LOG_SLOT_YIELD_SLEEP 1302 +#define WT_STAT_CONN_LOG_SLOT_YIELD_SLEEP 1306 /*! log: slot join calls yielded */ -#define WT_STAT_CONN_LOG_SLOT_YIELD 1303 +#define WT_STAT_CONN_LOG_SLOT_YIELD 1307 /*! log: slot join found active slot closed */ -#define WT_STAT_CONN_LOG_SLOT_ACTIVE_CLOSED 1304 +#define WT_STAT_CONN_LOG_SLOT_ACTIVE_CLOSED 1308 /*! log: slot joins yield time (usecs) */ -#define WT_STAT_CONN_LOG_SLOT_YIELD_DURATION 1305 +#define WT_STAT_CONN_LOG_SLOT_YIELD_DURATION 1309 /*! log: slot transitions unable to find free slot */ -#define WT_STAT_CONN_LOG_SLOT_NO_FREE_SLOTS 1306 +#define WT_STAT_CONN_LOG_SLOT_NO_FREE_SLOTS 1310 /*! log: slot unbuffered writes */ -#define WT_STAT_CONN_LOG_SLOT_UNBUFFERED 1307 +#define WT_STAT_CONN_LOG_SLOT_UNBUFFERED 1311 /*! log: total in-memory size of compressed records */ -#define WT_STAT_CONN_LOG_COMPRESS_MEM 1308 +#define WT_STAT_CONN_LOG_COMPRESS_MEM 1312 /*! log: total log buffer size */ -#define WT_STAT_CONN_LOG_BUFFER_SIZE 1309 +#define WT_STAT_CONN_LOG_BUFFER_SIZE 1313 /*! log: total size of compressed records */ -#define WT_STAT_CONN_LOG_COMPRESS_LEN 1310 +#define WT_STAT_CONN_LOG_COMPRESS_LEN 1314 /*! log: written slots coalesced */ -#define WT_STAT_CONN_LOG_SLOT_COALESCED 1311 +#define WT_STAT_CONN_LOG_SLOT_COALESCED 1315 /*! log: yields waiting for previous log file close */ -#define WT_STAT_CONN_LOG_CLOSE_YIELDS 1312 +#define WT_STAT_CONN_LOG_CLOSE_YIELDS 1316 /*! perf: file system read latency histogram (bucket 1) - 10-49ms */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT50 1313 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT50 1317 /*! perf: file system read latency histogram (bucket 2) - 50-99ms */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT100 1314 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT100 1318 /*! perf: file system read latency histogram (bucket 3) - 100-249ms */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT250 1315 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT250 1319 /*! perf: file system read latency histogram (bucket 4) - 250-499ms */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT500 1316 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT500 1320 /*! perf: file system read latency histogram (bucket 5) - 500-999ms */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT1000 1317 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_LT1000 1321 /*! perf: file system read latency histogram (bucket 6) - 1000ms+ */ -#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_GT1000 1318 +#define WT_STAT_CONN_PERF_HIST_FSREAD_LATENCY_GT1000 1322 /*! perf: file system write latency histogram (bucket 1) - 10-49ms */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT50 1319 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT50 1323 /*! perf: file system write latency histogram (bucket 2) - 50-99ms */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT100 1320 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT100 1324 /*! perf: file system write latency histogram (bucket 3) - 100-249ms */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT250 1321 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT250 1325 /*! perf: file system write latency histogram (bucket 4) - 250-499ms */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT500 1322 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT500 1326 /*! perf: file system write latency histogram (bucket 5) - 500-999ms */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT1000 1323 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_LT1000 1327 /*! perf: file system write latency histogram (bucket 6) - 1000ms+ */ -#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_GT1000 1324 +#define WT_STAT_CONN_PERF_HIST_FSWRITE_LATENCY_GT1000 1328 /*! perf: operation read latency histogram (bucket 1) - 100-249us */ -#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT250 1325 +#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT250 1329 /*! perf: operation read latency histogram (bucket 2) - 250-499us */ -#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT500 1326 +#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT500 1330 /*! perf: operation read latency histogram (bucket 3) - 500-999us */ -#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT1000 1327 +#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT1000 1331 /*! perf: operation read latency histogram (bucket 4) - 1000-9999us */ -#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT10000 1328 +#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_LT10000 1332 /*! perf: operation read latency histogram (bucket 5) - 10000us+ */ -#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_GT10000 1329 +#define WT_STAT_CONN_PERF_HIST_OPREAD_LATENCY_GT10000 1333 /*! perf: operation write latency histogram (bucket 1) - 100-249us */ -#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT250 1330 +#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT250 1334 /*! perf: operation write latency histogram (bucket 2) - 250-499us */ -#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT500 1331 +#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT500 1335 /*! perf: operation write latency histogram (bucket 3) - 500-999us */ -#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT1000 1332 +#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT1000 1336 /*! perf: operation write latency histogram (bucket 4) - 1000-9999us */ -#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT10000 1333 +#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_LT10000 1337 /*! perf: operation write latency histogram (bucket 5) - 10000us+ */ -#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_GT10000 1334 +#define WT_STAT_CONN_PERF_HIST_OPWRITE_LATENCY_GT10000 1338 /*! reconciliation: approximate byte size of timestamps in pages written */ -#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TS 1335 +#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TS 1339 /*! * reconciliation: approximate byte size of transaction IDs in pages * written */ -#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TXN 1336 +#define WT_STAT_CONN_REC_TIME_WINDOW_BYTES_TXN 1340 /*! reconciliation: fast-path pages deleted */ -#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1337 +#define WT_STAT_CONN_REC_PAGE_DELETE_FAST 1341 /*! reconciliation: internal-page overflow keys */ -#define WT_STAT_CONN_REC_OVERFLOW_KEY_INTERNAL 1338 +#define WT_STAT_CONN_REC_OVERFLOW_KEY_INTERNAL 1342 /*! reconciliation: leaf-page overflow keys */ -#define WT_STAT_CONN_REC_OVERFLOW_KEY_LEAF 1339 +#define WT_STAT_CONN_REC_OVERFLOW_KEY_LEAF 1343 /*! reconciliation: maximum seconds spent in a reconciliation call */ -#define WT_STAT_CONN_REC_MAXIMUM_SECONDS 1340 +#define WT_STAT_CONN_REC_MAXIMUM_SECONDS 1344 /*! reconciliation: page reconciliation calls */ -#define WT_STAT_CONN_REC_PAGES 1341 +#define WT_STAT_CONN_REC_PAGES 1345 /*! reconciliation: page reconciliation calls for eviction */ -#define WT_STAT_CONN_REC_PAGES_EVICTION 1342 +#define WT_STAT_CONN_REC_PAGES_EVICTION 1346 /*! * reconciliation: page reconciliation calls that resulted in values with * prepared transaction metadata */ -#define WT_STAT_CONN_REC_PAGES_WITH_PREPARE 1343 +#define WT_STAT_CONN_REC_PAGES_WITH_PREPARE 1347 /*! * reconciliation: page reconciliation calls that resulted in values with * timestamps */ -#define WT_STAT_CONN_REC_PAGES_WITH_TS 1344 +#define WT_STAT_CONN_REC_PAGES_WITH_TS 1348 /*! * reconciliation: page reconciliation calls that resulted in values with * transaction ids */ -#define WT_STAT_CONN_REC_PAGES_WITH_TXN 1345 +#define WT_STAT_CONN_REC_PAGES_WITH_TXN 1349 /*! reconciliation: pages deleted */ -#define WT_STAT_CONN_REC_PAGE_DELETE 1346 +#define WT_STAT_CONN_REC_PAGE_DELETE 1350 /*! * reconciliation: pages written including an aggregated newest start * durable timestamp */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 1347 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 1351 /*! * reconciliation: pages written including an aggregated newest stop * durable timestamp */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 1348 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 1352 /*! * reconciliation: pages written including an aggregated newest stop * timestamp */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TS 1349 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TS 1353 /*! * reconciliation: pages written including an aggregated newest stop * transaction ID */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TXN 1350 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TXN 1354 /*! * reconciliation: pages written including an aggregated newest * transaction ID */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_TXN 1351 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_TXN 1355 /*! * reconciliation: pages written including an aggregated oldest start * timestamp */ -#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TS 1352 +#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TS 1356 /*! reconciliation: pages written including an aggregated prepare */ -#define WT_STAT_CONN_REC_TIME_AGGR_PREPARED 1353 +#define WT_STAT_CONN_REC_TIME_AGGR_PREPARED 1357 /*! reconciliation: pages written including at least one prepare state */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_PREPARED 1354 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_PREPARED 1358 /*! * reconciliation: pages written including at least one start durable * timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 1355 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 1359 /*! reconciliation: pages written including at least one start timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TS 1356 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TS 1360 /*! * reconciliation: pages written including at least one start transaction * ID */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TXN 1357 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TXN 1361 /*! * reconciliation: pages written including at least one stop durable * timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 1358 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 1362 /*! reconciliation: pages written including at least one stop timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TS 1359 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TS 1363 /*! * reconciliation: pages written including at least one stop transaction * ID */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TXN 1360 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TXN 1364 /*! reconciliation: records written including a prepare state */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PREPARED 1361 +#define WT_STAT_CONN_REC_TIME_WINDOW_PREPARED 1365 /*! reconciliation: records written including a start durable timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_START_TS 1362 +#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_START_TS 1366 /*! reconciliation: records written including a start timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_START_TS 1363 +#define WT_STAT_CONN_REC_TIME_WINDOW_START_TS 1367 /*! reconciliation: records written including a start transaction ID */ -#define WT_STAT_CONN_REC_TIME_WINDOW_START_TXN 1364 +#define WT_STAT_CONN_REC_TIME_WINDOW_START_TXN 1368 /*! reconciliation: records written including a stop durable timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_STOP_TS 1365 +#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_STOP_TS 1369 /*! reconciliation: records written including a stop timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TS 1366 +#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TS 1370 /*! reconciliation: records written including a stop transaction ID */ -#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TXN 1367 +#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TXN 1371 /*! reconciliation: split bytes currently awaiting free */ -#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1368 +#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1372 /*! reconciliation: split objects currently awaiting free */ -#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1369 +#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1373 /*! session: flush state races */ -#define WT_STAT_CONN_FLUSH_STATE_RACES 1370 +#define WT_STAT_CONN_FLUSH_STATE_RACES 1374 /*! session: flush_tier operation calls */ -#define WT_STAT_CONN_FLUSH_TIER 1371 +#define WT_STAT_CONN_FLUSH_TIER 1375 /*! session: open session count */ -#define WT_STAT_CONN_SESSION_OPEN 1372 +#define WT_STAT_CONN_SESSION_OPEN 1376 /*! session: session query timestamp calls */ -#define WT_STAT_CONN_SESSION_QUERY_TS 1373 +#define WT_STAT_CONN_SESSION_QUERY_TS 1377 /*! session: table alter failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1374 +#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1378 /*! session: table alter successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1375 +#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1379 /*! session: table alter unchanged and skipped */ -#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1376 +#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1380 /*! session: table compact failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1377 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1381 /*! session: table compact successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1378 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1382 /*! session: table create failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1379 +#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1383 /*! session: table create successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1380 +#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1384 /*! session: table drop failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1381 +#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1385 /*! session: table drop successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1382 +#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1386 /*! session: table rename failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1383 +#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1387 /*! session: table rename successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1384 +#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1388 /*! session: table salvage failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1385 +#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1389 /*! session: table salvage successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1386 +#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1390 /*! session: table truncate failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1387 +#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1391 /*! session: table truncate successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1388 +#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1392 /*! session: table verify failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1389 +#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1393 /*! session: table verify successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1390 +#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1394 /*! session: tiered operations dequeued and processed */ -#define WT_STAT_CONN_TIERED_WORK_UNITS_DEQUEUED 1391 +#define WT_STAT_CONN_TIERED_WORK_UNITS_DEQUEUED 1395 /*! session: tiered operations scheduled */ -#define WT_STAT_CONN_TIERED_WORK_UNITS_CREATED 1392 +#define WT_STAT_CONN_TIERED_WORK_UNITS_CREATED 1396 /*! session: tiered storage local retention time (secs) */ -#define WT_STAT_CONN_TIERED_RETENTION 1393 +#define WT_STAT_CONN_TIERED_RETENTION 1397 /*! session: tiered storage object size */ -#define WT_STAT_CONN_TIERED_OBJECT_SIZE 1394 +#define WT_STAT_CONN_TIERED_OBJECT_SIZE 1398 /*! thread-state: active filesystem fsync calls */ -#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1395 +#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1399 /*! thread-state: active filesystem read calls */ -#define WT_STAT_CONN_THREAD_READ_ACTIVE 1396 +#define WT_STAT_CONN_THREAD_READ_ACTIVE 1400 /*! thread-state: active filesystem write calls */ -#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1397 +#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1401 /*! thread-yield: application thread time evicting (usecs) */ -#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1398 +#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1402 /*! thread-yield: application thread time waiting for cache (usecs) */ -#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1399 +#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1403 /*! * thread-yield: connection close blocked waiting for transaction state * stabilization */ -#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1400 +#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1404 /*! thread-yield: connection close yielded for lsm manager shutdown */ -#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1401 +#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1405 /*! thread-yield: data handle lock yielded */ -#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1402 +#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1406 /*! * thread-yield: get reference for page index and slot time sleeping * (usecs) */ -#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1403 +#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1407 /*! thread-yield: page access yielded due to prepare state change */ -#define WT_STAT_CONN_PREPARED_TRANSITION_BLOCKED_PAGE 1404 +#define WT_STAT_CONN_PREPARED_TRANSITION_BLOCKED_PAGE 1408 /*! thread-yield: page acquire busy blocked */ -#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1405 +#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1409 /*! thread-yield: page acquire eviction blocked */ -#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1406 +#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1410 /*! thread-yield: page acquire locked blocked */ -#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1407 +#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1411 /*! thread-yield: page acquire read blocked */ -#define WT_STAT_CONN_PAGE_READ_BLOCKED 1408 +#define WT_STAT_CONN_PAGE_READ_BLOCKED 1412 /*! thread-yield: page acquire time sleeping (usecs) */ -#define WT_STAT_CONN_PAGE_SLEEP 1409 +#define WT_STAT_CONN_PAGE_SLEEP 1413 /*! * thread-yield: page delete rollback time sleeping for state change * (usecs) */ -#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1410 +#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1414 /*! thread-yield: page reconciliation yielded due to child modification */ -#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1411 +#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1415 /*! transaction: Number of prepared updates */ -#define WT_STAT_CONN_TXN_PREPARED_UPDATES 1412 +#define WT_STAT_CONN_TXN_PREPARED_UPDATES 1416 /*! transaction: Number of prepared updates committed */ -#define WT_STAT_CONN_TXN_PREPARED_UPDATES_COMMITTED 1413 +#define WT_STAT_CONN_TXN_PREPARED_UPDATES_COMMITTED 1417 /*! transaction: Number of prepared updates repeated on the same key */ -#define WT_STAT_CONN_TXN_PREPARED_UPDATES_KEY_REPEATED 1414 +#define WT_STAT_CONN_TXN_PREPARED_UPDATES_KEY_REPEATED 1418 /*! transaction: Number of prepared updates rolled back */ -#define WT_STAT_CONN_TXN_PREPARED_UPDATES_ROLLEDBACK 1415 +#define WT_STAT_CONN_TXN_PREPARED_UPDATES_ROLLEDBACK 1419 /*! transaction: prepared transactions */ -#define WT_STAT_CONN_TXN_PREPARE 1416 +#define WT_STAT_CONN_TXN_PREPARE 1420 /*! transaction: prepared transactions committed */ -#define WT_STAT_CONN_TXN_PREPARE_COMMIT 1417 +#define WT_STAT_CONN_TXN_PREPARE_COMMIT 1421 /*! transaction: prepared transactions currently active */ -#define WT_STAT_CONN_TXN_PREPARE_ACTIVE 1418 +#define WT_STAT_CONN_TXN_PREPARE_ACTIVE 1422 /*! transaction: prepared transactions rolled back */ -#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK 1419 +#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK 1423 /*! * transaction: prepared transactions rolled back and do not remove the * history store entry */ -#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK_DO_NOT_REMOVE_HS_UPDATE 1420 +#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK_DO_NOT_REMOVE_HS_UPDATE 1424 /*! * transaction: prepared transactions rolled back and fix the history * store entry with checkpoint reserved transaction id */ -#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK_FIX_HS_UPDATE_WITH_CKPT_RESERVED_TXNID 1421 +#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK_FIX_HS_UPDATE_WITH_CKPT_RESERVED_TXNID 1425 /*! transaction: query timestamp calls */ -#define WT_STAT_CONN_TXN_QUERY_TS 1422 +#define WT_STAT_CONN_TXN_QUERY_TS 1426 /*! transaction: race to read prepared update retry */ -#define WT_STAT_CONN_TXN_READ_RACE_PREPARE_UPDATE 1423 +#define WT_STAT_CONN_TXN_READ_RACE_PREPARE_UPDATE 1427 /*! transaction: rollback to stable calls */ -#define WT_STAT_CONN_TXN_RTS 1424 +#define WT_STAT_CONN_TXN_RTS 1428 /*! * transaction: rollback to stable history store records with stop * timestamps older than newer records */ -#define WT_STAT_CONN_TXN_RTS_HS_STOP_OLDER_THAN_NEWER_START 1425 +#define WT_STAT_CONN_TXN_RTS_HS_STOP_OLDER_THAN_NEWER_START 1429 /*! transaction: rollback to stable inconsistent checkpoint */ -#define WT_STAT_CONN_TXN_RTS_INCONSISTENT_CKPT 1426 +#define WT_STAT_CONN_TXN_RTS_INCONSISTENT_CKPT 1430 /*! transaction: rollback to stable keys removed */ -#define WT_STAT_CONN_TXN_RTS_KEYS_REMOVED 1427 +#define WT_STAT_CONN_TXN_RTS_KEYS_REMOVED 1431 /*! transaction: rollback to stable keys restored */ -#define WT_STAT_CONN_TXN_RTS_KEYS_RESTORED 1428 +#define WT_STAT_CONN_TXN_RTS_KEYS_RESTORED 1432 /*! transaction: rollback to stable pages visited */ -#define WT_STAT_CONN_TXN_RTS_PAGES_VISITED 1429 +#define WT_STAT_CONN_TXN_RTS_PAGES_VISITED 1433 /*! transaction: rollback to stable restored tombstones from history store */ -#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_TOMBSTONES 1430 +#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_TOMBSTONES 1434 /*! transaction: rollback to stable restored updates from history store */ -#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_UPDATES 1431 +#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_UPDATES 1435 /*! transaction: rollback to stable skipping delete rle */ -#define WT_STAT_CONN_TXN_RTS_DELETE_RLE_SKIPPED 1432 +#define WT_STAT_CONN_TXN_RTS_DELETE_RLE_SKIPPED 1436 /*! transaction: rollback to stable skipping stable rle */ -#define WT_STAT_CONN_TXN_RTS_STABLE_RLE_SKIPPED 1433 +#define WT_STAT_CONN_TXN_RTS_STABLE_RLE_SKIPPED 1437 /*! transaction: rollback to stable sweeping history store keys */ -#define WT_STAT_CONN_TXN_RTS_SWEEP_HS_KEYS 1434 +#define WT_STAT_CONN_TXN_RTS_SWEEP_HS_KEYS 1438 /*! transaction: rollback to stable tree walk skipping pages */ -#define WT_STAT_CONN_TXN_RTS_TREE_WALK_SKIP_PAGES 1435 +#define WT_STAT_CONN_TXN_RTS_TREE_WALK_SKIP_PAGES 1439 /*! transaction: rollback to stable updates aborted */ -#define WT_STAT_CONN_TXN_RTS_UPD_ABORTED 1436 +#define WT_STAT_CONN_TXN_RTS_UPD_ABORTED 1440 /*! transaction: rollback to stable updates removed from history store */ -#define WT_STAT_CONN_TXN_RTS_HS_REMOVED 1437 +#define WT_STAT_CONN_TXN_RTS_HS_REMOVED 1441 /*! transaction: sessions scanned in each walk of concurrent sessions */ -#define WT_STAT_CONN_TXN_SESSIONS_WALKED 1438 +#define WT_STAT_CONN_TXN_SESSIONS_WALKED 1442 /*! transaction: set timestamp calls */ -#define WT_STAT_CONN_TXN_SET_TS 1439 +#define WT_STAT_CONN_TXN_SET_TS 1443 /*! transaction: set timestamp durable calls */ -#define WT_STAT_CONN_TXN_SET_TS_DURABLE 1440 +#define WT_STAT_CONN_TXN_SET_TS_DURABLE 1444 /*! transaction: set timestamp durable updates */ -#define WT_STAT_CONN_TXN_SET_TS_DURABLE_UPD 1441 +#define WT_STAT_CONN_TXN_SET_TS_DURABLE_UPD 1445 /*! transaction: set timestamp oldest calls */ -#define WT_STAT_CONN_TXN_SET_TS_OLDEST 1442 +#define WT_STAT_CONN_TXN_SET_TS_OLDEST 1446 /*! transaction: set timestamp oldest updates */ -#define WT_STAT_CONN_TXN_SET_TS_OLDEST_UPD 1443 +#define WT_STAT_CONN_TXN_SET_TS_OLDEST_UPD 1447 /*! transaction: set timestamp stable calls */ -#define WT_STAT_CONN_TXN_SET_TS_STABLE 1444 +#define WT_STAT_CONN_TXN_SET_TS_STABLE 1448 /*! transaction: set timestamp stable updates */ -#define WT_STAT_CONN_TXN_SET_TS_STABLE_UPD 1445 +#define WT_STAT_CONN_TXN_SET_TS_STABLE_UPD 1449 /*! transaction: transaction begins */ -#define WT_STAT_CONN_TXN_BEGIN 1446 +#define WT_STAT_CONN_TXN_BEGIN 1450 /*! transaction: transaction checkpoint currently running */ -#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1447 +#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1451 /*! * transaction: transaction checkpoint currently running for history * store file */ -#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING_HS 1448 +#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING_HS 1452 /*! transaction: transaction checkpoint generation */ -#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1449 +#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1453 /*! * transaction: transaction checkpoint history store file duration * (usecs) */ -#define WT_STAT_CONN_TXN_HS_CKPT_DURATION 1450 +#define WT_STAT_CONN_TXN_HS_CKPT_DURATION 1454 /*! transaction: transaction checkpoint max time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1451 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1455 /*! transaction: transaction checkpoint min time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1452 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1456 /*! * transaction: transaction checkpoint most recent duration for gathering * all handles (usecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION 1453 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION 1457 /*! * transaction: transaction checkpoint most recent duration for gathering * applied handles (usecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_APPLY 1454 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_APPLY 1458 /*! * transaction: transaction checkpoint most recent duration for gathering * skipped handles (usecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_SKIP 1455 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_SKIP 1459 /*! transaction: transaction checkpoint most recent handles applied */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_APPLIED 1456 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_APPLIED 1460 /*! transaction: transaction checkpoint most recent handles skipped */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_SKIPPED 1457 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_SKIPPED 1461 /*! transaction: transaction checkpoint most recent handles walked */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_WALKED 1458 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_WALKED 1462 /*! transaction: transaction checkpoint most recent time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1459 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1463 /*! transaction: transaction checkpoint prepare currently running */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RUNNING 1460 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RUNNING 1464 /*! transaction: transaction checkpoint prepare max time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MAX 1461 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MAX 1465 /*! transaction: transaction checkpoint prepare min time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MIN 1462 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MIN 1466 /*! transaction: transaction checkpoint prepare most recent time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RECENT 1463 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RECENT 1467 /*! transaction: transaction checkpoint prepare total time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_TOTAL 1464 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_TOTAL 1468 /*! transaction: transaction checkpoint scrub dirty target */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1465 +#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1469 /*! transaction: transaction checkpoint scrub time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1466 +#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1470 /*! transaction: transaction checkpoint total time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1467 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1471 /*! transaction: transaction checkpoints */ -#define WT_STAT_CONN_TXN_CHECKPOINT 1468 +#define WT_STAT_CONN_TXN_CHECKPOINT 1472 /*! transaction: transaction checkpoints due to obsolete pages */ -#define WT_STAT_CONN_TXN_CHECKPOINT_OBSOLETE_APPLIED 1469 +#define WT_STAT_CONN_TXN_CHECKPOINT_OBSOLETE_APPLIED 1473 /*! * transaction: transaction checkpoints skipped because database was * clean */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1470 +#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1474 /*! transaction: transaction failures due to history store */ -#define WT_STAT_CONN_TXN_FAIL_CACHE 1471 +#define WT_STAT_CONN_TXN_FAIL_CACHE 1475 /*! * transaction: transaction fsync calls for checkpoint after allocating * the transaction ID */ -#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1472 +#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1476 /*! * transaction: transaction fsync duration for checkpoint after * allocating the transaction ID (usecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1473 +#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1477 /*! transaction: transaction range of IDs currently pinned */ -#define WT_STAT_CONN_TXN_PINNED_RANGE 1474 +#define WT_STAT_CONN_TXN_PINNED_RANGE 1478 /*! transaction: transaction range of IDs currently pinned by a checkpoint */ -#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1475 +#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1479 /*! transaction: transaction range of timestamps currently pinned */ -#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP 1476 +#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP 1480 /*! transaction: transaction range of timestamps pinned by a checkpoint */ -#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_CHECKPOINT 1477 +#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_CHECKPOINT 1481 /*! * transaction: transaction range of timestamps pinned by the oldest * active read timestamp */ -#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_READER 1478 +#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_READER 1482 /*! * transaction: transaction range of timestamps pinned by the oldest * timestamp */ -#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST 1479 +#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST 1483 /*! transaction: transaction read timestamp of the oldest active reader */ -#define WT_STAT_CONN_TXN_TIMESTAMP_OLDEST_ACTIVE_READ 1480 +#define WT_STAT_CONN_TXN_TIMESTAMP_OLDEST_ACTIVE_READ 1484 /*! transaction: transaction rollback to stable currently running */ -#define WT_STAT_CONN_TXN_ROLLBACK_TO_STABLE_RUNNING 1481 +#define WT_STAT_CONN_TXN_ROLLBACK_TO_STABLE_RUNNING 1485 /*! transaction: transaction walk of concurrent sessions */ -#define WT_STAT_CONN_TXN_WALK_SESSIONS 1482 +#define WT_STAT_CONN_TXN_WALK_SESSIONS 1486 /*! transaction: transactions committed */ -#define WT_STAT_CONN_TXN_COMMIT 1483 +#define WT_STAT_CONN_TXN_COMMIT 1487 /*! transaction: transactions rolled back */ -#define WT_STAT_CONN_TXN_ROLLBACK 1484 +#define WT_STAT_CONN_TXN_ROLLBACK 1488 /*! transaction: update conflicts */ -#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1485 +#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1489 /*! * @} @@ -6300,507 +6320,527 @@ extern int wiredtiger_extension_terminate(WT_CONNECTION *connection); #define WT_STAT_DSRC_CACHE_EVICTION_BLOCKED_CHECKPOINT_HS 2047 /*! cache: data source pages selected for eviction unable to be evicted */ #define WT_STAT_DSRC_CACHE_EVICTION_FAIL 2048 +/*! + * cache: eviction gave up due to detecting an out of order on disk value + * behind the last update on the chain + */ +#define WT_STAT_DSRC_CACHE_EVICTION_BLOCKED_OOO_CHECKPOINT_RACE_1 2049 +/*! + * cache: eviction gave up due to detecting an out of order tombstone + * ahead of the selected on disk update + */ +#define WT_STAT_DSRC_CACHE_EVICTION_BLOCKED_OOO_CHECKPOINT_RACE_2 2050 +/*! + * cache: eviction gave up due to detecting an out of order tombstone + * ahead of the selected on disk update after validating the update chain + */ +#define WT_STAT_DSRC_CACHE_EVICTION_BLOCKED_OOO_CHECKPOINT_RACE_3 2051 +/*! + * cache: eviction gave up due to detecting out of order timestamps on + * the update chain after the selected on disk update + */ +#define WT_STAT_DSRC_CACHE_EVICTION_BLOCKED_OOO_CHECKPOINT_RACE_4 2052 /*! cache: eviction walk passes of a file */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALK_PASSES 2049 +#define WT_STAT_DSRC_CACHE_EVICTION_WALK_PASSES 2053 /*! cache: eviction walk target pages histogram - 0-9 */ -#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_LT10 2050 +#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_LT10 2054 /*! cache: eviction walk target pages histogram - 10-31 */ -#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_LT32 2051 +#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_LT32 2055 /*! cache: eviction walk target pages histogram - 128 and higher */ -#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_GE128 2052 +#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_GE128 2056 /*! cache: eviction walk target pages histogram - 32-63 */ -#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_LT64 2053 +#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_LT64 2057 /*! cache: eviction walk target pages histogram - 64-128 */ -#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_LT128 2054 +#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_LT128 2058 /*! * cache: eviction walk target pages reduced due to history store cache * pressure */ -#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_REDUCED 2055 +#define WT_STAT_DSRC_CACHE_EVICTION_TARGET_PAGE_REDUCED 2059 /*! cache: eviction walks abandoned */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_ABANDONED 2056 +#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_ABANDONED 2060 /*! cache: eviction walks gave up because they restarted their walk twice */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_STOPPED 2057 +#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_STOPPED 2061 /*! * cache: eviction walks gave up because they saw too many pages and * found no candidates */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_GAVE_UP_NO_TARGETS 2058 +#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_GAVE_UP_NO_TARGETS 2062 /*! * cache: eviction walks gave up because they saw too many pages and * found too few candidates */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_GAVE_UP_RATIO 2059 +#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_GAVE_UP_RATIO 2063 /*! cache: eviction walks reached end of tree */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_ENDED 2060 +#define WT_STAT_DSRC_CACHE_EVICTION_WALKS_ENDED 2064 /*! cache: eviction walks restarted */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALK_RESTART 2061 +#define WT_STAT_DSRC_CACHE_EVICTION_WALK_RESTART 2065 /*! cache: eviction walks started from root of tree */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALK_FROM_ROOT 2062 +#define WT_STAT_DSRC_CACHE_EVICTION_WALK_FROM_ROOT 2066 /*! cache: eviction walks started from saved location in tree */ -#define WT_STAT_DSRC_CACHE_EVICTION_WALK_SAVED_POS 2063 +#define WT_STAT_DSRC_CACHE_EVICTION_WALK_SAVED_POS 2067 /*! cache: hazard pointer blocked page eviction */ -#define WT_STAT_DSRC_CACHE_EVICTION_HAZARD 2064 +#define WT_STAT_DSRC_CACHE_EVICTION_HAZARD 2068 /*! cache: history store table insert calls */ -#define WT_STAT_DSRC_CACHE_HS_INSERT 2065 +#define WT_STAT_DSRC_CACHE_HS_INSERT 2069 /*! cache: history store table insert calls that returned restart */ -#define WT_STAT_DSRC_CACHE_HS_INSERT_RESTART 2066 +#define WT_STAT_DSRC_CACHE_HS_INSERT_RESTART 2070 /*! * cache: history store table out-of-order resolved updates that lose * their durable timestamp */ -#define WT_STAT_DSRC_CACHE_HS_ORDER_LOSE_DURABLE_TIMESTAMP 2067 +#define WT_STAT_DSRC_CACHE_HS_ORDER_LOSE_DURABLE_TIMESTAMP 2071 /*! * cache: history store table out-of-order updates that were fixed up by * reinserting with the fixed timestamp */ -#define WT_STAT_DSRC_CACHE_HS_ORDER_REINSERT 2068 +#define WT_STAT_DSRC_CACHE_HS_ORDER_REINSERT 2072 /*! cache: history store table reads */ -#define WT_STAT_DSRC_CACHE_HS_READ 2069 +#define WT_STAT_DSRC_CACHE_HS_READ 2073 /*! cache: history store table reads missed */ -#define WT_STAT_DSRC_CACHE_HS_READ_MISS 2070 +#define WT_STAT_DSRC_CACHE_HS_READ_MISS 2074 /*! cache: history store table reads requiring squashed modifies */ -#define WT_STAT_DSRC_CACHE_HS_READ_SQUASH 2071 +#define WT_STAT_DSRC_CACHE_HS_READ_SQUASH 2075 /*! * cache: history store table truncation by rollback to stable to remove * an unstable update */ -#define WT_STAT_DSRC_CACHE_HS_KEY_TRUNCATE_RTS_UNSTABLE 2072 +#define WT_STAT_DSRC_CACHE_HS_KEY_TRUNCATE_RTS_UNSTABLE 2076 /*! * cache: history store table truncation by rollback to stable to remove * an update */ -#define WT_STAT_DSRC_CACHE_HS_KEY_TRUNCATE_RTS 2073 +#define WT_STAT_DSRC_CACHE_HS_KEY_TRUNCATE_RTS 2077 /*! cache: history store table truncation to remove an update */ -#define WT_STAT_DSRC_CACHE_HS_KEY_TRUNCATE 2074 +#define WT_STAT_DSRC_CACHE_HS_KEY_TRUNCATE 2078 /*! * cache: history store table truncation to remove range of updates due * to key being removed from the data page during reconciliation */ -#define WT_STAT_DSRC_CACHE_HS_KEY_TRUNCATE_ONPAGE_REMOVAL 2075 +#define WT_STAT_DSRC_CACHE_HS_KEY_TRUNCATE_ONPAGE_REMOVAL 2079 /*! * cache: history store table truncation to remove range of updates due * to out-of-order timestamp update on data page */ -#define WT_STAT_DSRC_CACHE_HS_ORDER_REMOVE 2076 +#define WT_STAT_DSRC_CACHE_HS_ORDER_REMOVE 2080 /*! cache: history store table writes requiring squashed modifies */ -#define WT_STAT_DSRC_CACHE_HS_WRITE_SQUASH 2077 +#define WT_STAT_DSRC_CACHE_HS_WRITE_SQUASH 2081 /*! cache: in-memory page passed criteria to be split */ -#define WT_STAT_DSRC_CACHE_INMEM_SPLITTABLE 2078 +#define WT_STAT_DSRC_CACHE_INMEM_SPLITTABLE 2082 /*! cache: in-memory page splits */ -#define WT_STAT_DSRC_CACHE_INMEM_SPLIT 2079 +#define WT_STAT_DSRC_CACHE_INMEM_SPLIT 2083 /*! cache: internal pages evicted */ -#define WT_STAT_DSRC_CACHE_EVICTION_INTERNAL 2080 +#define WT_STAT_DSRC_CACHE_EVICTION_INTERNAL 2084 /*! cache: internal pages split during eviction */ -#define WT_STAT_DSRC_CACHE_EVICTION_SPLIT_INTERNAL 2081 +#define WT_STAT_DSRC_CACHE_EVICTION_SPLIT_INTERNAL 2085 /*! cache: leaf pages split during eviction */ -#define WT_STAT_DSRC_CACHE_EVICTION_SPLIT_LEAF 2082 +#define WT_STAT_DSRC_CACHE_EVICTION_SPLIT_LEAF 2086 /*! cache: modified pages evicted */ -#define WT_STAT_DSRC_CACHE_EVICTION_DIRTY 2083 +#define WT_STAT_DSRC_CACHE_EVICTION_DIRTY 2087 /*! cache: overflow pages read into cache */ -#define WT_STAT_DSRC_CACHE_READ_OVERFLOW 2084 +#define WT_STAT_DSRC_CACHE_READ_OVERFLOW 2088 /*! cache: page split during eviction deepened the tree */ -#define WT_STAT_DSRC_CACHE_EVICTION_DEEPEN 2085 +#define WT_STAT_DSRC_CACHE_EVICTION_DEEPEN 2089 /*! cache: page written requiring history store records */ -#define WT_STAT_DSRC_CACHE_WRITE_HS 2086 +#define WT_STAT_DSRC_CACHE_WRITE_HS 2090 /*! cache: pages read into cache */ -#define WT_STAT_DSRC_CACHE_READ 2087 +#define WT_STAT_DSRC_CACHE_READ 2091 /*! cache: pages read into cache after truncate */ -#define WT_STAT_DSRC_CACHE_READ_DELETED 2088 +#define WT_STAT_DSRC_CACHE_READ_DELETED 2092 /*! cache: pages read into cache after truncate in prepare state */ -#define WT_STAT_DSRC_CACHE_READ_DELETED_PREPARED 2089 +#define WT_STAT_DSRC_CACHE_READ_DELETED_PREPARED 2093 /*! cache: pages requested from the cache */ -#define WT_STAT_DSRC_CACHE_PAGES_REQUESTED 2090 +#define WT_STAT_DSRC_CACHE_PAGES_REQUESTED 2094 /*! cache: pages seen by eviction walk */ -#define WT_STAT_DSRC_CACHE_EVICTION_PAGES_SEEN 2091 +#define WT_STAT_DSRC_CACHE_EVICTION_PAGES_SEEN 2095 /*! cache: pages written from cache */ -#define WT_STAT_DSRC_CACHE_WRITE 2092 +#define WT_STAT_DSRC_CACHE_WRITE 2096 /*! cache: pages written requiring in-memory restoration */ -#define WT_STAT_DSRC_CACHE_WRITE_RESTORE 2093 +#define WT_STAT_DSRC_CACHE_WRITE_RESTORE 2097 /*! cache: tracked dirty bytes in the cache */ -#define WT_STAT_DSRC_CACHE_BYTES_DIRTY 2094 +#define WT_STAT_DSRC_CACHE_BYTES_DIRTY 2098 /*! cache: unmodified pages evicted */ -#define WT_STAT_DSRC_CACHE_EVICTION_CLEAN 2095 +#define WT_STAT_DSRC_CACHE_EVICTION_CLEAN 2099 /*! * cache_walk: Average difference between current eviction generation * when the page was last considered, only reported if cache_walk or all * statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_GEN_AVG_GAP 2096 +#define WT_STAT_DSRC_CACHE_STATE_GEN_AVG_GAP 2100 /*! * cache_walk: Average on-disk page image size seen, only reported if * cache_walk or all statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_AVG_WRITTEN_SIZE 2097 +#define WT_STAT_DSRC_CACHE_STATE_AVG_WRITTEN_SIZE 2101 /*! * cache_walk: Average time in cache for pages that have been visited by * the eviction server, only reported if cache_walk or all statistics are * enabled */ -#define WT_STAT_DSRC_CACHE_STATE_AVG_VISITED_AGE 2098 +#define WT_STAT_DSRC_CACHE_STATE_AVG_VISITED_AGE 2102 /*! * cache_walk: Average time in cache for pages that have not been visited * by the eviction server, only reported if cache_walk or all statistics * are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_AVG_UNVISITED_AGE 2099 +#define WT_STAT_DSRC_CACHE_STATE_AVG_UNVISITED_AGE 2103 /*! * cache_walk: Clean pages currently in cache, only reported if * cache_walk or all statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_PAGES_CLEAN 2100 +#define WT_STAT_DSRC_CACHE_STATE_PAGES_CLEAN 2104 /*! * cache_walk: Current eviction generation, only reported if cache_walk * or all statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_GEN_CURRENT 2101 +#define WT_STAT_DSRC_CACHE_STATE_GEN_CURRENT 2105 /*! * cache_walk: Dirty pages currently in cache, only reported if * cache_walk or all statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_PAGES_DIRTY 2102 +#define WT_STAT_DSRC_CACHE_STATE_PAGES_DIRTY 2106 /*! * cache_walk: Entries in the root page, only reported if cache_walk or * all statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_ROOT_ENTRIES 2103 +#define WT_STAT_DSRC_CACHE_STATE_ROOT_ENTRIES 2107 /*! * cache_walk: Internal pages currently in cache, only reported if * cache_walk or all statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_PAGES_INTERNAL 2104 +#define WT_STAT_DSRC_CACHE_STATE_PAGES_INTERNAL 2108 /*! * cache_walk: Leaf pages currently in cache, only reported if cache_walk * or all statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_PAGES_LEAF 2105 +#define WT_STAT_DSRC_CACHE_STATE_PAGES_LEAF 2109 /*! * cache_walk: Maximum difference between current eviction generation * when the page was last considered, only reported if cache_walk or all * statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_GEN_MAX_GAP 2106 +#define WT_STAT_DSRC_CACHE_STATE_GEN_MAX_GAP 2110 /*! * cache_walk: Maximum page size seen, only reported if cache_walk or all * statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_MAX_PAGESIZE 2107 +#define WT_STAT_DSRC_CACHE_STATE_MAX_PAGESIZE 2111 /*! * cache_walk: Minimum on-disk page image size seen, only reported if * cache_walk or all statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_MIN_WRITTEN_SIZE 2108 +#define WT_STAT_DSRC_CACHE_STATE_MIN_WRITTEN_SIZE 2112 /*! * cache_walk: Number of pages never visited by eviction server, only * reported if cache_walk or all statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_UNVISITED_COUNT 2109 +#define WT_STAT_DSRC_CACHE_STATE_UNVISITED_COUNT 2113 /*! * cache_walk: On-disk page image sizes smaller than a single allocation * unit, only reported if cache_walk or all statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_SMALLER_ALLOC_SIZE 2110 +#define WT_STAT_DSRC_CACHE_STATE_SMALLER_ALLOC_SIZE 2114 /*! * cache_walk: Pages created in memory and never written, only reported * if cache_walk or all statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_MEMORY 2111 +#define WT_STAT_DSRC_CACHE_STATE_MEMORY 2115 /*! * cache_walk: Pages currently queued for eviction, only reported if * cache_walk or all statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_QUEUED 2112 +#define WT_STAT_DSRC_CACHE_STATE_QUEUED 2116 /*! * cache_walk: Pages that could not be queued for eviction, only reported * if cache_walk or all statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_NOT_QUEUEABLE 2113 +#define WT_STAT_DSRC_CACHE_STATE_NOT_QUEUEABLE 2117 /*! * cache_walk: Refs skipped during cache traversal, only reported if * cache_walk or all statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_REFS_SKIPPED 2114 +#define WT_STAT_DSRC_CACHE_STATE_REFS_SKIPPED 2118 /*! * cache_walk: Size of the root page, only reported if cache_walk or all * statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_ROOT_SIZE 2115 +#define WT_STAT_DSRC_CACHE_STATE_ROOT_SIZE 2119 /*! * cache_walk: Total number of pages currently in cache, only reported if * cache_walk or all statistics are enabled */ -#define WT_STAT_DSRC_CACHE_STATE_PAGES 2116 +#define WT_STAT_DSRC_CACHE_STATE_PAGES 2120 /*! checkpoint-cleanup: pages added for eviction */ -#define WT_STAT_DSRC_CC_PAGES_EVICT 2117 +#define WT_STAT_DSRC_CC_PAGES_EVICT 2121 /*! checkpoint-cleanup: pages removed */ -#define WT_STAT_DSRC_CC_PAGES_REMOVED 2118 +#define WT_STAT_DSRC_CC_PAGES_REMOVED 2122 /*! checkpoint-cleanup: pages skipped during tree walk */ -#define WT_STAT_DSRC_CC_PAGES_WALK_SKIPPED 2119 +#define WT_STAT_DSRC_CC_PAGES_WALK_SKIPPED 2123 /*! checkpoint-cleanup: pages visited */ -#define WT_STAT_DSRC_CC_PAGES_VISITED 2120 +#define WT_STAT_DSRC_CC_PAGES_VISITED 2124 /*! * compression: compressed page maximum internal page size prior to * compression */ -#define WT_STAT_DSRC_COMPRESS_PRECOMP_INTL_MAX_PAGE_SIZE 2121 +#define WT_STAT_DSRC_COMPRESS_PRECOMP_INTL_MAX_PAGE_SIZE 2125 /*! * compression: compressed page maximum leaf page size prior to * compression */ -#define WT_STAT_DSRC_COMPRESS_PRECOMP_LEAF_MAX_PAGE_SIZE 2122 +#define WT_STAT_DSRC_COMPRESS_PRECOMP_LEAF_MAX_PAGE_SIZE 2126 /*! compression: compressed pages read */ -#define WT_STAT_DSRC_COMPRESS_READ 2123 +#define WT_STAT_DSRC_COMPRESS_READ 2127 /*! compression: compressed pages written */ -#define WT_STAT_DSRC_COMPRESS_WRITE 2124 +#define WT_STAT_DSRC_COMPRESS_WRITE 2128 /*! compression: page written failed to compress */ -#define WT_STAT_DSRC_COMPRESS_WRITE_FAIL 2125 +#define WT_STAT_DSRC_COMPRESS_WRITE_FAIL 2129 /*! compression: page written was too small to compress */ -#define WT_STAT_DSRC_COMPRESS_WRITE_TOO_SMALL 2126 +#define WT_STAT_DSRC_COMPRESS_WRITE_TOO_SMALL 2130 /*! cursor: Total number of entries skipped by cursor next calls */ -#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_TOTAL 2127 +#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_TOTAL 2131 /*! cursor: Total number of entries skipped by cursor prev calls */ -#define WT_STAT_DSRC_CURSOR_PREV_SKIP_TOTAL 2128 +#define WT_STAT_DSRC_CURSOR_PREV_SKIP_TOTAL 2132 /*! * cursor: Total number of entries skipped to position the history store * cursor */ -#define WT_STAT_DSRC_CURSOR_SKIP_HS_CUR_POSITION 2129 +#define WT_STAT_DSRC_CURSOR_SKIP_HS_CUR_POSITION 2133 /*! * cursor: Total number of pages skipped without reading by cursor next * calls */ -#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_PAGE_COUNT 2130 +#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_PAGE_COUNT 2134 /*! * cursor: Total number of pages skipped without reading by cursor prev * calls */ -#define WT_STAT_DSRC_CURSOR_PREV_SKIP_PAGE_COUNT 2131 +#define WT_STAT_DSRC_CURSOR_PREV_SKIP_PAGE_COUNT 2135 /*! * cursor: Total number of times a search near has exited due to prefix * config */ -#define WT_STAT_DSRC_CURSOR_SEARCH_NEAR_PREFIX_FAST_PATHS 2132 +#define WT_STAT_DSRC_CURSOR_SEARCH_NEAR_PREFIX_FAST_PATHS 2136 /*! cursor: bulk loaded cursor insert calls */ -#define WT_STAT_DSRC_CURSOR_INSERT_BULK 2133 +#define WT_STAT_DSRC_CURSOR_INSERT_BULK 2137 /*! cursor: cache cursors reuse count */ -#define WT_STAT_DSRC_CURSOR_REOPEN 2134 +#define WT_STAT_DSRC_CURSOR_REOPEN 2138 /*! cursor: close calls that result in cache */ -#define WT_STAT_DSRC_CURSOR_CACHE 2135 +#define WT_STAT_DSRC_CURSOR_CACHE 2139 /*! cursor: create calls */ -#define WT_STAT_DSRC_CURSOR_CREATE 2136 +#define WT_STAT_DSRC_CURSOR_CREATE 2140 /*! * cursor: cursor next calls that skip due to a globally visible history * store tombstone */ -#define WT_STAT_DSRC_CURSOR_NEXT_HS_TOMBSTONE 2137 +#define WT_STAT_DSRC_CURSOR_NEXT_HS_TOMBSTONE 2141 /*! * cursor: cursor next calls that skip greater than or equal to 100 * entries */ -#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_GE_100 2138 +#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_GE_100 2142 /*! cursor: cursor next calls that skip less than 100 entries */ -#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_LT_100 2139 +#define WT_STAT_DSRC_CURSOR_NEXT_SKIP_LT_100 2143 /*! * cursor: cursor prev calls that skip due to a globally visible history * store tombstone */ -#define WT_STAT_DSRC_CURSOR_PREV_HS_TOMBSTONE 2140 +#define WT_STAT_DSRC_CURSOR_PREV_HS_TOMBSTONE 2144 /*! * cursor: cursor prev calls that skip greater than or equal to 100 * entries */ -#define WT_STAT_DSRC_CURSOR_PREV_SKIP_GE_100 2141 +#define WT_STAT_DSRC_CURSOR_PREV_SKIP_GE_100 2145 /*! cursor: cursor prev calls that skip less than 100 entries */ -#define WT_STAT_DSRC_CURSOR_PREV_SKIP_LT_100 2142 +#define WT_STAT_DSRC_CURSOR_PREV_SKIP_LT_100 2146 /*! cursor: insert calls */ -#define WT_STAT_DSRC_CURSOR_INSERT 2143 +#define WT_STAT_DSRC_CURSOR_INSERT 2147 /*! cursor: insert key and value bytes */ -#define WT_STAT_DSRC_CURSOR_INSERT_BYTES 2144 +#define WT_STAT_DSRC_CURSOR_INSERT_BYTES 2148 /*! cursor: modify */ -#define WT_STAT_DSRC_CURSOR_MODIFY 2145 +#define WT_STAT_DSRC_CURSOR_MODIFY 2149 /*! cursor: modify key and value bytes affected */ -#define WT_STAT_DSRC_CURSOR_MODIFY_BYTES 2146 +#define WT_STAT_DSRC_CURSOR_MODIFY_BYTES 2150 /*! cursor: modify value bytes modified */ -#define WT_STAT_DSRC_CURSOR_MODIFY_BYTES_TOUCH 2147 +#define WT_STAT_DSRC_CURSOR_MODIFY_BYTES_TOUCH 2151 /*! cursor: next calls */ -#define WT_STAT_DSRC_CURSOR_NEXT 2148 +#define WT_STAT_DSRC_CURSOR_NEXT 2152 /*! cursor: open cursor count */ -#define WT_STAT_DSRC_CURSOR_OPEN_COUNT 2149 +#define WT_STAT_DSRC_CURSOR_OPEN_COUNT 2153 /*! cursor: operation restarted */ -#define WT_STAT_DSRC_CURSOR_RESTART 2150 +#define WT_STAT_DSRC_CURSOR_RESTART 2154 /*! cursor: prev calls */ -#define WT_STAT_DSRC_CURSOR_PREV 2151 +#define WT_STAT_DSRC_CURSOR_PREV 2155 /*! cursor: remove calls */ -#define WT_STAT_DSRC_CURSOR_REMOVE 2152 +#define WT_STAT_DSRC_CURSOR_REMOVE 2156 /*! cursor: remove key bytes removed */ -#define WT_STAT_DSRC_CURSOR_REMOVE_BYTES 2153 +#define WT_STAT_DSRC_CURSOR_REMOVE_BYTES 2157 /*! cursor: reserve calls */ -#define WT_STAT_DSRC_CURSOR_RESERVE 2154 +#define WT_STAT_DSRC_CURSOR_RESERVE 2158 /*! cursor: reset calls */ -#define WT_STAT_DSRC_CURSOR_RESET 2155 +#define WT_STAT_DSRC_CURSOR_RESET 2159 /*! cursor: search calls */ -#define WT_STAT_DSRC_CURSOR_SEARCH 2156 +#define WT_STAT_DSRC_CURSOR_SEARCH 2160 /*! cursor: search history store calls */ -#define WT_STAT_DSRC_CURSOR_SEARCH_HS 2157 +#define WT_STAT_DSRC_CURSOR_SEARCH_HS 2161 /*! cursor: search near calls */ -#define WT_STAT_DSRC_CURSOR_SEARCH_NEAR 2158 +#define WT_STAT_DSRC_CURSOR_SEARCH_NEAR 2162 /*! cursor: truncate calls */ -#define WT_STAT_DSRC_CURSOR_TRUNCATE 2159 +#define WT_STAT_DSRC_CURSOR_TRUNCATE 2163 /*! cursor: update calls */ -#define WT_STAT_DSRC_CURSOR_UPDATE 2160 +#define WT_STAT_DSRC_CURSOR_UPDATE 2164 /*! cursor: update key and value bytes */ -#define WT_STAT_DSRC_CURSOR_UPDATE_BYTES 2161 +#define WT_STAT_DSRC_CURSOR_UPDATE_BYTES 2165 /*! cursor: update value size change */ -#define WT_STAT_DSRC_CURSOR_UPDATE_BYTES_CHANGED 2162 +#define WT_STAT_DSRC_CURSOR_UPDATE_BYTES_CHANGED 2166 /*! reconciliation: approximate byte size of timestamps in pages written */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_BYTES_TS 2163 +#define WT_STAT_DSRC_REC_TIME_WINDOW_BYTES_TS 2167 /*! * reconciliation: approximate byte size of transaction IDs in pages * written */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_BYTES_TXN 2164 +#define WT_STAT_DSRC_REC_TIME_WINDOW_BYTES_TXN 2168 /*! reconciliation: dictionary matches */ -#define WT_STAT_DSRC_REC_DICTIONARY 2165 +#define WT_STAT_DSRC_REC_DICTIONARY 2169 /*! reconciliation: fast-path pages deleted */ -#define WT_STAT_DSRC_REC_PAGE_DELETE_FAST 2166 +#define WT_STAT_DSRC_REC_PAGE_DELETE_FAST 2170 /*! * reconciliation: internal page key bytes discarded using suffix * compression */ -#define WT_STAT_DSRC_REC_SUFFIX_COMPRESSION 2167 +#define WT_STAT_DSRC_REC_SUFFIX_COMPRESSION 2171 /*! reconciliation: internal page multi-block writes */ -#define WT_STAT_DSRC_REC_MULTIBLOCK_INTERNAL 2168 +#define WT_STAT_DSRC_REC_MULTIBLOCK_INTERNAL 2172 /*! reconciliation: internal-page overflow keys */ -#define WT_STAT_DSRC_REC_OVERFLOW_KEY_INTERNAL 2169 +#define WT_STAT_DSRC_REC_OVERFLOW_KEY_INTERNAL 2173 /*! reconciliation: leaf page key bytes discarded using prefix compression */ -#define WT_STAT_DSRC_REC_PREFIX_COMPRESSION 2170 +#define WT_STAT_DSRC_REC_PREFIX_COMPRESSION 2174 /*! reconciliation: leaf page multi-block writes */ -#define WT_STAT_DSRC_REC_MULTIBLOCK_LEAF 2171 +#define WT_STAT_DSRC_REC_MULTIBLOCK_LEAF 2175 /*! reconciliation: leaf-page overflow keys */ -#define WT_STAT_DSRC_REC_OVERFLOW_KEY_LEAF 2172 +#define WT_STAT_DSRC_REC_OVERFLOW_KEY_LEAF 2176 /*! reconciliation: maximum blocks required for a page */ -#define WT_STAT_DSRC_REC_MULTIBLOCK_MAX 2173 +#define WT_STAT_DSRC_REC_MULTIBLOCK_MAX 2177 /*! reconciliation: overflow values written */ -#define WT_STAT_DSRC_REC_OVERFLOW_VALUE 2174 +#define WT_STAT_DSRC_REC_OVERFLOW_VALUE 2178 /*! reconciliation: page checksum matches */ -#define WT_STAT_DSRC_REC_PAGE_MATCH 2175 +#define WT_STAT_DSRC_REC_PAGE_MATCH 2179 /*! reconciliation: page reconciliation calls */ -#define WT_STAT_DSRC_REC_PAGES 2176 +#define WT_STAT_DSRC_REC_PAGES 2180 /*! reconciliation: page reconciliation calls for eviction */ -#define WT_STAT_DSRC_REC_PAGES_EVICTION 2177 +#define WT_STAT_DSRC_REC_PAGES_EVICTION 2181 /*! reconciliation: pages deleted */ -#define WT_STAT_DSRC_REC_PAGE_DELETE 2178 +#define WT_STAT_DSRC_REC_PAGE_DELETE 2182 /*! * reconciliation: pages written including an aggregated newest start * durable timestamp */ -#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 2179 +#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 2183 /*! * reconciliation: pages written including an aggregated newest stop * durable timestamp */ -#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 2180 +#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 2184 /*! * reconciliation: pages written including an aggregated newest stop * timestamp */ -#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_TS 2181 +#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_TS 2185 /*! * reconciliation: pages written including an aggregated newest stop * transaction ID */ -#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_TXN 2182 +#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_STOP_TXN 2186 /*! * reconciliation: pages written including an aggregated newest * transaction ID */ -#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_TXN 2183 +#define WT_STAT_DSRC_REC_TIME_AGGR_NEWEST_TXN 2187 /*! * reconciliation: pages written including an aggregated oldest start * timestamp */ -#define WT_STAT_DSRC_REC_TIME_AGGR_OLDEST_START_TS 2184 +#define WT_STAT_DSRC_REC_TIME_AGGR_OLDEST_START_TS 2188 /*! reconciliation: pages written including an aggregated prepare */ -#define WT_STAT_DSRC_REC_TIME_AGGR_PREPARED 2185 +#define WT_STAT_DSRC_REC_TIME_AGGR_PREPARED 2189 /*! reconciliation: pages written including at least one prepare */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_PREPARED 2186 +#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_PREPARED 2190 /*! * reconciliation: pages written including at least one start durable * timestamp */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 2187 +#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 2191 /*! reconciliation: pages written including at least one start timestamp */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_START_TS 2188 +#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_START_TS 2192 /*! * reconciliation: pages written including at least one start transaction * ID */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_START_TXN 2189 +#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_START_TXN 2193 /*! * reconciliation: pages written including at least one stop durable * timestamp */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 2190 +#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 2194 /*! reconciliation: pages written including at least one stop timestamp */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_STOP_TS 2191 +#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_STOP_TS 2195 /*! * reconciliation: pages written including at least one stop transaction * ID */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_STOP_TXN 2192 +#define WT_STAT_DSRC_REC_TIME_WINDOW_PAGES_STOP_TXN 2196 /*! reconciliation: records written including a prepare */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_PREPARED 2193 +#define WT_STAT_DSRC_REC_TIME_WINDOW_PREPARED 2197 /*! reconciliation: records written including a start durable timestamp */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_DURABLE_START_TS 2194 +#define WT_STAT_DSRC_REC_TIME_WINDOW_DURABLE_START_TS 2198 /*! reconciliation: records written including a start timestamp */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_START_TS 2195 +#define WT_STAT_DSRC_REC_TIME_WINDOW_START_TS 2199 /*! reconciliation: records written including a start transaction ID */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_START_TXN 2196 +#define WT_STAT_DSRC_REC_TIME_WINDOW_START_TXN 2200 /*! reconciliation: records written including a stop durable timestamp */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_DURABLE_STOP_TS 2197 +#define WT_STAT_DSRC_REC_TIME_WINDOW_DURABLE_STOP_TS 2201 /*! reconciliation: records written including a stop timestamp */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_STOP_TS 2198 +#define WT_STAT_DSRC_REC_TIME_WINDOW_STOP_TS 2202 /*! reconciliation: records written including a stop transaction ID */ -#define WT_STAT_DSRC_REC_TIME_WINDOW_STOP_TXN 2199 +#define WT_STAT_DSRC_REC_TIME_WINDOW_STOP_TXN 2203 /*! session: object compaction */ -#define WT_STAT_DSRC_SESSION_COMPACT 2200 +#define WT_STAT_DSRC_SESSION_COMPACT 2204 /*! session: tiered operations dequeued and processed */ -#define WT_STAT_DSRC_TIERED_WORK_UNITS_DEQUEUED 2201 +#define WT_STAT_DSRC_TIERED_WORK_UNITS_DEQUEUED 2205 /*! session: tiered operations scheduled */ -#define WT_STAT_DSRC_TIERED_WORK_UNITS_CREATED 2202 +#define WT_STAT_DSRC_TIERED_WORK_UNITS_CREATED 2206 /*! session: tiered storage local retention time (secs) */ -#define WT_STAT_DSRC_TIERED_RETENTION 2203 +#define WT_STAT_DSRC_TIERED_RETENTION 2207 /*! session: tiered storage object size */ -#define WT_STAT_DSRC_TIERED_OBJECT_SIZE 2204 +#define WT_STAT_DSRC_TIERED_OBJECT_SIZE 2208 /*! transaction: race to read prepared update retry */ -#define WT_STAT_DSRC_TXN_READ_RACE_PREPARE_UPDATE 2205 +#define WT_STAT_DSRC_TXN_READ_RACE_PREPARE_UPDATE 2209 /*! * transaction: rollback to stable history store records with stop * timestamps older than newer records */ -#define WT_STAT_DSRC_TXN_RTS_HS_STOP_OLDER_THAN_NEWER_START 2206 +#define WT_STAT_DSRC_TXN_RTS_HS_STOP_OLDER_THAN_NEWER_START 2210 /*! transaction: rollback to stable inconsistent checkpoint */ -#define WT_STAT_DSRC_TXN_RTS_INCONSISTENT_CKPT 2207 +#define WT_STAT_DSRC_TXN_RTS_INCONSISTENT_CKPT 2211 /*! transaction: rollback to stable keys removed */ -#define WT_STAT_DSRC_TXN_RTS_KEYS_REMOVED 2208 +#define WT_STAT_DSRC_TXN_RTS_KEYS_REMOVED 2212 /*! transaction: rollback to stable keys restored */ -#define WT_STAT_DSRC_TXN_RTS_KEYS_RESTORED 2209 +#define WT_STAT_DSRC_TXN_RTS_KEYS_RESTORED 2213 /*! transaction: rollback to stable restored tombstones from history store */ -#define WT_STAT_DSRC_TXN_RTS_HS_RESTORE_TOMBSTONES 2210 +#define WT_STAT_DSRC_TXN_RTS_HS_RESTORE_TOMBSTONES 2214 /*! transaction: rollback to stable restored updates from history store */ -#define WT_STAT_DSRC_TXN_RTS_HS_RESTORE_UPDATES 2211 +#define WT_STAT_DSRC_TXN_RTS_HS_RESTORE_UPDATES 2215 /*! transaction: rollback to stable skipping delete rle */ -#define WT_STAT_DSRC_TXN_RTS_DELETE_RLE_SKIPPED 2212 +#define WT_STAT_DSRC_TXN_RTS_DELETE_RLE_SKIPPED 2216 /*! transaction: rollback to stable skipping stable rle */ -#define WT_STAT_DSRC_TXN_RTS_STABLE_RLE_SKIPPED 2213 +#define WT_STAT_DSRC_TXN_RTS_STABLE_RLE_SKIPPED 2217 /*! transaction: rollback to stable sweeping history store keys */ -#define WT_STAT_DSRC_TXN_RTS_SWEEP_HS_KEYS 2214 +#define WT_STAT_DSRC_TXN_RTS_SWEEP_HS_KEYS 2218 /*! transaction: rollback to stable updates removed from history store */ -#define WT_STAT_DSRC_TXN_RTS_HS_REMOVED 2215 +#define WT_STAT_DSRC_TXN_RTS_HS_REMOVED 2219 /*! transaction: transaction checkpoints due to obsolete pages */ -#define WT_STAT_DSRC_TXN_CHECKPOINT_OBSOLETE_APPLIED 2216 +#define WT_STAT_DSRC_TXN_CHECKPOINT_OBSOLETE_APPLIED 2220 /*! transaction: update conflicts */ -#define WT_STAT_DSRC_TXN_UPDATE_CONFLICT 2217 +#define WT_STAT_DSRC_TXN_UPDATE_CONFLICT 2221 /*! * @} diff --git a/src/third_party/wiredtiger/src/reconcile/rec_col.c b/src/third_party/wiredtiger/src/reconcile/rec_col.c index 8000026c58b..03f075e7cb0 100644 --- a/src/third_party/wiredtiger/src/reconcile/rec_col.c +++ b/src/third_party/wiredtiger/src/reconcile/rec_col.c @@ -824,9 +824,15 @@ record_loop: if (hs_cursor == NULL) WT_ERR(__wt_curhs_open(session, NULL, &hs_cursor)); - /* From WT_TS_NONE to delete all the history store content of the key. */ - WT_ERR(__wt_hs_delete_key_from_ts(session, hs_cursor, btree->id, - &hs_recno_key, WT_TS_NONE, false, F_ISSET(r, WT_REC_CHECKPOINT_RUNNING))); + /* + * From WT_TS_NONE delete all the history store content of the key. This + * path will never be taken for a mixed-mode deletion being evicted and with + * a checkpoint that started prior to the eviction starting its + * reconciliation as previous checks done while selecting an update will + * detect that. + */ + WT_ERR(__wt_hs_delete_key_from_ts( + session, hs_cursor, btree->id, &hs_recno_key, WT_TS_NONE, false, false)); WT_STAT_CONN_INCR(session, cache_hs_key_truncate_onpage_removal); WT_STAT_DATA_INCR(session, cache_hs_key_truncate_onpage_removal); diff --git a/src/third_party/wiredtiger/src/reconcile/rec_row.c b/src/third_party/wiredtiger/src/reconcile/rec_row.c index 002086f540e..6817ee53899 100644 --- a/src/third_party/wiredtiger/src/reconcile/rec_row.c +++ b/src/third_party/wiredtiger/src/reconcile/rec_row.c @@ -927,9 +927,14 @@ __wt_rec_row_leaf( if (hs_cursor == NULL) WT_ERR(__wt_curhs_open(session, NULL, &hs_cursor)); - /* From WT_TS_NONE to delete all the history store content of the key. */ - WT_ERR(__wt_hs_delete_key_from_ts(session, hs_cursor, btree->id, tmpkey, - WT_TS_NONE, false, F_ISSET(r, WT_REC_CHECKPOINT_RUNNING))); + /* + * From WT_TS_NONE delete all the history store content of the key. This path + * will never be taken for a mixed-mode deletion being evicted and with a + * checkpoint that started prior to the eviction starting its reconciliation as + * previous checks done while selecting an update will detect that. + */ + WT_ERR(__wt_hs_delete_key_from_ts( + session, hs_cursor, btree->id, tmpkey, WT_TS_NONE, false, false)); /* Fail 1% of the time. */ if (F_ISSET(r, WT_REC_EVICT) && diff --git a/src/third_party/wiredtiger/src/reconcile/rec_visibility.c b/src/third_party/wiredtiger/src/reconcile/rec_visibility.c index 8caeac903b4..63b2c73c0d5 100644 --- a/src/third_party/wiredtiger/src/reconcile/rec_visibility.c +++ b/src/third_party/wiredtiger/src/reconcile/rec_visibility.c @@ -205,9 +205,10 @@ __rec_need_save_upd( return (true); /* - * Save updates for any reconciliation that doesn't involve history store (in-memory database - * and fixed length column store), except when the selected stop time point or the selected - * start time point is globally visible. + * Don't save updates for any reconciliation that doesn't involve history store (in-memory + * database, fixed length column store, metadata, and history store reconciliation itself), + * except when the selected stop time point or the selected start time point is not globally + * visible for in memory database and fixed length column store. */ if (!F_ISSET(r, WT_REC_HS) && !F_ISSET(r, WT_REC_IN_MEMORY) && r->page->type != WT_PAGE_COL_FIX) return (false); @@ -232,20 +233,147 @@ __rec_need_save_upd( * equal to the start time point. While unusual, it is permitted for a single transaction to * insert and then remove a record. We don't want to generate a warning in that case. */ -static inline void +static inline bool __timestamp_out_of_order_fix(WT_SESSION_IMPL *session, WT_TIME_WINDOW *select_tw) { char time_string[WT_TIME_STRING_SIZE]; - if (select_tw->stop_ts < select_tw->start_ts || - (select_tw->stop_ts == select_tw->start_ts && select_tw->stop_txn < select_tw->start_txn)) { + /* + * When supporting read-uncommitted it was possible for the stop_txn to be less than the + * start_txn, this is no longer true so assert that we don't encounter it. + */ + WT_ASSERT(session, select_tw->stop_txn >= select_tw->start_txn); + + if (select_tw->stop_ts < select_tw->start_ts) { __wt_verbose(session, WT_VERB_TIMESTAMP, "Warning: fixing out-of-order timestamps remove earlier than value; time window %s", __wt_time_window_to_string(select_tw, time_string)); select_tw->durable_start_ts = select_tw->durable_stop_ts; select_tw->start_ts = select_tw->stop_ts; + return (true); + } + return (false); +} + +/* + * __rec_validate_upd_chain -- + * Check the update chain for conditions that would prevent its insertion into the history + * store. Return EBUSY if the update chain cannot be inserted into the history store at this + * time. + */ +static int +__rec_validate_upd_chain(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_UPDATE *select_upd, + WT_TIME_WINDOW *select_tw, WT_CELL_UNPACK_KV *vpack) +{ + WT_UPDATE *prev_upd, *upd; + + /* + * There is no selected update to go to disk as such we don't need to check the updates + * following it. + */ + if (select_upd == NULL) + return (0); + + /* + * No need to check out of order timestamps for any reconciliation that doesn't involve history + * store (in-memory database, fixed length column store, metadata, and history store + * reconciliation itself). + */ + if (!F_ISSET(r, WT_REC_HS)) + return (0); + + /* + * If eviction reconciliation starts before checkpoint, it is fine to evict out of order + * timestamp updates. + */ + if (!F_ISSET(r, WT_REC_CHECKPOINT_RUNNING)) + return (0); + + /* + * The selected time window may contain information that isn't visible given the selected + * update, as such we have to check it separately. This is true when there is a tombstone ahead + * of the selected update. + */ + if (select_tw->stop_ts < select_tw->start_ts) { + WT_STAT_CONN_DATA_INCR(session, cache_eviction_blocked_ooo_checkpoint_race_2); + return (EBUSY); + } + + /* + * Rollback to stable may restore older updates from the data store or history store. In this + * case, the restored update has older update than the onpage value, which is expected. + * Reconciliation may restore the onpage value to the update chain. In this case, no need to + * check further as the value is the same as the onpage value which means we processed this + * update chain in a previous round of reconciliation. If we have a prepared update restored + * from the onpage value, no need to check as well because the update chain should only contain + * prepared updates from the same transaction. + */ + if (F_ISSET(select_upd, + WT_UPDATE_RESTORED_FROM_DS | WT_UPDATE_RESTORED_FROM_HS | + WT_UPDATE_PREPARE_RESTORED_FROM_DS)) + return (0); + + /* Loop forward from update after the selected on-page update. */ + for (prev_upd = select_upd, upd = select_upd->next; upd != NULL; upd = upd->next) { + if (upd->txnid == WT_TXN_ABORTED) + continue; + + /* If we have a prepared update, durable timestamp cannot be out of order. */ + WT_ASSERT(session, + prev_upd->prepare_state == WT_PREPARE_INPROGRESS || + prev_upd->start_ts == prev_upd->durable_ts || prev_upd->durable_ts >= upd->durable_ts); + + /* Validate that the updates older than us have older timestamps. */ + if (prev_upd->start_ts < upd->start_ts) { + WT_STAT_CONN_DATA_INCR(session, cache_eviction_blocked_ooo_checkpoint_race_4); + return (EBUSY); + } + + /* + * Rollback to stable may restore older updates from the data store or history store. In + * this case, the restored update has older update than the onpage value, which is expected. + * Reconciliation may restore the onpage value to the update chain. In this case, no need to + * check further as the value is the same as the onpage value. If we have a committed + * prepared update restored from the onpage value, no need to check further as well because + * the update chain after it should only contain committed prepared updates from the same + * transaction. + */ + if (F_ISSET(upd, + WT_UPDATE_RESTORED_FROM_DS | WT_UPDATE_RESTORED_FROM_HS | + WT_UPDATE_PREPARE_RESTORED_FROM_DS)) + return (0); + + prev_upd = upd; + } + + /* + * Check that the on-page time window isn't out-of-order. Don't check against ondisk prepared + * update. It is either committed or rolled back if we are here. If we haven't seen an update + * with the flag WT_UPDATE_RESTORED_FROM_DS we check against the ondisk value. + * + * In the case of checkpoint reconciliation the ondisk value could be an update in the middle of + * the update chain but checkpoint won't replace the page image as such it will be the previous + * reconciliations ondisk value that we will be comparing against. + */ + if (vpack != NULL && !vpack->tw.prepare) { + /* If we have a prepared update, durable timestamp cannot be out of order. */ + WT_ASSERT(session, + prev_upd->prepare_state == WT_PREPARE_INPROGRESS || + prev_upd->start_ts == prev_upd->durable_ts || + prev_upd->durable_ts >= vpack->tw.durable_start_ts); + WT_ASSERT(session, + prev_upd->prepare_state == WT_PREPARE_INPROGRESS || + prev_upd->start_ts == prev_upd->durable_ts || !WT_TIME_WINDOW_HAS_STOP(&vpack->tw) || + prev_upd->durable_ts >= vpack->tw.durable_stop_ts); + if (prev_upd->start_ts < vpack->tw.start_ts || + (WT_TIME_WINDOW_HAS_STOP(&vpack->tw) && prev_upd->start_ts < vpack->tw.stop_ts)) { + WT_STAT_CONN_DATA_INCR(session, cache_eviction_blocked_ooo_checkpoint_race_1); + return (EBUSY); + } } + + return (0); } /* @@ -260,7 +388,7 @@ __wt_rec_upd_select(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_INSERT *ins, v WT_DECL_RET; WT_PAGE *page; WT_TIME_WINDOW *select_tw; - WT_UPDATE *first_txn_upd, *first_upd, *upd, *last_upd, *tombstone; + WT_UPDATE *first_txn_upd, *first_upd, *onpage_upd, *upd, *last_upd, *tombstone; wt_timestamp_t max_ts; size_t upd_memsize; uint64_t max_txn, session_txnid, txnid; @@ -276,7 +404,7 @@ __wt_rec_upd_select(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_INSERT *ins, v WT_TIME_WINDOW_INIT(select_tw); page = r->page; - first_txn_upd = upd = last_upd = tombstone = NULL; + first_txn_upd = onpage_upd = upd = last_upd = tombstone = NULL; upd_memsize = 0; max_ts = WT_TS_NONE; max_txn = WT_TXN_NONE; @@ -539,8 +667,6 @@ __wt_rec_upd_select(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_INSERT *ins, v } } - __timestamp_out_of_order_fix(session, select_tw); - /* * Track the most recent transaction in the page. We store this in the tree at the end of * reconciliation in the service of checkpoints, it is used to avoid discarding trees from @@ -557,6 +683,28 @@ __wt_rec_upd_select(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_INSERT *ins, v if (has_newer_updates) r->leave_dirty = true; + onpage_upd = upd_select->upd != NULL && upd_select->upd->type == WT_UPDATE_TOMBSTONE ? + NULL : + upd_select->upd; + + /* Check the update chain for conditions that could prevent it's eviction. */ + WT_ERR(__rec_validate_upd_chain(session, r, onpage_upd, select_tw, vpack)); + + /* + * Fixup any out of order timestamps, assert that checkpoint wasn't running when this round of + * reconciliation started. + * + * Returning EBUSY here is okay as the previous call to validate the update chain wouldn't have + * caught the situation where only a tombstone is selected. + */ + if (__timestamp_out_of_order_fix(session, select_tw) && F_ISSET(r, WT_REC_HS) && + F_ISSET(r, WT_REC_CHECKPOINT_RUNNING)) { + /* Catch this case in diagnostic builds. */ + WT_STAT_CONN_DATA_INCR(session, cache_eviction_blocked_ooo_checkpoint_race_3); + WT_ASSERT(session, false); + WT_ERR(EBUSY); + } + /* * The update doesn't have any further updates that need to be written to the history store, * skip saving the update as saving the update will cause reconciliation to think there is work @@ -573,10 +721,9 @@ __wt_rec_upd_select(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_INSERT *ins, v supd_restore = F_ISSET(r, WT_REC_EVICT) && (has_newer_updates || F_ISSET(S2C(session), WT_CONN_IN_MEMORY) || page->type == WT_PAGE_COL_FIX); - WT_ERR(__rec_update_save(session, r, ins, ripcip, - upd_select->upd != NULL && upd_select->upd->type == WT_UPDATE_TOMBSTONE ? NULL : - upd_select->upd, - supd_restore, upd_memsize)); + + WT_ERR(__rec_update_save(session, r, ins, ripcip, onpage_upd, supd_restore, upd_memsize)); + /* * Mark the selected update (and potentially the tombstone preceding it) as being destined * for the data store. Subsequent reconciliations should know that they can select this diff --git a/src/third_party/wiredtiger/src/support/stat.c b/src/third_party/wiredtiger/src/support/stat.c index 52db5e50094..d224baab653 100644 --- a/src/third_party/wiredtiger/src/support/stat.c +++ b/src/third_party/wiredtiger/src/support/stat.c @@ -52,6 +52,14 @@ static const char *const __stats_dsrc_desc[] = { "cache: checkpoint blocked page eviction", "cache: checkpoint of history store file blocked non-history store page eviction", "cache: data source pages selected for eviction unable to be evicted", + "cache: eviction gave up due to detecting an out of order on disk value behind the last update " + "on the chain", + "cache: eviction gave up due to detecting an out of order tombstone ahead of the selected on " + "disk update", + "cache: eviction gave up due to detecting an out of order tombstone ahead of the selected on " + "disk update after validating the update chain", + "cache: eviction gave up due to detecting out of order timestamps on the update chain after the " + "selected on disk update", "cache: eviction walk passes of a file", "cache: eviction walk target pages histogram - 0-9", "cache: eviction walk target pages histogram - 10-31", @@ -316,6 +324,10 @@ __wt_stat_dsrc_clear_single(WT_DSRC_STATS *stats) stats->cache_eviction_checkpoint = 0; stats->cache_eviction_blocked_checkpoint_hs = 0; stats->cache_eviction_fail = 0; + stats->cache_eviction_blocked_ooo_checkpoint_race_1 = 0; + stats->cache_eviction_blocked_ooo_checkpoint_race_2 = 0; + stats->cache_eviction_blocked_ooo_checkpoint_race_3 = 0; + stats->cache_eviction_blocked_ooo_checkpoint_race_4 = 0; stats->cache_eviction_walk_passes = 0; stats->cache_eviction_target_page_lt10 = 0; stats->cache_eviction_target_page_lt32 = 0; @@ -560,6 +572,14 @@ __wt_stat_dsrc_aggregate_single(WT_DSRC_STATS *from, WT_DSRC_STATS *to) to->cache_eviction_checkpoint += from->cache_eviction_checkpoint; to->cache_eviction_blocked_checkpoint_hs += from->cache_eviction_blocked_checkpoint_hs; to->cache_eviction_fail += from->cache_eviction_fail; + to->cache_eviction_blocked_ooo_checkpoint_race_1 += + from->cache_eviction_blocked_ooo_checkpoint_race_1; + to->cache_eviction_blocked_ooo_checkpoint_race_2 += + from->cache_eviction_blocked_ooo_checkpoint_race_2; + to->cache_eviction_blocked_ooo_checkpoint_race_3 += + from->cache_eviction_blocked_ooo_checkpoint_race_3; + to->cache_eviction_blocked_ooo_checkpoint_race_4 += + from->cache_eviction_blocked_ooo_checkpoint_race_4; to->cache_eviction_walk_passes += from->cache_eviction_walk_passes; to->cache_eviction_target_page_lt10 += from->cache_eviction_target_page_lt10; to->cache_eviction_target_page_lt32 += from->cache_eviction_target_page_lt32; @@ -799,6 +819,14 @@ __wt_stat_dsrc_aggregate(WT_DSRC_STATS **from, WT_DSRC_STATS *to) to->cache_eviction_blocked_checkpoint_hs += WT_STAT_READ(from, cache_eviction_blocked_checkpoint_hs); to->cache_eviction_fail += WT_STAT_READ(from, cache_eviction_fail); + to->cache_eviction_blocked_ooo_checkpoint_race_1 += + WT_STAT_READ(from, cache_eviction_blocked_ooo_checkpoint_race_1); + to->cache_eviction_blocked_ooo_checkpoint_race_2 += + WT_STAT_READ(from, cache_eviction_blocked_ooo_checkpoint_race_2); + to->cache_eviction_blocked_ooo_checkpoint_race_3 += + WT_STAT_READ(from, cache_eviction_blocked_ooo_checkpoint_race_3); + to->cache_eviction_blocked_ooo_checkpoint_race_4 += + WT_STAT_READ(from, cache_eviction_blocked_ooo_checkpoint_race_4); to->cache_eviction_walk_passes += WT_STAT_READ(from, cache_eviction_walk_passes); to->cache_eviction_target_page_lt10 += WT_STAT_READ(from, cache_eviction_target_page_lt10); to->cache_eviction_target_page_lt32 += WT_STAT_READ(from, cache_eviction_target_page_lt32); @@ -1031,6 +1059,14 @@ static const char *const __stats_connection_desc[] = { "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 gave up due to detecting an out of order on disk value behind the last update " + "on the chain", + "cache: eviction gave up due to detecting an out of order tombstone ahead of the selected on " + "disk update", + "cache: eviction gave up due to detecting an out of order tombstone ahead of the selected on " + "disk update after validating the update chain", + "cache: eviction gave up due to detecting out of order timestamps on the update chain after the " + "selected on disk update", "cache: eviction passes of a file", "cache: eviction server candidate queue empty when topping up", "cache: eviction server candidate queue not empty when topping up", @@ -1569,6 +1605,10 @@ __wt_stat_connection_clear_single(WT_CONNECTION_STATS *stats) stats->cache_eviction_get_ref_empty2 = 0; /* not clearing cache_eviction_aggressive_set */ /* not clearing cache_eviction_empty_score */ + stats->cache_eviction_blocked_ooo_checkpoint_race_1 = 0; + stats->cache_eviction_blocked_ooo_checkpoint_race_2 = 0; + stats->cache_eviction_blocked_ooo_checkpoint_race_3 = 0; + stats->cache_eviction_blocked_ooo_checkpoint_race_4 = 0; stats->cache_eviction_walk_passes = 0; stats->cache_eviction_queue_empty = 0; stats->cache_eviction_queue_not_empty = 0; @@ -2072,6 +2112,14 @@ __wt_stat_connection_aggregate(WT_CONNECTION_STATS **from, WT_CONNECTION_STATS * to->cache_eviction_get_ref_empty2 += 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_blocked_ooo_checkpoint_race_1 += + WT_STAT_READ(from, cache_eviction_blocked_ooo_checkpoint_race_1); + to->cache_eviction_blocked_ooo_checkpoint_race_2 += + WT_STAT_READ(from, cache_eviction_blocked_ooo_checkpoint_race_2); + to->cache_eviction_blocked_ooo_checkpoint_race_3 += + WT_STAT_READ(from, cache_eviction_blocked_ooo_checkpoint_race_3); + to->cache_eviction_blocked_ooo_checkpoint_race_4 += + WT_STAT_READ(from, cache_eviction_blocked_ooo_checkpoint_race_4); to->cache_eviction_walk_passes += WT_STAT_READ(from, cache_eviction_walk_passes); to->cache_eviction_queue_empty += WT_STAT_READ(from, cache_eviction_queue_empty); to->cache_eviction_queue_not_empty += WT_STAT_READ(from, cache_eviction_queue_not_empty); diff --git a/src/third_party/wiredtiger/test/suite/test_hs24.py b/src/third_party/wiredtiger/test/suite/test_hs24.py index 08d6f303bc5..47929688071 100644 --- a/src/third_party/wiredtiger/test/suite/test_hs24.py +++ b/src/third_party/wiredtiger/test/suite/test_hs24.py @@ -33,17 +33,24 @@ from wtscenario import make_scenarios # test_hs24.py # Test that out of order timestamp fix racing with checkpointing the history store doesn't create inconsistent checkpoint. class test_hs24(wttest.WiredTigerTestCase): - conn_config = 'cache_size=50MB,timing_stress_for_test=(history_store_checkpoint_delay)' - session_config = 'isolation=snapshot' - uri = 'table:test_hs24' - numrows = 2000 - key_format_values = [ ('column', dict(key_format='r')), ('integer_row', dict(key_format='i')), ] - scenarios = make_scenarios(key_format_values) + checkpoint_stress_scenarios = [ + ('checkpoint_slow_stress', dict(checkpoint_stress='checkpoint_slow')), + ('history_store_checkpoint_delay_stress', dict(checkpoint_stress='history_store_checkpoint_delay')), + ] + + scenarios = make_scenarios(key_format_values, checkpoint_stress_scenarios) + + def conn_config(self): + return 'timing_stress_for_test=({})'.format(self.checkpoint_stress) + + session_config = 'isolation=snapshot' + uri = 'table:test_hs24' + numrows = 2000 value1 = 'a' * 500 value2 = 'b' * 500 diff --git a/src/third_party/wiredtiger/test/suite/test_hs_evict_race01.py b/src/third_party/wiredtiger/test/suite/test_hs_evict_race01.py new file mode 100644 index 00000000000..9c3cf62eb24 --- /dev/null +++ b/src/third_party/wiredtiger/test/suite/test_hs_evict_race01.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python +# +# Public Domain 2014-present MongoDB, Inc. +# Public Domain 2008-2014 WiredTiger, Inc. +# +# This is free and unencumbered software released into the public domain. +# +# Anyone is free to copy, modify, publish, use, compile, sell, or +# distribute this software, either in source code form or as a compiled +# binary, for any purpose, commercial or non-commercial, and by any +# means. +# +# In jurisdictions that recognize copyright laws, the author or authors +# of this software dedicate any and all copyright interest in the +# software to the public domain. We make this dedication for the benefit +# of the public at large and to the detriment of our heirs and +# successors. We intend this dedication to be an overt act of +# relinquishment in perpetuity of all present and future rights to this +# software under copyright law. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. + +from time import sleep +import wttest, threading, wiredtiger +from helper import simulate_crash_restart +from wtscenario import make_scenarios + +# Test a bug that can occur when an out of order update gets insert after a checkpoint begins +# but before the checkpoint processes the btree. Evict that update before checkpoint but fail the +# eviction due to out of order timestamps. +# +# Without the related change this test would fail as a result of an inconsistent checkpoint. Due to +# a flag being set on an update incorrectly. Specific ordering is required to reproduce: +# 1. Start a checkpoint, sleep the checkpoint after it takes it snapshot and before it +# processes our btree. +# 2. Insert the out of order update. +# 3. Evict the out of order update. +# 4. Complete the checkpoint. +# 5. Simulate a crash. +# 6. Read the value and see if it matches the expected value. +class test_hs_evict_race01(wttest.WiredTigerTestCase): + conn_config = 'timing_stress_for_test=(checkpoint_slow)' + session_config = 'isolation=snapshot' + uri = 'table:hs_evict_race01' + numrows = 1 + + key_format_values = [ + ('column', dict(key_format='r')), + ('integer_row', dict(key_format='i')), + ] + scenarios = make_scenarios(key_format_values) + value1 = 'aaaaa' + value2 = 'bbbbb' + value3 = 'ccccc' + value4 = 'ddddd' + + def test_out_of_order_ts(self): + self.session.create(self.uri, 'key_format={},value_format=S'.format(self.key_format)) + self.conn.set_timestamp('oldest_timestamp=' + self.timestamp_str(1)) + cursor = self.session.open_cursor(self.uri) + # Insert a value at timestamp 4 + self.session.begin_transaction() + cursor[1] = self.value1 + self.session.commit_transaction('commit_timestamp=' + self.timestamp_str(4)) + # Move the stable timestamp. + self.conn.set_timestamp('stable_timestamp=' + self.timestamp_str(4)) + # Insert a value at timetamp 5 + self.session.begin_transaction() + cursor[1] = self.value2 + self.session.commit_transaction('commit_timestamp=' + self.timestamp_str(5)) + + cursor.close() + + # Create a thread. + ooo_thread = threading.Thread(target=self.out_of_order_update_and_evict) + + # Start the thread + ooo_thread.start() + + # Call for a checkpoint, once finished we will be in the bad state. + self.session.checkpoint() + ooo_thread.join() + simulate_crash_restart(self, '.', "RESTART") + cursor = self.session.open_cursor(self.uri) + self.session.begin_transaction('read_timestamp=' + self.timestamp_str(4)) + self.assertEquals(self.value1, cursor[1]) + self.session.rollback_transaction() + + def out_of_order_update_and_evict(self): + sleep(0.5) + session = self.setUpSessionOpen(self.conn) + cursor = session.open_cursor(self.uri) + session.begin_transaction() + cursor[1] = self.value4 + session.commit_transaction('commit_timestamp=' + self.timestamp_str(4)) + cursor.close() + sleep(1.5) + evict_cursor = session.open_cursor(self.uri, None, "debug=(release_evict)") + evict_cursor.set_key(1) + self.assertEquals(evict_cursor.search(), 0) + evict_cursor.reset() + evict_cursor.close() + session.close() |