github.com/cockroachdb/pebble@v1.1.1-0.20240513155919-3622ade60459/testdata/table_stats (about)

     1  batch
     2  set a 1
     3  set b 2
     4  del c
     5  ----
     6  
     7  flush
     8  ----
     9  0.0:
    10    000005:[a#10,SET-c#12,DEL]
    11  
    12  wait-pending-table-stats
    13  000005
    14  ----
    15  num-entries: 3
    16  num-deletions: 1
    17  num-range-key-sets: 0
    18  point-deletions-bytes-estimate: 64
    19  range-deletions-bytes-estimate: 0
    20  
    21  compact a-c
    22  ----
    23  6:
    24    000005:[a#10,SET-c#12,DEL]
    25  
    26  batch
    27  del-range a c
    28  ----
    29  
    30  flush
    31  ----
    32  0.0:
    33    000007:[a#13,RANGEDEL-c#inf,RANGEDEL]
    34  6:
    35    000005:[a#10,SET-c#12,DEL]
    36  
    37  wait-pending-table-stats
    38  000007
    39  ----
    40  num-entries: 1
    41  num-deletions: 1
    42  num-range-key-sets: 0
    43  point-deletions-bytes-estimate: 0
    44  range-deletions-bytes-estimate: 51
    45  
    46  reopen
    47  ----
    48  
    49  # After re-opening the database, the table stats collector should eventually
    50  # load 000007's stats.
    51  
    52  wait-loaded-initial
    53  ----
    54  [JOB 2] all initial table stats loaded
    55  
    56  wait-pending-table-stats
    57  000007
    58  ----
    59  num-entries: 1
    60  num-deletions: 1
    61  num-range-key-sets: 0
    62  point-deletions-bytes-estimate: 0
    63  range-deletions-bytes-estimate: 51
    64  
    65  compact a-c
    66  ----
    67  
    68  # Test a file that is moved by a compaction before its table stats are
    69  # collected. The stats collector should silently skip the first pending file,
    70  # but the second entry from the move compaction should cause the file's stats
    71  # to be loaded.
    72  
    73  disable
    74  ----
    75  
    76  batch
    77  set a 1
    78  set b 2
    79  ----
    80  
    81  flush
    82  ----
    83  0.0:
    84    000012:[a#14,SET-b#15,SET]
    85  
    86  compact a-c
    87  ----
    88  6:
    89    000012:[a#14,SET-b#15,SET]
    90  
    91  enable
    92  ----
    93  
    94  wait-pending-table-stats
    95  000012
    96  ----
    97  num-entries: 2
    98  num-deletions: 0
    99  num-range-key-sets: 0
   100  point-deletions-bytes-estimate: 0
   101  range-deletions-bytes-estimate: 0
   102  
   103  # Test a file that is deleted by a compaction before its table stats are
   104  # collected. The stats collector should just silently skip the pending file.
   105  
   106  disable
   107  ----
   108  
   109  batch
   110  del-range a c
   111  ----
   112  
   113  flush
   114  ----
   115  0.0:
   116    000014:[a#16,RANGEDEL-c#inf,RANGEDEL]
   117  6:
   118    000012:[a#14,SET-b#15,SET]
   119  
   120  compact a-c
   121  ----
   122  
   123  enable
   124  ----
   125  
   126  wait-pending-table-stats
   127  000014
   128  ----
   129  (not found)
   130  
   131  # Test range tombstones that need to be truncated to file bounds. The
   132  # grandparent limit and small target file size ensures that our manual
   133  # compaction of L4->L5 will split the range tombstone across several files.
   134  
   135  define target-file-sizes=(100, 1)
   136  L4
   137    a.RANGEDEL.8:f
   138  L5
   139    b.SET.7:v
   140  L6
   141    a.SET.1:v
   142  L6
   143    b.SET.2:v
   144  L6
   145    c.SET.3:v
   146  L6
   147    d.SET.4:v
   148  L6
   149    e.SET.5:v
   150  ----
   151  4:
   152    000004:[a#8,RANGEDEL-f#inf,RANGEDEL]
   153  5:
   154    000005:[b#7,SET-b#7,SET]
   155  6:
   156    000006:[a#1,SET-a#1,SET]
   157    000007:[b#2,SET-b#2,SET]
   158    000008:[c#3,SET-c#3,SET]
   159    000009:[d#4,SET-d#4,SET]
   160    000010:[e#5,SET-e#5,SET]
   161  
   162  compact a-b L4
   163  ----
   164  5:
   165    000011:[a#8,RANGEDEL-b#inf,RANGEDEL]
   166    000012:[b#8,RANGEDEL-c#inf,RANGEDEL]
   167    000013:[c#8,RANGEDEL-d#inf,RANGEDEL]
   168    000014:[d#8,RANGEDEL-e#inf,RANGEDEL]
   169    000015:[e#8,RANGEDEL-f#inf,RANGEDEL]
   170  6:
   171    000006:[a#1,SET-a#1,SET]
   172    000007:[b#2,SET-b#2,SET]
   173    000008:[c#3,SET-c#3,SET]
   174    000009:[d#4,SET-d#4,SET]
   175    000010:[e#5,SET-e#5,SET]
   176  
   177  wait-pending-table-stats
   178  000011
   179  ----
   180  num-entries: 1
   181  num-deletions: 1
   182  num-range-key-sets: 0
   183  point-deletions-bytes-estimate: 0
   184  range-deletions-bytes-estimate: 632
   185  
   186  wait-pending-table-stats
   187  000012
   188  ----
   189  num-entries: 1
   190  num-deletions: 1
   191  num-range-key-sets: 0
   192  point-deletions-bytes-estimate: 0
   193  range-deletions-bytes-estimate: 632
   194  
   195  # A table in L6 with two point keys blocks, each covered by distinct range dels.
   196  # The deletion estimate takes into account the contribution from both deleted
   197  # blocks. Note that the snapshot is required to allow the hint to be computed.
   198  define block-size=1 snapshots=(10)
   199  L6
   200    e.SET.5:e a.RANGEDEL.15:f m.SET.5:m g.RANGEDEL.15:z
   201  ----
   202  6:
   203    000004:[a#15,RANGEDEL-z#inf,RANGEDEL]
   204  
   205  wait-pending-table-stats
   206  000004
   207  ----
   208  num-entries: 4
   209  num-deletions: 2
   210  num-range-key-sets: 0
   211  point-deletions-bytes-estimate: 0
   212  range-deletions-bytes-estimate: 68
   213  
   214  # Hints that partially overlap tables in lower levels only count blocks that are
   215  # contained within the hint.
   216  #
   217  #  L0 |-|              000004: a.RANGEDEL:b
   218  #  L1        |---|     000005: d.RANGEDEL:f
   219  #  L2  x     x         000006: Two blocks [a, d]
   220  #  L2          x     x 000007: Two blocks [e, h]
   221  #  -------------------
   222  #      a b c d e f g h
   223  
   224  define block-size=1
   225  L0
   226    a.RANGEDEL.2:b
   227  L1
   228    d.RANGEDEL.1:f
   229  L2
   230    a.SET.0:a d.SET.0:d
   231  L2
   232    e.SET.0:e h.SET.0:h
   233  ----
   234  0.0:
   235    000004:[a#2,RANGEDEL-b#inf,RANGEDEL]
   236  1:
   237    000005:[d#1,RANGEDEL-f#inf,RANGEDEL]
   238  2:
   239    000006:[a#0,SET-d#0,SET]
   240    000007:[e#0,SET-h#0,SET]
   241  
   242  # Table 000004 deletes the first block in table 000006.
   243  wait-pending-table-stats
   244  000004
   245  ----
   246  num-entries: 1
   247  num-deletions: 1
   248  num-range-key-sets: 0
   249  point-deletions-bytes-estimate: 0
   250  range-deletions-bytes-estimate: 33
   251  
   252  # Table 000005 deletes the second block in table 000006 (containing 'd') and the
   253  # first block in table 000007 (containing 'e').
   254  wait-pending-table-stats
   255  000005
   256  ----
   257  num-entries: 1
   258  num-deletions: 1
   259  num-range-key-sets: 0
   260  point-deletions-bytes-estimate: 0
   261  range-deletions-bytes-estimate: 66
   262  
   263  # Test the interaction between point and range key deletions.
   264  
   265  define
   266  ----
   267  
   268  # Start with a table that contains point and range keys, but no range dels or
   269  # range key dels.
   270  batch
   271  set a a
   272  range-key-set a b @1 foo
   273  range-key-unset a b @2
   274  ----
   275  
   276  flush
   277  ----
   278  0.0:
   279    000005:[a#12,RANGEKEYUNSET-b#inf,RANGEKEYSET]
   280  
   281  # Add a table that contains only point keys, to the right of the existing table.
   282  batch
   283  set c c
   284  ----
   285  
   286  flush
   287  ----
   288  0.0:
   289    000005:[a#12,RANGEKEYUNSET-b#inf,RANGEKEYSET]
   290    000007:[c#13,SET-c#13,SET]
   291  
   292  compact a-c
   293  ----
   294  6:
   295    000008:[a#11,RANGEKEYSET-b#inf,RANGEKEYSET]
   296    000009:[c#0,SET-c#0,SET]
   297  
   298  # Add a table that contains a RANGEKEYDEL covering the first table in L6.
   299  batch
   300  range-key-del a b
   301  ----
   302  
   303  flush
   304  ----
   305  0.0:
   306    000011:[a#14,RANGEKEYDEL-b#inf,RANGEKEYDEL]
   307  6:
   308    000008:[a#11,RANGEKEYSET-b#inf,RANGEKEYSET]
   309    000009:[c#0,SET-c#0,SET]
   310  
   311  # Add one more table containing a RANGEDEL.
   312  batch
   313  del-range a c
   314  ----
   315  
   316  flush
   317  ----
   318  0.1:
   319    000013:[a#15,RANGEDEL-c#inf,RANGEDEL]
   320  0.0:
   321    000011:[a#14,RANGEKEYDEL-b#inf,RANGEKEYDEL]
   322  6:
   323    000008:[a#11,RANGEKEYSET-b#inf,RANGEKEYSET]
   324    000009:[c#0,SET-c#0,SET]
   325  
   326  # Compute stats on the table containing range key del. It should not show an
   327  # estimate for deleted point keys as there are no tables below it that contain
   328  # only range keys.
   329  wait-pending-table-stats
   330  000011
   331  ----
   332  num-entries: 0
   333  num-deletions: 0
   334  num-range-key-sets: 0
   335  point-deletions-bytes-estimate: 0
   336  range-deletions-bytes-estimate: 0
   337  
   338  # Compute stats on the table containing the range del. It should show an
   339  # estimate for deleted point keys, as a table below it (000008) contains point
   340  # keys. Note that even though table 000008 contains range keys, the range del
   341  # estimates are non-zero, as this number is agnostic of range keys.
   342  wait-pending-table-stats
   343  000013
   344  ----
   345  num-entries: 1
   346  num-deletions: 1
   347  num-range-key-sets: 0
   348  point-deletions-bytes-estimate: 0
   349  range-deletions-bytes-estimate: 778
   350  
   351  # Drop a range del and a range key del over the entire keyspace. This table can
   352  # delete everything underneath it.
   353  ingest ext1
   354  del-range a z
   355  range-key-del a z
   356  ----
   357  0.2:
   358    000014:[a#16,RANGEKEYDEL-z#inf,RANGEDEL]
   359  0.1:
   360    000013:[a#15,RANGEDEL-c#inf,RANGEDEL]
   361  0.0:
   362    000011:[a#14,RANGEKEYDEL-b#inf,RANGEKEYDEL]
   363  6:
   364    000008:[a#11,RANGEKEYSET-b#inf,RANGEKEYSET]
   365    000009:[c#0,SET-c#0,SET]
   366  
   367  compact a-z
   368  ----
   369  
   370  # Ingest another sstable with range tombstones again, but this time into an
   371  # empty LSM. The table should ingest into L6. Its table stats should reflect
   372  # that its range tombstones cannot delete any of the data contained within the
   373  # file itself.
   374  ingest ext1
   375  del-range a z
   376  range-key-del a z
   377  set d d
   378  set e e
   379  set f f
   380  ----
   381  6:
   382    000015:[a#17,RANGEKEYDEL-z#inf,RANGEDEL]
   383  
   384  wait-pending-table-stats
   385  000015
   386  ----
   387  num-entries: 4
   388  num-deletions: 1
   389  num-range-key-sets: 0
   390  point-deletions-bytes-estimate: 0
   391  range-deletions-bytes-estimate: 0
   392  
   393  # A hint for exclusively range key deletions that covers a table with point keys
   394  # should not contain an estimate for point keys.
   395  
   396  define
   397  ----
   398  
   399  # A table with point keys.
   400  batch
   401  set b b
   402  ----
   403  
   404  flush
   405  ----
   406  0.0:
   407    000005:[b#10,SET-b#10,SET]
   408  
   409  # A table with a mixture of point and range keys.
   410  batch
   411  set c c
   412  range-key-set d d @1 foo
   413  ----
   414  
   415  flush
   416  ----
   417  0.0:
   418    000005:[b#10,SET-b#10,SET]
   419    000007:[c#11,SET-c#11,SET]
   420  
   421  compact a-z
   422  ----
   423  6:
   424    000008:[b#0,SET-b#0,SET]
   425    000009:[c#0,SET-c#0,SET]
   426  
   427  # The table with the range key del, that spans the previous two tables.
   428  batch
   429  range-key-del a z
   430  ----
   431  
   432  flush
   433  ----
   434  0.0:
   435    000011:[a#13,RANGEKEYDEL-z#inf,RANGEKEYDEL]
   436  6:
   437    000008:[b#0,SET-b#0,SET]
   438    000009:[c#0,SET-c#0,SET]
   439  
   440  # The hint on table 000011 does estimates zero size for range deleted point
   441  # keys.
   442  wait-pending-table-stats
   443  000011
   444  ----
   445  num-entries: 0
   446  num-deletions: 0
   447  num-range-key-sets: 0
   448  point-deletions-bytes-estimate: 0
   449  range-deletions-bytes-estimate: 0
   450  
   451  # A hint from a range del that covers a table with only range keys should not
   452  # contain an estimate for the range keys.
   453  
   454  define
   455  L4
   456    a.RANGEDEL.4:c
   457  L5
   458    a.RANGEDEL.2:e
   459    b.SET.3:b
   460  L6
   461    rangekey:c-d:{(#1,RANGEKEYSET,@1,foo)}
   462  ----
   463  4:
   464    000004:[a#4,RANGEDEL-c#inf,RANGEDEL]
   465  5:
   466    000005:[a#2,RANGEDEL-e#inf,RANGEDEL]
   467  6:
   468    000006:[c#1,RANGEKEYSET-d#inf,RANGEKEYSET]
   469  
   470  # The table in L5 should not contain an estimate for the table below it, which
   471  # contains only range keys.
   472  wait-pending-table-stats
   473  000005
   474  ----
   475  num-entries: 2
   476  num-deletions: 1
   477  num-range-key-sets: 0
   478  point-deletions-bytes-estimate: 0
   479  range-deletions-bytes-estimate: 0
   480  
   481  # The table in L4 can delete the table in L5, which contains point keys. The
   482  # estimate is only partial, as the range del does not fully overlap the table.
   483  wait-pending-table-stats
   484  000004
   485  ----
   486  num-entries: 1
   487  num-deletions: 1
   488  num-range-key-sets: 0
   489  point-deletions-bytes-estimate: 0
   490  range-deletions-bytes-estimate: 26
   491  
   492  # Test point tombstone compensation that uses DELSIZED keys.
   493  
   494  define format-major-version=15
   495  L6
   496    bar.SET.0:<rand-bytes=10>
   497    bax.SET.0:<rand-bytes=10>
   498    foo.SET.0:<rand-bytes=100000>
   499    moo.SET.0:<rand-bytes=1>
   500  ----
   501  6:
   502    000004:[bar#0,SET-moo#0,SET]
   503  
   504  batch
   505  set a apple
   506  set b banana
   507  set c coconut
   508  del-sized foo 100000
   509  del moo
   510  ----
   511  
   512  flush
   513  ----
   514  0.0:
   515    000006:[a#10,SET-moo#14,DEL]
   516  6:
   517    000004:[bar#0,SET-moo#0,SET]
   518  
   519  metric keys.missized-tombstones-count
   520  ----
   521  keys.missized-tombstones-count: 0
   522  
   523  # The foo DELSIZED tombstone should cause the
   524  # `pebble.raw.point-tombstone.value.size` property to be 100000 + len(foo) =
   525  # 100003.
   526  
   527  properties file=000006
   528  num.deletions
   529  deleted.keys
   530  raw.point-tombstone
   531  ----
   532  num.deletions:
   533    pebble.num.deletions.sized: 1
   534  deleted.keys:
   535    rocksdb.deleted.keys: 2
   536  raw.point-tombstone:
   537    pebble.raw.point-tombstone.key.size: 6
   538    pebble.raw.point-tombstone.value.size: 100003
   539  
   540  # And the size hint should then appear in the point-deletions-bytes-estimate,
   541  # scaled according to the computed 'compression ratio'.
   542  
   543  wait-pending-table-stats
   544  000006
   545  ----
   546  num-entries: 5
   547  num-deletions: 2
   548  num-range-key-sets: 0
   549  point-deletions-bytes-estimate: 112732
   550  range-deletions-bytes-estimate: 0
   551  
   552  # Try a missized point tombstone. It should appear in the Metrics after the
   553  # flush that will elide the a.SET.
   554  
   555  batch
   556  set a boop
   557  del-sized a 10000
   558  ----
   559  
   560  flush
   561  ----
   562  0.1:
   563    000008:[a#16,DEL-a#16,DEL]
   564  0.0:
   565    000006:[a#10,SET-moo#14,DEL]
   566  6:
   567    000004:[bar#0,SET-moo#0,SET]
   568  
   569  metric keys.missized-tombstones-count
   570  ----
   571  keys.missized-tombstones-count: 1
   572  
   573  # Virtual sstables tests. Note that these tests are just for sanity checking
   574  # purposes. Small sstables lead to inaccurate values during extrapolation.
   575  define format-major-version=16
   576  ----
   577  
   578  batch
   579  set a 1
   580  set b 2
   581  del d
   582  ----
   583  
   584  flush
   585  ----
   586  0.0:
   587    000005:[a#10,SET-d#12,DEL]
   588  
   589  metadata-stats file=5
   590  ----
   591  size: 726
   592  
   593  # Just grab the physical sstable properties as these are used to construct the
   594  # virtual sstable properties.
   595  properties file=5
   596  rocksdb
   597  pebble
   598  ----
   599  rocksdb:
   600    rocksdb.num.entries: 3
   601    rocksdb.raw.key.size: 27
   602    rocksdb.raw.value.size: 2
   603    rocksdb.deleted.keys: 1
   604    rocksdb.num.range-deletions: 0
   605    rocksdb.comparator: pebble.internal.testkeys
   606    rocksdb.compression: Snappy
   607    rocksdb.compression_options: window_bits=-14; level=32767; strategy=0; max_dict_bytes=0; zstd_max_train_bytes=0; enabled=0; 
   608    rocksdb.data.size: 53
   609    rocksdb.filter.size: 0
   610    rocksdb.index.size: 27
   611    rocksdb.block.based.table.index.type: 0
   612    rocksdb.merge.operator: pebble.concatenate
   613    rocksdb.num.data.blocks: 1
   614    rocksdb.merge.operands: 0
   615    rocksdb.prefix.extractor.name: nullptr
   616    rocksdb.block.based.table.prefix.filtering: false
   617    rocksdb.property.collectors: [obsolete-key]
   618    rocksdb.block.based.table.whole.key.filtering: false
   619  pebble:
   620    pebble.raw.point-tombstone.key.size: 1
   621    rocksdb.comparator: pebble.internal.testkeys
   622    rocksdb.merge.operator: pebble.concatenate
   623  
   624  build ext1
   625  set f f
   626  ----
   627  
   628  ingest-and-excise ext1 excise=b-c
   629  ----
   630  
   631  lsm
   632  ----
   633  0.0:
   634    000007:[a#10,SET-a#10,SET]
   635    000008:[d#12,DEL-d#12,DEL]
   636  6:
   637    000006:[f#13,SET-f#13,SET]
   638  
   639  metadata-stats file=7
   640  ----
   641  size: 53
   642  
   643  metadata-stats file=8
   644  ----
   645  size: 53
   646  
   647  # Note that the backing file size is much larger than the virtual file sizes.
   648  # For tiny sstables, the metadata contained in the sstable is much larger than
   649  # the actual sizes.
   650  
   651  # While sstable 8 has no point tombstones, because of the nature of extrapolation
   652  # both file 7 and file 8 will have a point tombstone key size property. Because
   653  # of this both the files have a point deletion bytes estimate.
   654  properties file=7
   655  ----
   656  rocksdb.num.entries: 1
   657  rocksdb.raw.key.size: 2
   658  rocksdb.raw.value.size: 1
   659  pebble.raw.point-tombstone.key.size: 1
   660  rocksdb.deleted.keys: 1
   661  
   662  properties file=8
   663  ----
   664  rocksdb.num.entries: 1
   665  rocksdb.raw.key.size: 2
   666  rocksdb.raw.value.size: 1
   667  pebble.raw.point-tombstone.key.size: 1
   668  rocksdb.deleted.keys: 1
   669  
   670  wait-pending-table-stats
   671  000007
   672  ----
   673  num-entries: 1
   674  num-deletions: 1
   675  num-range-key-sets: 0
   676  point-deletions-bytes-estimate: 53
   677  range-deletions-bytes-estimate: 0
   678  
   679  wait-pending-table-stats
   680  000008
   681  ----
   682  num-entries: 1
   683  num-deletions: 1
   684  num-range-key-sets: 0
   685  point-deletions-bytes-estimate: 53
   686  range-deletions-bytes-estimate: 0
   687  
   688  # Create an sstable with a range key set.
   689  batch
   690  set a a
   691  set b b
   692  set d d
   693  range-key-set e ee @1 foo
   694  ----
   695  
   696  flush
   697  ----
   698  0.1:
   699    000010:[a#14,SET-ee#inf,RANGEKEYSET]
   700  0.0:
   701    000007:[a#10,SET-a#10,SET]
   702    000008:[d#12,DEL-d#12,DEL]
   703  6:
   704    000006:[f#13,SET-f#13,SET]
   705  
   706  properties file=10
   707  rocksdb
   708  pebble
   709  ----
   710  rocksdb:
   711    rocksdb.num.entries: 3
   712    rocksdb.raw.key.size: 27
   713    rocksdb.raw.value.size: 3
   714    rocksdb.deleted.keys: 0
   715    rocksdb.num.range-deletions: 0
   716    rocksdb.comparator: pebble.internal.testkeys
   717    rocksdb.compression: Snappy
   718    rocksdb.compression_options: window_bits=-14; level=32767; strategy=0; max_dict_bytes=0; zstd_max_train_bytes=0; enabled=0; 
   719    rocksdb.data.size: 47
   720    rocksdb.filter.size: 0
   721    rocksdb.index.size: 27
   722    rocksdb.block.based.table.index.type: 0
   723    rocksdb.merge.operator: pebble.concatenate
   724    rocksdb.num.data.blocks: 1
   725    rocksdb.merge.operands: 0
   726    rocksdb.prefix.extractor.name: nullptr
   727    rocksdb.block.based.table.prefix.filtering: false
   728    rocksdb.property.collectors: [obsolete-key]
   729    rocksdb.block.based.table.whole.key.filtering: false
   730  pebble:
   731    pebble.num.range-key-dels: 0
   732    pebble.num.range-key-sets: 1
   733    rocksdb.comparator: pebble.internal.testkeys
   734    rocksdb.merge.operator: pebble.concatenate
   735    pebble.num.range-key-unsets: 0
   736    pebble.raw.range-key.key.size: 9
   737    pebble.raw.range-key.value.size: 10
   738  
   739  metadata-stats file=10
   740  ----
   741  size: 828
   742  
   743  build ext2
   744  set z z
   745  ----
   746  
   747  ingest-and-excise ext2 excise=b-c
   748  ----
   749  
   750  lsm
   751  ----
   752  0.1:
   753    000012:[a#14,SET-a#14,SET]
   754    000013:[d#16,SET-ee#inf,RANGEKEYSET]
   755  0.0:
   756    000007:[a#10,SET-a#10,SET]
   757    000008:[d#12,DEL-d#12,DEL]
   758  6:
   759    000006:[f#13,SET-f#13,SET]
   760    000011:[z#18,SET-z#18,SET]
   761  
   762  metadata-stats file=12
   763  ----
   764  size: 47
   765  
   766  metadata-stats file=13
   767  ----
   768  size: 47
   769  
   770  # range key sets shows up for both files. This is expected.
   771  properties file=12
   772  ----
   773  rocksdb.num.entries: 1
   774  rocksdb.raw.key.size: 2
   775  rocksdb.raw.value.size: 1
   776  pebble.num.range-key-sets: 1
   777  
   778  properties file=13
   779  ----
   780  rocksdb.num.entries: 1
   781  rocksdb.raw.key.size: 2
   782  rocksdb.raw.value.size: 1
   783  pebble.num.range-key-sets: 1
   784  
   785  wait-pending-table-stats
   786  000012
   787  ----
   788  num-entries: 1
   789  num-deletions: 0
   790  num-range-key-sets: 1
   791  point-deletions-bytes-estimate: 0
   792  range-deletions-bytes-estimate: 0
   793  
   794  wait-pending-table-stats
   795  000013
   796  ----
   797  num-entries: 1
   798  num-deletions: 0
   799  num-range-key-sets: 1
   800  point-deletions-bytes-estimate: 0
   801  range-deletions-bytes-estimate: 0
   802  
   803  # Create an sstable with range deletes to view the range delete byte estimates.
   804  
   805  # Compact everything to L6. Range deletion bytes estimate doesn't account for
   806  # bytes in L0.
   807  compact a-z
   808  ----
   809  6:
   810    000014:[a#0,SET-a#0,SET]
   811    000015:[d#0,SETWITHDEL-d#0,SETWITHDEL]
   812    000016:[e#17,RANGEKEYSET-ee#inf,RANGEKEYSET]
   813    000006:[f#13,SET-f#13,SET]
   814    000011:[z#18,SET-z#18,SET]
   815  
   816  batch
   817  del-range a e
   818  ----
   819  
   820  flush
   821  ----
   822  0.0:
   823    000018:[a#19,RANGEDEL-e#inf,RANGEDEL]
   824  6:
   825    000014:[a#0,SET-a#0,SET]
   826    000015:[d#0,SETWITHDEL-d#0,SETWITHDEL]
   827    000016:[e#17,RANGEKEYSET-ee#inf,RANGEKEYSET]
   828    000006:[f#13,SET-f#13,SET]
   829    000011:[z#18,SET-z#18,SET]
   830  
   831  properties file=18
   832  rocksdb
   833  pebble
   834  ----
   835  rocksdb:
   836    rocksdb.num.entries: 1
   837    rocksdb.raw.key.size: 9
   838    rocksdb.raw.value.size: 1
   839    rocksdb.deleted.keys: 1
   840    rocksdb.num.range-deletions: 1
   841    rocksdb.comparator: pebble.internal.testkeys
   842    rocksdb.compression: Snappy
   843    rocksdb.compression_options: window_bits=-14; level=32767; strategy=0; max_dict_bytes=0; zstd_max_train_bytes=0; enabled=0; 
   844    rocksdb.data.size: 13
   845    rocksdb.filter.size: 0
   846    rocksdb.index.size: 29
   847    rocksdb.block.based.table.index.type: 0
   848    rocksdb.merge.operator: pebble.concatenate
   849    rocksdb.num.data.blocks: 1
   850    rocksdb.merge.operands: 0
   851    rocksdb.prefix.extractor.name: nullptr
   852    rocksdb.block.based.table.prefix.filtering: false
   853    rocksdb.property.collectors: [obsolete-key]
   854    rocksdb.block.based.table.whole.key.filtering: false
   855  pebble:
   856    rocksdb.comparator: pebble.internal.testkeys
   857    rocksdb.merge.operator: pebble.concatenate
   858  
   859  build ext3
   860  set zz zz
   861  ----
   862  
   863  ingest-and-excise ext3 excise=b-c
   864  ----
   865  
   866  lsm
   867  ----
   868  0.0:
   869    000020:[a#19,RANGEDEL-b#inf,RANGEDEL]
   870    000021:[c#19,RANGEDEL-e#inf,RANGEDEL]
   871  6:
   872    000014:[a#0,SET-a#0,SET]
   873    000015:[d#0,SETWITHDEL-d#0,SETWITHDEL]
   874    000016:[e#17,RANGEKEYSET-ee#inf,RANGEKEYSET]
   875    000006:[f#13,SET-f#13,SET]
   876    000011:[z#18,SET-z#18,SET]
   877    000019:[zz#20,SET-zz#20,SET]
   878  
   879  properties file=20
   880  ----
   881  rocksdb.num.entries: 1
   882  rocksdb.raw.key.size: 1
   883  rocksdb.raw.value.size: 1
   884  rocksdb.deleted.keys: 1
   885  rocksdb.num.range-deletions: 1
   886  
   887  properties file=21
   888  ----
   889  rocksdb.num.entries: 1
   890  rocksdb.raw.key.size: 1
   891  rocksdb.raw.value.size: 1
   892  rocksdb.deleted.keys: 1
   893  rocksdb.num.range-deletions: 1
   894  
   895  wait-pending-table-stats
   896  000020
   897  ----
   898  num-entries: 1
   899  num-deletions: 1
   900  num-range-key-sets: 0
   901  point-deletions-bytes-estimate: 0
   902  range-deletions-bytes-estimate: 661
   903  
   904  wait-pending-table-stats
   905  000021
   906  ----
   907  num-entries: 1
   908  num-deletions: 1
   909  num-range-key-sets: 0
   910  point-deletions-bytes-estimate: 0
   911  range-deletions-bytes-estimate: 660