diff --git a/dist/stat_data.py b/dist/stat_data.py index 59d094bcd..5dfdfa10f 100644 --- a/dist/stat_data.py +++ b/dist/stat_data.py @@ -819,7 +819,6 @@ dsrc_stats = [ RecStat('rec_multiblock_max', 'maximum blocks required for a page', 'max_aggregate,no_scale'), RecStat('rec_overflow_key_leaf', 'leaf-page overflow keys'), RecStat('rec_overflow_value', 'overflow values written'), - RecStat('rec_page_match', 'page checksum matches'), RecStat('rec_prefix_compression', 'leaf page key bytes discarded using prefix compression', 'size'), RecStat('rec_suffix_compression', 'internal page key bytes discarded using suffix compression', 'size'), RecStat('rec_time_window_pages_prepared', 'pages written including at least one prepare'), @@ -987,6 +986,7 @@ conn_dsrc_stats = [ ########################################## RecStat('rec_page_delete', 'pages deleted'), RecStat('rec_page_delete_fast', 'fast-path pages deleted'), + RecStat('rec_page_image_reuse', 'page image reuse'), RecStat('rec_pages', 'page reconciliation calls'), RecStat('rec_pages_eviction', 'page reconciliation calls for eviction'), RecStat('rec_time_aggr_newest_start_durable_ts', 'pages written including an aggregated newest start durable timestamp '), diff --git a/src/include/stat.h b/src/include/stat.h index bac2ff48e..97799cb11 100644 --- a/src/include/stat.h +++ b/src/include/stat.h @@ -769,6 +769,7 @@ struct __wt_connection_stats { int64_t rec_maximum_milliseconds; int64_t rec_maximum_image_build_milliseconds; int64_t rec_maximum_hs_wrapup_milliseconds; + int64_t rec_page_image_reuse; int64_t rec_pages; int64_t rec_pages_eviction; int64_t rec_pages_with_prepare; @@ -1176,7 +1177,7 @@ struct __wt_dsrc_stats { int64_t rec_overflow_key_leaf; int64_t rec_multiblock_max; int64_t rec_overflow_value; - int64_t rec_page_match; + int64_t rec_page_image_reuse; int64_t rec_pages; int64_t rec_pages_eviction; int64_t rec_page_delete; diff --git a/src/include/timestamp_inline.h b/src/include/timestamp_inline.h index 3f9cc6645..c38862c3a 100644 --- a/src/include/timestamp_inline.h +++ b/src/include/timestamp_inline.h @@ -200,6 +200,14 @@ (dest)->prepare = 1; \ } while (0) +/* Return true if the time aggregates are the same. */ +#define WT_TIME_AGGREGATE_EQUAL(ta1, ta2) \ + ((ta1)->newest_start_durable_ts == (ta2)->newest_start_durable_ts && \ + (ta1)->newest_stop_durable_ts == (ta2)->newest_stop_durable_ts && \ + (ta1)->oldest_start_ts == (ta2)->oldest_start_ts && \ + (ta1)->newest_txn == (ta2)->newest_txn && (ta1)->newest_stop_ts == (ta2)->newest_stop_ts && \ + (ta1)->newest_stop_txn == (ta2)->newest_stop_txn && (ta1)->prepare == (ta2)->prepare) + /* Abstract away checking whether all records in an aggregated time window have been deleted. */ #define WT_TIME_AGGREGATE_ALL_DELETED(ta) ((ta)->newest_stop_ts != WT_TS_MAX) diff --git a/src/include/wiredtiger.in b/src/include/wiredtiger.in index c4c1ed9d5..76818c48e 100644 --- a/src/include/wiredtiger.in +++ b/src/include/wiredtiger.in @@ -6381,441 +6381,443 @@ extern int wiredtiger_extension_terminate(WT_CONNECTION *connection); * history store in a reconciliation */ #define WT_STAT_CONN_REC_MAXIMUM_HS_WRAPUP_MILLISECONDS 1429 +/*! reconciliation: page image reuse */ +#define WT_STAT_CONN_REC_PAGE_IMAGE_REUSE 1430 /*! reconciliation: page reconciliation calls */ -#define WT_STAT_CONN_REC_PAGES 1430 +#define WT_STAT_CONN_REC_PAGES 1431 /*! reconciliation: page reconciliation calls for eviction */ -#define WT_STAT_CONN_REC_PAGES_EVICTION 1431 +#define WT_STAT_CONN_REC_PAGES_EVICTION 1432 /*! * reconciliation: page reconciliation calls that resulted in values with * prepared transaction metadata */ -#define WT_STAT_CONN_REC_PAGES_WITH_PREPARE 1432 +#define WT_STAT_CONN_REC_PAGES_WITH_PREPARE 1433 /*! * reconciliation: page reconciliation calls that resulted in values with * timestamps */ -#define WT_STAT_CONN_REC_PAGES_WITH_TS 1433 +#define WT_STAT_CONN_REC_PAGES_WITH_TS 1434 /*! * reconciliation: page reconciliation calls that resulted in values with * transaction ids */ -#define WT_STAT_CONN_REC_PAGES_WITH_TXN 1434 +#define WT_STAT_CONN_REC_PAGES_WITH_TXN 1435 /*! reconciliation: pages deleted */ -#define WT_STAT_CONN_REC_PAGE_DELETE 1435 +#define WT_STAT_CONN_REC_PAGE_DELETE 1436 /*! * reconciliation: pages written including an aggregated newest start * durable timestamp */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 1436 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_START_DURABLE_TS 1437 /*! * reconciliation: pages written including an aggregated newest stop * durable timestamp */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 1437 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_DURABLE_TS 1438 /*! * reconciliation: pages written including an aggregated newest stop * timestamp */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TS 1438 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TS 1439 /*! * reconciliation: pages written including an aggregated newest stop * transaction ID */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TXN 1439 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_STOP_TXN 1440 /*! * reconciliation: pages written including an aggregated newest * transaction ID */ -#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_TXN 1440 +#define WT_STAT_CONN_REC_TIME_AGGR_NEWEST_TXN 1441 /*! * reconciliation: pages written including an aggregated oldest start * timestamp */ -#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TS 1441 +#define WT_STAT_CONN_REC_TIME_AGGR_OLDEST_START_TS 1442 /*! reconciliation: pages written including an aggregated prepare */ -#define WT_STAT_CONN_REC_TIME_AGGR_PREPARED 1442 +#define WT_STAT_CONN_REC_TIME_AGGR_PREPARED 1443 /*! reconciliation: pages written including at least one prepare state */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_PREPARED 1443 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_PREPARED 1444 /*! * reconciliation: pages written including at least one start durable * timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 1444 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_START_TS 1445 /*! reconciliation: pages written including at least one start timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TS 1445 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TS 1446 /*! * reconciliation: pages written including at least one start transaction * ID */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TXN 1446 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_START_TXN 1447 /*! * reconciliation: pages written including at least one stop durable * timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 1447 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_DURABLE_STOP_TS 1448 /*! reconciliation: pages written including at least one stop timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TS 1448 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TS 1449 /*! * reconciliation: pages written including at least one stop transaction * ID */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TXN 1449 +#define WT_STAT_CONN_REC_TIME_WINDOW_PAGES_STOP_TXN 1450 /*! reconciliation: records written including a prepare state */ -#define WT_STAT_CONN_REC_TIME_WINDOW_PREPARED 1450 +#define WT_STAT_CONN_REC_TIME_WINDOW_PREPARED 1451 /*! reconciliation: records written including a start durable timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_START_TS 1451 +#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_START_TS 1452 /*! reconciliation: records written including a start timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_START_TS 1452 +#define WT_STAT_CONN_REC_TIME_WINDOW_START_TS 1453 /*! reconciliation: records written including a start transaction ID */ -#define WT_STAT_CONN_REC_TIME_WINDOW_START_TXN 1453 +#define WT_STAT_CONN_REC_TIME_WINDOW_START_TXN 1454 /*! reconciliation: records written including a stop durable timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_STOP_TS 1454 +#define WT_STAT_CONN_REC_TIME_WINDOW_DURABLE_STOP_TS 1455 /*! reconciliation: records written including a stop timestamp */ -#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TS 1455 +#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TS 1456 /*! reconciliation: records written including a stop transaction ID */ -#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TXN 1456 +#define WT_STAT_CONN_REC_TIME_WINDOW_STOP_TXN 1457 /*! reconciliation: split bytes currently awaiting free */ -#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1457 +#define WT_STAT_CONN_REC_SPLIT_STASHED_BYTES 1458 /*! reconciliation: split objects currently awaiting free */ -#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1458 +#define WT_STAT_CONN_REC_SPLIT_STASHED_OBJECTS 1459 /*! session: attempts to remove a local object and the object is in use */ -#define WT_STAT_CONN_LOCAL_OBJECTS_INUSE 1459 +#define WT_STAT_CONN_LOCAL_OBJECTS_INUSE 1460 /*! session: flush_tier failed calls */ -#define WT_STAT_CONN_FLUSH_TIER_FAIL 1460 +#define WT_STAT_CONN_FLUSH_TIER_FAIL 1461 /*! session: flush_tier operation calls */ -#define WT_STAT_CONN_FLUSH_TIER 1461 +#define WT_STAT_CONN_FLUSH_TIER 1462 /*! session: flush_tier tables skipped due to no checkpoint */ -#define WT_STAT_CONN_FLUSH_TIER_SKIPPED 1462 +#define WT_STAT_CONN_FLUSH_TIER_SKIPPED 1463 /*! session: flush_tier tables switched */ -#define WT_STAT_CONN_FLUSH_TIER_SWITCHED 1463 +#define WT_STAT_CONN_FLUSH_TIER_SWITCHED 1464 /*! session: local objects removed */ -#define WT_STAT_CONN_LOCAL_OBJECTS_REMOVED 1464 +#define WT_STAT_CONN_LOCAL_OBJECTS_REMOVED 1465 /*! session: open session count */ -#define WT_STAT_CONN_SESSION_OPEN 1465 +#define WT_STAT_CONN_SESSION_OPEN 1466 /*! session: session query timestamp calls */ -#define WT_STAT_CONN_SESSION_QUERY_TS 1466 +#define WT_STAT_CONN_SESSION_QUERY_TS 1467 /*! session: table alter failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1467 +#define WT_STAT_CONN_SESSION_TABLE_ALTER_FAIL 1468 /*! session: table alter successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1468 +#define WT_STAT_CONN_SESSION_TABLE_ALTER_SUCCESS 1469 /*! session: table alter triggering checkpoint calls */ -#define WT_STAT_CONN_SESSION_TABLE_ALTER_TRIGGER_CHECKPOINT 1469 +#define WT_STAT_CONN_SESSION_TABLE_ALTER_TRIGGER_CHECKPOINT 1470 /*! session: table alter unchanged and skipped */ -#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1470 +#define WT_STAT_CONN_SESSION_TABLE_ALTER_SKIP 1471 /*! session: table compact failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1471 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL 1472 /*! session: table compact failed calls due to cache pressure */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL_CACHE_PRESSURE 1472 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_FAIL_CACHE_PRESSURE 1473 /*! session: table compact running */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_RUNNING 1473 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_RUNNING 1474 /*! session: table compact skipped as process would not reduce file size */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SKIPPED 1474 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SKIPPED 1475 /*! session: table compact successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1475 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_SUCCESS 1476 /*! session: table compact timeout */ -#define WT_STAT_CONN_SESSION_TABLE_COMPACT_TIMEOUT 1476 +#define WT_STAT_CONN_SESSION_TABLE_COMPACT_TIMEOUT 1477 /*! session: table create failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1477 +#define WT_STAT_CONN_SESSION_TABLE_CREATE_FAIL 1478 /*! session: table create successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1478 +#define WT_STAT_CONN_SESSION_TABLE_CREATE_SUCCESS 1479 /*! session: table create with import failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_CREATE_IMPORT_FAIL 1479 +#define WT_STAT_CONN_SESSION_TABLE_CREATE_IMPORT_FAIL 1480 /*! session: table create with import successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_CREATE_IMPORT_SUCCESS 1480 +#define WT_STAT_CONN_SESSION_TABLE_CREATE_IMPORT_SUCCESS 1481 /*! session: table drop failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1481 +#define WT_STAT_CONN_SESSION_TABLE_DROP_FAIL 1482 /*! session: table drop successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1482 +#define WT_STAT_CONN_SESSION_TABLE_DROP_SUCCESS 1483 /*! session: table rename failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1483 +#define WT_STAT_CONN_SESSION_TABLE_RENAME_FAIL 1484 /*! session: table rename successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1484 +#define WT_STAT_CONN_SESSION_TABLE_RENAME_SUCCESS 1485 /*! session: table salvage failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1485 +#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_FAIL 1486 /*! session: table salvage successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1486 +#define WT_STAT_CONN_SESSION_TABLE_SALVAGE_SUCCESS 1487 /*! session: table truncate failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1487 +#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_FAIL 1488 /*! session: table truncate successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1488 +#define WT_STAT_CONN_SESSION_TABLE_TRUNCATE_SUCCESS 1489 /*! session: table verify failed calls */ -#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1489 +#define WT_STAT_CONN_SESSION_TABLE_VERIFY_FAIL 1490 /*! session: table verify successful calls */ -#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1490 +#define WT_STAT_CONN_SESSION_TABLE_VERIFY_SUCCESS 1491 /*! session: tiered operations dequeued and processed */ -#define WT_STAT_CONN_TIERED_WORK_UNITS_DEQUEUED 1491 +#define WT_STAT_CONN_TIERED_WORK_UNITS_DEQUEUED 1492 /*! session: tiered operations removed without processing */ -#define WT_STAT_CONN_TIERED_WORK_UNITS_REMOVED 1492 +#define WT_STAT_CONN_TIERED_WORK_UNITS_REMOVED 1493 /*! session: tiered operations scheduled */ -#define WT_STAT_CONN_TIERED_WORK_UNITS_CREATED 1493 +#define WT_STAT_CONN_TIERED_WORK_UNITS_CREATED 1494 /*! session: tiered storage local retention time (secs) */ -#define WT_STAT_CONN_TIERED_RETENTION 1494 +#define WT_STAT_CONN_TIERED_RETENTION 1495 /*! thread-state: active filesystem fsync calls */ -#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1495 +#define WT_STAT_CONN_THREAD_FSYNC_ACTIVE 1496 /*! thread-state: active filesystem read calls */ -#define WT_STAT_CONN_THREAD_READ_ACTIVE 1496 +#define WT_STAT_CONN_THREAD_READ_ACTIVE 1497 /*! thread-state: active filesystem write calls */ -#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1497 +#define WT_STAT_CONN_THREAD_WRITE_ACTIVE 1498 /*! thread-yield: application thread time evicting (usecs) */ -#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1498 +#define WT_STAT_CONN_APPLICATION_EVICT_TIME 1499 /*! thread-yield: application thread time waiting for cache (usecs) */ -#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1499 +#define WT_STAT_CONN_APPLICATION_CACHE_TIME 1500 /*! * thread-yield: connection close blocked waiting for transaction state * stabilization */ -#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1500 +#define WT_STAT_CONN_TXN_RELEASE_BLOCKED 1501 /*! thread-yield: connection close yielded for lsm manager shutdown */ -#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1501 +#define WT_STAT_CONN_CONN_CLOSE_BLOCKED_LSM 1502 /*! thread-yield: data handle lock yielded */ -#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1502 +#define WT_STAT_CONN_DHANDLE_LOCK_BLOCKED 1503 /*! * thread-yield: get reference for page index and slot time sleeping * (usecs) */ -#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1503 +#define WT_STAT_CONN_PAGE_INDEX_SLOT_REF_BLOCKED 1504 /*! thread-yield: page access yielded due to prepare state change */ -#define WT_STAT_CONN_PREPARED_TRANSITION_BLOCKED_PAGE 1504 +#define WT_STAT_CONN_PREPARED_TRANSITION_BLOCKED_PAGE 1505 /*! thread-yield: page acquire busy blocked */ -#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1505 +#define WT_STAT_CONN_PAGE_BUSY_BLOCKED 1506 /*! thread-yield: page acquire eviction blocked */ -#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1506 +#define WT_STAT_CONN_PAGE_FORCIBLE_EVICT_BLOCKED 1507 /*! thread-yield: page acquire locked blocked */ -#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1507 +#define WT_STAT_CONN_PAGE_LOCKED_BLOCKED 1508 /*! thread-yield: page acquire read blocked */ -#define WT_STAT_CONN_PAGE_READ_BLOCKED 1508 +#define WT_STAT_CONN_PAGE_READ_BLOCKED 1509 /*! thread-yield: page acquire time sleeping (usecs) */ -#define WT_STAT_CONN_PAGE_SLEEP 1509 +#define WT_STAT_CONN_PAGE_SLEEP 1510 /*! * thread-yield: page delete rollback time sleeping for state change * (usecs) */ -#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1510 +#define WT_STAT_CONN_PAGE_DEL_ROLLBACK_BLOCKED 1511 /*! thread-yield: page reconciliation yielded due to child modification */ -#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1511 +#define WT_STAT_CONN_CHILD_MODIFY_BLOCKED_PAGE 1512 /*! transaction: Number of prepared updates */ -#define WT_STAT_CONN_TXN_PREPARED_UPDATES 1512 +#define WT_STAT_CONN_TXN_PREPARED_UPDATES 1513 /*! transaction: Number of prepared updates committed */ -#define WT_STAT_CONN_TXN_PREPARED_UPDATES_COMMITTED 1513 +#define WT_STAT_CONN_TXN_PREPARED_UPDATES_COMMITTED 1514 /*! transaction: Number of prepared updates repeated on the same key */ -#define WT_STAT_CONN_TXN_PREPARED_UPDATES_KEY_REPEATED 1514 +#define WT_STAT_CONN_TXN_PREPARED_UPDATES_KEY_REPEATED 1515 /*! transaction: Number of prepared updates rolled back */ -#define WT_STAT_CONN_TXN_PREPARED_UPDATES_ROLLEDBACK 1515 +#define WT_STAT_CONN_TXN_PREPARED_UPDATES_ROLLEDBACK 1516 /*! * transaction: a reader raced with a prepared transaction commit and * skipped an update or updates */ -#define WT_STAT_CONN_TXN_READ_RACE_PREPARE_COMMIT 1516 +#define WT_STAT_CONN_TXN_READ_RACE_PREPARE_COMMIT 1517 /*! transaction: checkpoint has acquired a snapshot for its transaction */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SNAPSHOT_ACQUIRED 1517 +#define WT_STAT_CONN_TXN_CHECKPOINT_SNAPSHOT_ACQUIRED 1518 /*! transaction: number of times overflow removed value is read */ -#define WT_STAT_CONN_TXN_READ_OVERFLOW_REMOVE 1518 +#define WT_STAT_CONN_TXN_READ_OVERFLOW_REMOVE 1519 /*! transaction: oldest pinned transaction ID rolled back for eviction */ -#define WT_STAT_CONN_TXN_ROLLBACK_OLDEST_PINNED 1519 +#define WT_STAT_CONN_TXN_ROLLBACK_OLDEST_PINNED 1520 /*! transaction: prepared transactions */ -#define WT_STAT_CONN_TXN_PREPARE 1520 +#define WT_STAT_CONN_TXN_PREPARE 1521 /*! transaction: prepared transactions committed */ -#define WT_STAT_CONN_TXN_PREPARE_COMMIT 1521 +#define WT_STAT_CONN_TXN_PREPARE_COMMIT 1522 /*! transaction: prepared transactions currently active */ -#define WT_STAT_CONN_TXN_PREPARE_ACTIVE 1522 +#define WT_STAT_CONN_TXN_PREPARE_ACTIVE 1523 /*! transaction: prepared transactions rolled back */ -#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK 1523 +#define WT_STAT_CONN_TXN_PREPARE_ROLLBACK 1524 /*! transaction: query timestamp calls */ -#define WT_STAT_CONN_TXN_QUERY_TS 1524 +#define WT_STAT_CONN_TXN_QUERY_TS 1525 /*! transaction: race to read prepared update retry */ -#define WT_STAT_CONN_TXN_READ_RACE_PREPARE_UPDATE 1525 +#define WT_STAT_CONN_TXN_READ_RACE_PREPARE_UPDATE 1526 /*! transaction: rollback to stable calls */ -#define WT_STAT_CONN_TXN_RTS 1526 +#define WT_STAT_CONN_TXN_RTS 1527 /*! * transaction: rollback to stable history store keys that would have * been swept in non-dryrun mode */ -#define WT_STAT_CONN_TXN_RTS_SWEEP_HS_KEYS_DRYRUN 1527 +#define WT_STAT_CONN_TXN_RTS_SWEEP_HS_KEYS_DRYRUN 1528 /*! * 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 1528 +#define WT_STAT_CONN_TXN_RTS_HS_STOP_OLDER_THAN_NEWER_START 1529 /*! transaction: rollback to stable inconsistent checkpoint */ -#define WT_STAT_CONN_TXN_RTS_INCONSISTENT_CKPT 1529 +#define WT_STAT_CONN_TXN_RTS_INCONSISTENT_CKPT 1530 /*! transaction: rollback to stable keys removed */ -#define WT_STAT_CONN_TXN_RTS_KEYS_REMOVED 1530 +#define WT_STAT_CONN_TXN_RTS_KEYS_REMOVED 1531 /*! transaction: rollback to stable keys restored */ -#define WT_STAT_CONN_TXN_RTS_KEYS_RESTORED 1531 +#define WT_STAT_CONN_TXN_RTS_KEYS_RESTORED 1532 /*! * transaction: rollback to stable keys that would have been removed in * non-dryrun mode */ -#define WT_STAT_CONN_TXN_RTS_KEYS_REMOVED_DRYRUN 1532 +#define WT_STAT_CONN_TXN_RTS_KEYS_REMOVED_DRYRUN 1533 /*! * transaction: rollback to stable keys that would have been restored in * non-dryrun mode */ -#define WT_STAT_CONN_TXN_RTS_KEYS_RESTORED_DRYRUN 1533 +#define WT_STAT_CONN_TXN_RTS_KEYS_RESTORED_DRYRUN 1534 /*! transaction: rollback to stable pages visited */ -#define WT_STAT_CONN_TXN_RTS_PAGES_VISITED 1534 +#define WT_STAT_CONN_TXN_RTS_PAGES_VISITED 1535 /*! transaction: rollback to stable restored tombstones from history store */ -#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_TOMBSTONES 1535 +#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_TOMBSTONES 1536 /*! transaction: rollback to stable restored updates from history store */ -#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_UPDATES 1536 +#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_UPDATES 1537 /*! transaction: rollback to stable skipping delete rle */ -#define WT_STAT_CONN_TXN_RTS_DELETE_RLE_SKIPPED 1537 +#define WT_STAT_CONN_TXN_RTS_DELETE_RLE_SKIPPED 1538 /*! transaction: rollback to stable skipping stable rle */ -#define WT_STAT_CONN_TXN_RTS_STABLE_RLE_SKIPPED 1538 +#define WT_STAT_CONN_TXN_RTS_STABLE_RLE_SKIPPED 1539 /*! transaction: rollback to stable sweeping history store keys */ -#define WT_STAT_CONN_TXN_RTS_SWEEP_HS_KEYS 1539 +#define WT_STAT_CONN_TXN_RTS_SWEEP_HS_KEYS 1540 /*! * transaction: rollback to stable tombstones from history store that * would have been restored in non-dryrun mode */ -#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_TOMBSTONES_DRYRUN 1540 +#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_TOMBSTONES_DRYRUN 1541 /*! transaction: rollback to stable tree walk skipping pages */ -#define WT_STAT_CONN_TXN_RTS_TREE_WALK_SKIP_PAGES 1541 +#define WT_STAT_CONN_TXN_RTS_TREE_WALK_SKIP_PAGES 1542 /*! transaction: rollback to stable updates aborted */ -#define WT_STAT_CONN_TXN_RTS_UPD_ABORTED 1542 +#define WT_STAT_CONN_TXN_RTS_UPD_ABORTED 1543 /*! * transaction: rollback to stable updates from history store that would * have been restored in non-dryrun mode */ -#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_UPDATES_DRYRUN 1543 +#define WT_STAT_CONN_TXN_RTS_HS_RESTORE_UPDATES_DRYRUN 1544 /*! transaction: rollback to stable updates removed from history store */ -#define WT_STAT_CONN_TXN_RTS_HS_REMOVED 1544 +#define WT_STAT_CONN_TXN_RTS_HS_REMOVED 1545 /*! * transaction: rollback to stable updates that would have been aborted * in non-dryrun mode */ -#define WT_STAT_CONN_TXN_RTS_UPD_ABORTED_DRYRUN 1545 +#define WT_STAT_CONN_TXN_RTS_UPD_ABORTED_DRYRUN 1546 /*! * transaction: rollback to stable updates that would have been removed * from history store in non-dryrun mode */ -#define WT_STAT_CONN_TXN_RTS_HS_REMOVED_DRYRUN 1546 +#define WT_STAT_CONN_TXN_RTS_HS_REMOVED_DRYRUN 1547 /*! transaction: sessions scanned in each walk of concurrent sessions */ -#define WT_STAT_CONN_TXN_SESSIONS_WALKED 1547 +#define WT_STAT_CONN_TXN_SESSIONS_WALKED 1548 /*! transaction: set timestamp calls */ -#define WT_STAT_CONN_TXN_SET_TS 1548 +#define WT_STAT_CONN_TXN_SET_TS 1549 /*! transaction: set timestamp durable calls */ -#define WT_STAT_CONN_TXN_SET_TS_DURABLE 1549 +#define WT_STAT_CONN_TXN_SET_TS_DURABLE 1550 /*! transaction: set timestamp durable updates */ -#define WT_STAT_CONN_TXN_SET_TS_DURABLE_UPD 1550 +#define WT_STAT_CONN_TXN_SET_TS_DURABLE_UPD 1551 /*! transaction: set timestamp oldest calls */ -#define WT_STAT_CONN_TXN_SET_TS_OLDEST 1551 +#define WT_STAT_CONN_TXN_SET_TS_OLDEST 1552 /*! transaction: set timestamp oldest updates */ -#define WT_STAT_CONN_TXN_SET_TS_OLDEST_UPD 1552 +#define WT_STAT_CONN_TXN_SET_TS_OLDEST_UPD 1553 /*! transaction: set timestamp stable calls */ -#define WT_STAT_CONN_TXN_SET_TS_STABLE 1553 +#define WT_STAT_CONN_TXN_SET_TS_STABLE 1554 /*! transaction: set timestamp stable updates */ -#define WT_STAT_CONN_TXN_SET_TS_STABLE_UPD 1554 +#define WT_STAT_CONN_TXN_SET_TS_STABLE_UPD 1555 /*! transaction: transaction begins */ -#define WT_STAT_CONN_TXN_BEGIN 1555 +#define WT_STAT_CONN_TXN_BEGIN 1556 /*! transaction: transaction checkpoint currently running */ -#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1556 +#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING 1557 /*! * transaction: transaction checkpoint currently running for history * store file */ -#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING_HS 1557 +#define WT_STAT_CONN_TXN_CHECKPOINT_RUNNING_HS 1558 /*! transaction: transaction checkpoint generation */ -#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1558 +#define WT_STAT_CONN_TXN_CHECKPOINT_GENERATION 1559 /*! * transaction: transaction checkpoint history store file duration * (usecs) */ -#define WT_STAT_CONN_TXN_HS_CKPT_DURATION 1559 +#define WT_STAT_CONN_TXN_HS_CKPT_DURATION 1560 /*! transaction: transaction checkpoint max time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1560 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MAX 1561 /*! transaction: transaction checkpoint min time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1561 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_MIN 1562 /*! * transaction: transaction checkpoint most recent duration for gathering * all handles (usecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION 1562 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION 1563 /*! * transaction: transaction checkpoint most recent duration for gathering * applied handles (usecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_APPLY 1563 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_APPLY 1564 /*! * transaction: transaction checkpoint most recent duration for gathering * skipped handles (usecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_SKIP 1564 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_DURATION_SKIP 1565 /*! transaction: transaction checkpoint most recent handles applied */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_APPLIED 1565 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_APPLIED 1566 /*! transaction: transaction checkpoint most recent handles skipped */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_SKIPPED 1566 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_SKIPPED 1567 /*! transaction: transaction checkpoint most recent handles walked */ -#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_WALKED 1567 +#define WT_STAT_CONN_TXN_CHECKPOINT_HANDLE_WALKED 1568 /*! transaction: transaction checkpoint most recent time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1568 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_RECENT 1569 /*! transaction: transaction checkpoint prepare currently running */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RUNNING 1569 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RUNNING 1570 /*! transaction: transaction checkpoint prepare max time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MAX 1570 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MAX 1571 /*! transaction: transaction checkpoint prepare min time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MIN 1571 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_MIN 1572 /*! transaction: transaction checkpoint prepare most recent time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RECENT 1572 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_RECENT 1573 /*! transaction: transaction checkpoint prepare total time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_TOTAL 1573 +#define WT_STAT_CONN_TXN_CHECKPOINT_PREP_TOTAL 1574 /*! transaction: transaction checkpoint scrub dirty target */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1574 +#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TARGET 1575 /*! transaction: transaction checkpoint scrub time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1575 +#define WT_STAT_CONN_TXN_CHECKPOINT_SCRUB_TIME 1576 /*! transaction: transaction checkpoint stop timing stress active */ -#define WT_STAT_CONN_TXN_CHECKPOINT_STOP_STRESS_ACTIVE 1576 +#define WT_STAT_CONN_TXN_CHECKPOINT_STOP_STRESS_ACTIVE 1577 /*! transaction: transaction checkpoint total time (msecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1577 +#define WT_STAT_CONN_TXN_CHECKPOINT_TIME_TOTAL 1578 /*! transaction: transaction checkpoints */ -#define WT_STAT_CONN_TXN_CHECKPOINT 1578 +#define WT_STAT_CONN_TXN_CHECKPOINT 1579 /*! transaction: transaction checkpoints due to obsolete pages */ -#define WT_STAT_CONN_TXN_CHECKPOINT_OBSOLETE_APPLIED 1579 +#define WT_STAT_CONN_TXN_CHECKPOINT_OBSOLETE_APPLIED 1580 /*! * transaction: transaction checkpoints skipped because database was * clean */ -#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1580 +#define WT_STAT_CONN_TXN_CHECKPOINT_SKIPPED 1581 /*! * transaction: transaction fsync calls for checkpoint after allocating * the transaction ID */ -#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1581 +#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST 1582 /*! * transaction: transaction fsync duration for checkpoint after * allocating the transaction ID (usecs) */ -#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1582 +#define WT_STAT_CONN_TXN_CHECKPOINT_FSYNC_POST_DURATION 1583 /*! transaction: transaction range of IDs currently pinned */ -#define WT_STAT_CONN_TXN_PINNED_RANGE 1583 +#define WT_STAT_CONN_TXN_PINNED_RANGE 1584 /*! transaction: transaction range of IDs currently pinned by a checkpoint */ -#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1584 +#define WT_STAT_CONN_TXN_PINNED_CHECKPOINT_RANGE 1585 /*! transaction: transaction range of timestamps currently pinned */ -#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP 1585 +#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP 1586 /*! transaction: transaction range of timestamps pinned by a checkpoint */ -#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_CHECKPOINT 1586 +#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_CHECKPOINT 1587 /*! * transaction: transaction range of timestamps pinned by the oldest * active read timestamp */ -#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_READER 1587 +#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_READER 1588 /*! * transaction: transaction range of timestamps pinned by the oldest * timestamp */ -#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST 1588 +#define WT_STAT_CONN_TXN_PINNED_TIMESTAMP_OLDEST 1589 /*! transaction: transaction read timestamp of the oldest active reader */ -#define WT_STAT_CONN_TXN_TIMESTAMP_OLDEST_ACTIVE_READ 1589 +#define WT_STAT_CONN_TXN_TIMESTAMP_OLDEST_ACTIVE_READ 1590 /*! transaction: transaction rollback to stable currently running */ -#define WT_STAT_CONN_TXN_ROLLBACK_TO_STABLE_RUNNING 1590 +#define WT_STAT_CONN_TXN_ROLLBACK_TO_STABLE_RUNNING 1591 /*! transaction: transaction walk of concurrent sessions */ -#define WT_STAT_CONN_TXN_WALK_SESSIONS 1591 +#define WT_STAT_CONN_TXN_WALK_SESSIONS 1592 /*! transaction: transactions committed */ -#define WT_STAT_CONN_TXN_COMMIT 1592 +#define WT_STAT_CONN_TXN_COMMIT 1593 /*! transaction: transactions rolled back */ -#define WT_STAT_CONN_TXN_ROLLBACK 1593 +#define WT_STAT_CONN_TXN_ROLLBACK 1594 /*! transaction: update conflicts */ -#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1594 +#define WT_STAT_CONN_TXN_UPDATE_CONFLICT 1595 /*! * @} @@ -7499,8 +7501,8 @@ extern int wiredtiger_extension_terminate(WT_CONNECTION *connection); #define WT_STAT_DSRC_REC_MULTIBLOCK_MAX 2233 /*! reconciliation: overflow values written */ #define WT_STAT_DSRC_REC_OVERFLOW_VALUE 2234 -/*! reconciliation: page checksum matches */ -#define WT_STAT_DSRC_REC_PAGE_MATCH 2235 +/*! reconciliation: page image reuse */ +#define WT_STAT_DSRC_REC_PAGE_IMAGE_REUSE 2235 /*! reconciliation: page reconciliation calls */ #define WT_STAT_DSRC_REC_PAGES 2236 /*! reconciliation: page reconciliation calls for eviction */ diff --git a/src/reconcile/rec_write.c b/src/reconcile/rec_write.c index f82b4d2cd..0d3e94c46 100644 --- a/src/reconcile/rec_write.c +++ b/src/reconcile/rec_write.c @@ -1896,7 +1896,8 @@ __rec_set_page_write_gen(WT_BTREE *btree, WT_PAGE_HEADER *dsk) * Other than salvage, the write generation number is used to reset the stale transaction id's * present on the page upon server restart. */ - dsk->write_gen = ++btree->write_gen; + if (dsk->write_gen == 0) + dsk->write_gen = ++btree->write_gen; } /* @@ -1915,7 +1916,7 @@ __rec_split_write_header(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_REC_CHUNK dsk->recno = btree->type == BTREE_ROW ? WT_RECNO_OOB : multi->key.recno; - __rec_set_page_write_gen(btree, dsk); + dsk->write_gen = 0; dsk->mem_size = multi->size; dsk->u.entries = chunk->entries; dsk->type = page->type; @@ -2004,6 +2005,12 @@ __rec_split_write_reuse( if (mod->rec_result != WT_PM_REC_MULTIBLOCK || mod->mod_multi_entries < r->multi_next) return (false); + /* + * It is possible that the generated checksum values can be the same from two different images. + * Use the time aggregate also along with size and checksum in the comparison to identify + * whether the new image is the same as the previously written block to reuse. Note that this + * check could still produce a false positive, even taking time aggregate also into account. + */ multi_match = &mod->mod_multi[r->multi_next - 1]; if (multi_match->size != multi->size || multi_match->checksum != multi->checksum) { r->evict_matching_checksum_failed = true; @@ -2013,7 +2020,7 @@ __rec_split_write_reuse( multi_match->addr.reuse = 1; multi->addr = multi_match->addr; - WT_STAT_DATA_INCR(session, rec_page_match); + WT_STAT_CONN_DATA_INCR(session, rec_page_image_reuse); return (true); } @@ -2177,6 +2184,8 @@ __rec_split_write(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_REC_CHUNK *chunk WT_ASSERT_ALWAYS( session, r->supd_next == 0, "Attempting to write final block but further updates found"); + __rec_set_page_write_gen( + btree, compressed_image == NULL ? chunk->image.mem : compressed_image->mem); if (compressed_image == NULL) r->wrapup_checkpoint = &chunk->image; else { @@ -2218,6 +2227,8 @@ __rec_split_write(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_REC_CHUNK *chunk compressed_image == NULL ? &chunk->image : compressed_image, last_block)) goto copy_image; + __rec_set_page_write_gen( + btree, compressed_image == NULL ? chunk->image.mem : compressed_image->mem); /* Write the disk image and get an address. */ WT_RET(__rec_write(session, compressed_image == NULL ? &chunk->image : compressed_image, addr, &addr_size, &compressed_size, false, F_ISSET(r, WT_REC_CHECKPOINT), @@ -2250,6 +2261,8 @@ copy_image: __wt_verify_dsk_image(session, "[reconcile-image]", chunk->image.data, 0, &multi->addr, WT_VRFY_DISK_EMPTY_PAGE_OK) == 0); #endif + __rec_set_page_write_gen( + btree, compressed_image == NULL ? chunk->image.mem : compressed_image->mem); /* * If re-instantiating this page in memory (either because eviction wants to, or because we * skipped updates to build the disk image), save a copy of the disk image. diff --git a/src/support/stat.c b/src/support/stat.c index b33027476..e7ca45c40 100644 --- a/src/support/stat.c +++ b/src/support/stat.c @@ -253,7 +253,7 @@ static const char *const __stats_dsrc_desc[] = { "reconciliation: leaf-page overflow keys", "reconciliation: maximum blocks required for a page", "reconciliation: overflow values written", - "reconciliation: page checksum matches", + "reconciliation: page image reuse", "reconciliation: page reconciliation calls", "reconciliation: page reconciliation calls for eviction", "reconciliation: pages deleted", @@ -581,7 +581,7 @@ __wt_stat_dsrc_clear_single(WT_DSRC_STATS *stats) stats->rec_overflow_key_leaf = 0; stats->rec_multiblock_max = 0; stats->rec_overflow_value = 0; - stats->rec_page_match = 0; + stats->rec_page_image_reuse = 0; stats->rec_pages = 0; stats->rec_pages_eviction = 0; stats->rec_page_delete = 0; @@ -899,7 +899,7 @@ __wt_stat_dsrc_aggregate_single(WT_DSRC_STATS *from, WT_DSRC_STATS *to) if (from->rec_multiblock_max > to->rec_multiblock_max) to->rec_multiblock_max = from->rec_multiblock_max; to->rec_overflow_value += from->rec_overflow_value; - to->rec_page_match += from->rec_page_match; + to->rec_page_image_reuse += from->rec_page_image_reuse; to->rec_pages += from->rec_pages; to->rec_pages_eviction += from->rec_pages_eviction; to->rec_page_delete += from->rec_page_delete; @@ -1223,7 +1223,7 @@ __wt_stat_dsrc_aggregate(WT_DSRC_STATS **from, WT_DSRC_STATS *to) if ((v = WT_STAT_READ(from, rec_multiblock_max)) > to->rec_multiblock_max) to->rec_multiblock_max = v; to->rec_overflow_value += WT_STAT_READ(from, rec_overflow_value); - to->rec_page_match += WT_STAT_READ(from, rec_page_match); + to->rec_page_image_reuse += WT_STAT_READ(from, rec_page_image_reuse); to->rec_pages += WT_STAT_READ(from, rec_pages); to->rec_pages_eviction += WT_STAT_READ(from, rec_pages_eviction); to->rec_page_delete += WT_STAT_READ(from, rec_page_delete); @@ -1731,6 +1731,7 @@ static const char *const __stats_connection_desc[] = { "reconciliation: maximum milliseconds spent in building a disk image in a reconciliation", "reconciliation: maximum milliseconds spent in moving updates to the history store in a " "reconciliation", + "reconciliation: page image reuse", "reconciliation: page reconciliation calls", "reconciliation: page reconciliation calls for eviction", "reconciliation: page reconciliation calls that resulted in values with prepared transaction " @@ -2373,6 +2374,7 @@ __wt_stat_connection_clear_single(WT_CONNECTION_STATS *stats) /* not clearing rec_maximum_milliseconds */ /* not clearing rec_maximum_image_build_milliseconds */ /* not clearing rec_maximum_hs_wrapup_milliseconds */ + stats->rec_page_image_reuse = 0; stats->rec_pages = 0; stats->rec_pages_eviction = 0; stats->rec_pages_with_prepare = 0; @@ -3030,6 +3032,7 @@ __wt_stat_connection_aggregate(WT_CONNECTION_STATS **from, WT_CONNECTION_STATS * WT_STAT_READ(from, rec_maximum_image_build_milliseconds); to->rec_maximum_hs_wrapup_milliseconds += WT_STAT_READ(from, rec_maximum_hs_wrapup_milliseconds); + to->rec_page_image_reuse += WT_STAT_READ(from, rec_page_image_reuse); to->rec_pages += WT_STAT_READ(from, rec_pages); to->rec_pages_eviction += WT_STAT_READ(from, rec_pages_eviction); to->rec_pages_with_prepare += WT_STAT_READ(from, rec_pages_with_prepare);