Skip to content

Commit 7cb2ec0

Browse files
committed
[opt] change and add configs to optimize write amplification and
space amplification caused by big keys 1. rocksdb.data.compaction_dynamic_level_bytes, default no -> yes; 2. rocksdb.data.blob_garbage_collection_force_threshold_percentage, default 90 -> 50; 3. rocksdb.data.max_bytes_for_level_multiplier, default 10 -> 8; 4. add config of rocksdb.data.level0_file_num_compaction_trigger, default 4 5. add config of rocksdb.meta.level0_file_num_compaction_trigger, default 4 item 1, 2 aims at reducing space amplification during enable_blob_files as yes, item 3 ~ 5 aims at reducing write amplification.
1 parent 3a5c633 commit 7cb2ec0

File tree

4 files changed

+25
-8
lines changed

4 files changed

+25
-8
lines changed

redis.conf

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2422,9 +2422,9 @@ rocksdb.ratelimiter.rate_per_sec 1024mb
24222422
# rocksdb.data.max_bytes_for_level_base 512mb
24232423
# rocksdb.meta.max_bytes_for_level_base 256mb
24242424

2425-
# Default: 10
2425+
# Default:
24262426
#
2427-
# rocksdb.data.max_bytes_for_level_multiplier 10
2427+
# rocksdb.data.max_bytes_for_level_multiplier 8
24282428
# rocksdb.meta.max_bytes_for_level_multiplier 10
24292429

24302430
# If true, RocksDB will pick target size of each level dynamically.
@@ -2500,9 +2500,9 @@ rocksdb.ratelimiter.rate_per_sec 1024mb
25002500
#
25012501
# max_bytes_for_level_multiplier_additional is ignored with this flag on.
25022502
#
2503-
# Default: no
2503+
# Default:
25042504
#
2505-
# rocksdb.data.compaction_dynamic_level_bytes no
2505+
# rocksdb.data.compaction_dynamic_level_bytes yes
25062506
# rocksdb.meta.compaction_dynamic_level_bytes no
25072507

25082508
# If suggest_compact_deletion_percentage > 0, using CompactOnDeletionCollector,

src/config.c

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2612,6 +2612,17 @@ static int updateRocksdbMetaBlobGarbageCollectionForceThresholdPercentage(long l
26122612
return updateRocksdbCFOptionPersent(META_CF, "blob_garbage_collection_force_threshold", val, err);
26132613
}
26142614

