Details
Description
The way we use history store cursors for any history store operations, we call reset on the cursors very often. Reset (and cached cursor reuse), next/prev force evicts a page if there are a lot of deleted entries on a page. This often forces the history store pages to be evicted and then read back again.
Find more efficient ways to deal with this situation.
Using test/format with the following configuration to reproduce the issue:
assert.commit_timestamp=0
|
assert.read_timestamp=0
|
backup=0
|
backup.incremental=off
|
btree.bitcnt=5
|
btree.compression=none
|
btree.dictionary=0
|
btree.huffman_key=0
|
btree.huffman_value=0
|
btree.internal_key_truncation=1
|
btree.internal_page_max=9
|
btree.key_gap=20
|
btree.key_max=30
|
btree.key_min=25
|
btree.leaf_page_max=12
|
btree.memory_page_max=2
|
btree.prefix_compression=1
|
btree.prefix_compression_min=7
|
btree.repeat_data_pct=60
|
btree.reverse=0
|
btree.split_pct=94
|
btree.value_max=1024
|
btree.value_min=4
|
cache=20
|
cache.evict_max=3
|
cache.minimum=20
|
checkpoint=on
|
checkpoint.log_size=73
|
checkpoint.wait=30
|
disk.checksum=uncompressed
|
disk.data_extend=0
|
disk.direct_io=0
|
disk.encryption=none
|
disk.firstfit=0
|
disk.mmap=1
|
disk.mmap_all=0
|
format.abort=0
|
format.independent_thread_rng=1
|
format.major_timeout=0
|
logging=1
|
logging.archive=1
|
logging.compression=zlib
|
logging.file_max=414535
|
logging.prealloc=0
|
lsm.auto_throttle=1
|
lsm.bloom=1
|
lsm.bloom_bit_count=18
|
lsm.bloom_hash_count=13
|
lsm.bloom_oldest=1
|
lsm.chunk_size=5
|
lsm.merge_max=5
|
lsm.worker_threads=3
|
ops.alter=1
|
ops.compaction=0
|
ops.pct.delete=5
|
ops.pct.insert=1
|
ops.pct.modify=55
|
ops.pct.read=0
|
ops.pct.write=39
|
ops.prepare=0
|
ops.random_cursor=0
|
ops.rebalance=1
|
ops.salvage=1
|
ops.truncate=1
|
ops.verify=1
|
quiet=1
|
runs=1
|
runs.in_memory=0
|
runs.ops=0
|
runs.rows=1000000
|
runs.source=table
|
runs.threads=4
|
runs.timer=6
|
runs.type=row-store
|
statistics=0
|
statistics.server=1
|
stress.aggressive_sweep=0
|
stress.checkpoint=0
|
stress.hs_sweep=0
|
stress.split_1=0
|
stress.split_2=0
|
stress.split_3=0
|
stress.split_4=0
|
stress.split_5=0
|
stress.split_6=0
|
stress.split_7=0
|
stress.split_8=0
|
transaction.frequency=100
|
transaction.isolation=snapshot
|
transaction.timestamps=1
|
wiredtiger.config=
|
wiredtiger.rwlock=1
|
wiredtiger.leak_memory=0
|