From: Yueh-Hsuan Chiang Date: Tue, 26 May 2015 21:05:38 +0000 (-0700) Subject: Compaction now conditionally boosts the size of deletion entries. X-Git-Tag: rocksdb-3.11.2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4fba322d8dd240c17317f92b8d9396bdc2f0ecfa;p=rocksdb.git Compaction now conditionally boosts the size of deletion entries. Summary: Compaction now boosts the size of deletion entries of a file only when the number of deletion entries is greater than the number of non-deletion entries in the file. The motivation here is that in a stable workload, the number of deletion entries should be roughly equal to the number of non-deletion entries. If we compensate the size of deletion entries in a stable workload, the deletion compensation logic might introduce unwanted effet which changes the shape of LSM tree. Test Plan: db_test --gtest_filter="*Deletion*" Reviewers: sdong, igor Reviewed By: igor Subscribers: dhruba, leveldb Differential Revision: https://reviews.facebook.net/D38703 --- diff --git a/db/version_set.cc b/db/version_set.cc index 9881c3ed..7cf010a7 100644 --- a/db/version_set.cc +++ b/db/version_set.cc @@ -962,9 +962,20 @@ void VersionStorageInfo::ComputeCompensatedSizes() { // for files that have been created right now and no other thread has // access to them. That's why we can safely mutate compensated_file_size. if (file_meta->compensated_file_size == 0) { - file_meta->compensated_file_size = file_meta->fd.GetFileSize() + - file_meta->num_deletions * average_value_size * - kDeletionWeightOnCompaction; + file_meta->compensated_file_size = file_meta->fd.GetFileSize(); + // Here we only boost the size of deletion entries of a file only + // when the number of deletion entries is greater than the number of + // non-deletion entries in the file. The motivation here is that in + // a stable workload, the number of deletion entries should be roughly + // equal to the number of non-deletion entries. If we compensate the + // size of deletion entries in a stable workload, the deletion + // compensation logic might introduce unwanted effet which changes the + // shape of LSM tree. + if (file_meta->num_deletions * 2 >= file_meta->num_entries) { + file_meta->compensated_file_size += + (file_meta->num_deletions * 2 - file_meta->num_entries) + * average_value_size * kDeletionWeightOnCompaction; + } } } }