2615+
static int updateRocksdbDataLevel0FileNumCompactionTrigger(long long val, long long prev, const char **err) {
2616+
UNUSED(prev);
2617+
return updateRocksdbCFOptionNumber(DATA_CF, "level0_file_num_compaction_trigger", val, err);
2618+
updateRocksdbCFOptionNumber(SCORE_CF, "level0_file_num_compaction_trigger", val, err);
2619+
}
2620+
2621+
static int updateRocksdbMetaLevel0FileNumCompactionTrigger(long long val, long long prev, const char **err) {
2622+
UNUSED(prev);
2623+
return updateRocksdbCFOptionNumber(META_CF, "level0_file_num_compaction_trigger", val, err);
2624+
}
2625+
26152626
const char *rocksdbCompressionTypeName(int val) {
26162627
const char *name = configEnumGetNameOrUnknown(rocksdb_compression_enum, val);
26172628
if (!strcmp(name, "no")) {
@@ -2912,7 +2923,7 @@ standardConfig configs[] = {
29122923
createBoolConfig("rocksdb.enable_pipelined_write", NULL, IMMUTABLE_CONFIG, server.rocksdb_enable_pipelined_write, 0, NULL, NULL),
29132924
createBoolConfig("rocksdb.data.disable_auto_compactions", "rocksdb.disable_auto_compactions", MODIFIABLE_CONFIG, server.rocksdb_data_disable_auto_compactions, 0, NULL, updateRocksdbDataDisableAutoCompactions),
29142925
createBoolConfig("rocksdb.meta.disable_auto_compactions", NULL, MODIFIABLE_CONFIG, server.rocksdb_meta_disable_auto_compactions, 0, NULL, updateRocksdbMetaDisableAutoCompactions),
2915-
createBoolConfig("rocksdb.data.compaction_dynamic_level_bytes", "rocksdb.compaction_dynamic_level_bytes", IMMUTABLE_CONFIG, server.rocksdb_data_compaction_dynamic_level_bytes, 0, NULL, NULL),
2926+
createBoolConfig("rocksdb.data.compaction_dynamic_level_bytes", "rocksdb.compaction_dynamic_level_bytes", IMMUTABLE_CONFIG, server.rocksdb_data_compaction_dynamic_level_bytes, 1, NULL, NULL),
29162927
createBoolConfig("rocksdb.meta.compaction_dynamic_level_bytes", NULL, IMMUTABLE_CONFIG, server.rocksdb_meta_compaction_dynamic_level_bytes, 0, NULL, NULL),
29172928
createBoolConfig("rocksdb.data.enable_blob_files", "rocksdb.enable_blob_files", MODIFIABLE_CONFIG, server.rocksdb_data_enable_blob_files, 0, NULL, updateRocksdbDataEnableBlobFiles),
29182929
createBoolConfig("rocksdb.meta.enable_blob_files", NULL, MODIFIABLE_CONFIG, server.rocksdb_meta_enable_blob_files, 0, NULL, updateRocksdbMetaEnableBlobFiles),
@@ -3034,16 +3045,18 @@ standardConfig configs[] = {
30343045
createIntConfig("rocksdb.meta.block_size", NULL, IMMUTABLE_CONFIG, 512, INT_MAX, server.rocksdb_meta_block_size, 8192, INTEGER_CONFIG, NULL, NULL),
30353046
createIntConfig("rocksdb.data.level0_slowdown_writes_trigger", "rocksdb.level0_slowdown_writes_trigger", MODIFIABLE_CONFIG, 1, INT_MAX, server.rocksdb_data_level0_slowdown_writes_trigger, 20, INTEGER_CONFIG, NULL, updateRocksdbDataLevel0SlowdownWritesTrigger),
30363047
createIntConfig("rocksdb.meta.level0_slowdown_writes_trigger", NULL, MODIFIABLE_CONFIG, 1, INT_MAX, server.rocksdb_meta_level0_slowdown_writes_trigger, 20, INTEGER_CONFIG, NULL, updateRocksdbMetaLevel0SlowdownWritesTrigger),
3037-
createIntConfig("rocksdb.data.max_bytes_for_level_multiplier", "rocksdb.max_bytes_for_level_multiplier", MODIFIABLE_CONFIG, 1, INT_MAX, server.rocksdb_data_max_bytes_for_level_multiplier, 10, INTEGER_CONFIG, NULL, updateRocksdbDataMaxBytesForLevelMultiplier),
3048+
createIntConfig("rocksdb.data.max_bytes_for_level_multiplier", "rocksdb.max_bytes_for_level_multiplier", MODIFIABLE_CONFIG, 1, INT_MAX, server.rocksdb_data_max_bytes_for_level_multiplier, 8, INTEGER_CONFIG, NULL, updateRocksdbDataMaxBytesForLevelMultiplier),
30383049
createIntConfig("rocksdb.meta.max_bytes_for_level_multiplier", NULL, MODIFIABLE_CONFIG, 1, INT_MAX, server.rocksdb_meta_max_bytes_for_level_multiplier, 10, INTEGER_CONFIG, NULL, updateRocksdbMetaMaxBytesForLevelMultiplier),
30393050
createIntConfig("rocksdb.data.suggest_compact_deletion_percentage", "rocksdb.suggest_compact_deletion_percentage", IMMUTABLE_CONFIG, 0, 100, server.rocksdb_data_suggest_compact_deletion_percentage, 95, INTEGER_CONFIG, NULL, NULL),
30403051
createIntConfig("rocksdb.meta.suggest_compact_deletion_percentage", NULL, IMMUTABLE_CONFIG, 0, 100, server.rocksdb_meta_suggest_compact_deletion_percentage, 95, INTEGER_CONFIG, NULL, NULL),
30413052
createIntConfig("rocksdb.WAL_ttl_seconds", NULL, IMMUTABLE_CONFIG, 0, INT_MAX, server.rocksdb_WAL_ttl_seconds, 18000, INTEGER_CONFIG, NULL, NULL),
30423053
createIntConfig("rocksdb.WAL_size_limit_MB", NULL, IMMUTABLE_CONFIG, 0, INT_MAX, server.rocksdb_WAL_size_limit_MB, 16384, INTEGER_CONFIG, NULL, NULL),
30433054
createIntConfig("rocksdb.data.blob_garbage_collection_age_cutoff_percentage", "rocksdb.blob_garbage_collection_age_cutoff_percentage", MODIFIABLE_CONFIG, 0, INT_MAX, server.rocksdb_data_blob_garbage_collection_age_cutoff_percentage, 5, INTEGER_CONFIG, NULL, updateRocksdbDataBlobGarbageCollectionAgeCutoffPercentage),
30443055
createIntConfig("rocksdb.meta.blob_garbage_collection_age_cutoff_percentage", NULL, MODIFIABLE_CONFIG, 0, INT_MAX, server.rocksdb_meta_blob_garbage_collection_age_cutoff_percentage, 5, INTEGER_CONFIG, NULL, updateRocksdbMetaBlobGarbageCollectionAgeCutoffPercentage),
3045-
createIntConfig("rocksdb.data.blob_garbage_collection_force_threshold_percentage", "rocksdb.blob_garbage_collection_force_threshold_percentage", MODIFIABLE_CONFIG, 0, INT_MAX, server.rocksdb_data_blob_garbage_collection_force_threshold_percentage, 90, INTEGER_CONFIG, NULL, updateRocksdbDataBlobGarbageCollectionForceThresholdPercentage),
3056+
createIntConfig("rocksdb.data.blob_garbage_collection_force_threshold_percentage", "rocksdb.blob_garbage_collection_force_threshold_percentage", MODIFIABLE_CONFIG, 0, INT_MAX, server.rocksdb_data_blob_garbage_collection_force_threshold_percentage, 50, INTEGER_CONFIG, NULL, updateRocksdbDataBlobGarbageCollectionForceThresholdPercentage),
30463057
createIntConfig("rocksdb.meta.blob_garbage_collection_force_threshold_percentage", NULL, MODIFIABLE_CONFIG, 0, INT_MAX, server.rocksdb_meta_blob_garbage_collection_force_threshold_percentage, 90, INTEGER_CONFIG, NULL, updateRocksdbMetaBlobGarbageCollectionForceThresholdPercentage),
3058+
createIntConfig("rocksdb.data.level0_file_num_compaction_trigger", "rocksdb.level0_file_num_compaction_trigger", MODIFIABLE_CONFIG, 0, INT_MAX, server.rocksdb_data_level0_file_num_compaction_trigger, 4, INTEGER_CONFIG, NULL, updateRocksdbDataLevel0FileNumCompactionTrigger),
3059+
createIntConfig("rocksdb.meta.level0_file_num_compaction_trigger", NULL, MODIFIABLE_CONFIG, 0, INT_MAX, server.rocksdb_meta_level0_file_num_compaction_trigger, 4, INTEGER_CONFIG, NULL, updateRocksdbMetaLevel0FileNumCompactionTrigger),
30473060
#endif
30483061

30493062
/* Unsigned int configs */

src/ctrip_swap_rocks.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ static int rocksOpen(rocks *rocks) {
9696
rocksdb_options_optimize_for_point_lookup(rocks->db_opts, 1);
9797

9898
rocksdb_options_set_min_write_buffer_number_to_merge(rocks->db_opts, 2);
99-
rocksdb_options_set_level0_file_num_compaction_trigger(rocks->db_opts, 2);
10099
rocksdb_options_set_max_bytes_for_level_base(rocks->db_opts, 256*MB);
101100
rocksdb_options_compaction_readahead_size(rocks->db_opts, 2*1024*1024); /* default 0 */
102101

@@ -152,6 +151,7 @@ static int rocksOpen(rocks *rocks) {
152151
rocksdb_options_set_max_bytes_for_level_base(rocks->cf_opts[DATA_CF],server.rocksdb_data_max_bytes_for_level_base);
153152
rocksdb_options_set_max_bytes_for_level_multiplier(rocks->cf_opts[DATA_CF], server.rocksdb_data_max_bytes_for_level_multiplier);
154153
rocksdb_options_set_level_compaction_dynamic_level_bytes(rocks->cf_opts[DATA_CF], server.rocksdb_data_compaction_dynamic_level_bytes);
154+
rocksdb_options_set_level0_file_num_compaction_trigger(rocks->cf_opts[DATA_CF], server.rocksdb_data_level0_file_num_compaction_trigger);
155155
if (server.rocksdb_data_suggest_compact_deletion_percentage) {
156156
double deletion_ratio = (double)server.rocksdb_data_suggest_compact_deletion_percentage / 100;
157157
rocksdb_options_add_compact_on_deletion_collector_factory(rocks->cf_opts[DATA_CF],
@@ -189,6 +189,7 @@ static int rocksOpen(rocks *rocks) {
189189
rocksdb_options_set_max_bytes_for_level_base(rocks->cf_opts[SCORE_CF],server.rocksdb_data_max_bytes_for_level_base);
190190
rocksdb_options_set_max_bytes_for_level_multiplier(rocks->cf_opts[SCORE_CF], server.rocksdb_data_max_bytes_for_level_multiplier);
191191
rocksdb_options_set_level_compaction_dynamic_level_bytes(rocks->cf_opts[SCORE_CF], server.rocksdb_data_compaction_dynamic_level_bytes);
192+
rocksdb_options_set_level0_file_num_compaction_trigger(rocks->cf_opts[SCORE_CF], server.rocksdb_data_level0_file_num_compaction_trigger);
192193
if (server.rocksdb_data_suggest_compact_deletion_percentage) {
193194
double deletion_ratio = (double)server.rocksdb_data_suggest_compact_deletion_percentage / 100;
194195
rocksdb_options_add_compact_on_deletion_collector_factory(rocks->cf_opts[SCORE_CF],
@@ -226,6 +227,7 @@ static int rocksOpen(rocks *rocks) {
226227
rocksdb_options_set_max_bytes_for_level_base(rocks->cf_opts[META_CF],server.rocksdb_meta_max_bytes_for_level_base);
227228
rocksdb_options_set_max_bytes_for_level_multiplier(rocks->cf_opts[META_CF], server.rocksdb_meta_max_bytes_for_level_multiplier);
228229
rocksdb_options_set_level_compaction_dynamic_level_bytes(rocks->cf_opts[META_CF], server.rocksdb_meta_compaction_dynamic_level_bytes);
230+
rocksdb_options_set_level0_file_num_compaction_trigger(rocks->cf_opts[META_CF], server.rocksdb_meta_level0_file_num_compaction_trigger);
229231
if (server.rocksdb_meta_suggest_compact_deletion_percentage) {
230232
double deletion_ratio = (double)server.rocksdb_meta_suggest_compact_deletion_percentage / 100;
231233
rocksdb_options_add_compact_on_deletion_collector_factory(rocks->cf_opts[META_CF],

src/ctrip_swap_server.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,8 @@ typedef struct swapBatchLimitsConfig {
258258
int rocksdb_meta_blob_garbage_collection_age_cutoff_percentage; \
259259
int rocksdb_data_blob_garbage_collection_force_threshold_percentage; \
260260
int rocksdb_meta_blob_garbage_collection_force_threshold_percentage; \
261+
int rocksdb_data_level0_file_num_compaction_trigger; \
262+
int rocksdb_meta_level0_file_num_compaction_trigger; \
261263
/* swap block*/ \
262264
struct swapUnblockCtx* swap_dependency_block_ctx; \
263265
/* absent cache */ \

0 commit comments

Comments
 (0)