• B
    Memtable sampling for mempurge heuristic. (#8628) · e3a96c48
    Baptiste Lemaire 提交于
    Summary:
    Changes the API of the MemPurge process: the `bool experimental_allow_mempurge` and `experimental_mempurge_policy` flags have been replaced by a `double experimental_mempurge_threshold` option.
    This change of API reflects another major change introduced in this PR: the MemPurgeDecider() function now works by sampling the memtables being flushed to estimate the overall amount of useful payload (payload minus the garbage), and then compare this useful payload estimate with the `double experimental_mempurge_threshold` value.
    Therefore, when the value of this flag is `0.0` (default value), mempurge is simply deactivated. On the other hand, a value of `DBL_MAX` would be equivalent to always going through a mempurge regardless of the garbage ratio estimate.
    At the moment, a `double experimental_mempurge_threshold` value else than 0.0 or `DBL_MAX` is opnly supported`with the `SkipList` memtable representation.
    Regarding the sampling, this PR includes the introduction of a `MemTable::UniqueRandomSample` function that collects (approximately) random entries from the memtable by using the new `SkipList::Iterator::RandomSeek()` under the hood, or by iterating through each memtable entry, depending on the target sample size and the total number of entries.
    The unit tests have been readapted to support this new API.
    
    Pull Request resolved: https://github.com/facebook/rocksdb/pull/8628
    
    Reviewed By: pdillinger
    
    Differential Revision: D30149315
    
    Pulled By: bjlemaire
    
    fbshipit-source-id: 1feef5390c95db6f4480ab4434716533d3947f27
    e3a96c48
db_options.cc 45.4 KB