Skip to content

Commit

Permalink
[myrocks] Add rocksdb_block_cache_numshardbits for issue 1336 (facebo…
Browse files Browse the repository at this point in the history
…ok#1339)

Summary:
This fixes facebook#1336

This adds the my.cnf options: rocksdb_block_cache_numshardbits

This option can be set so that RocksDB to fix the number of block cache shards.

The default value is -1 to match existing behavior. When -1 RocksDB code will determine the number of block cache shards as min(6, rocksdb_block_cache_size / min_shard_size) and today min_shard_size is 512K for LRU and 32M for Hyper.

The math above frequently results in a block cache with too many small shards when rocksdb_block_cache_size is not too big (a few GB is not too big) and there will be perf problems that are hard to debug in such a case.

Pull Request resolved: facebook#1339

Differential Revision: D47635762
  • Loading branch information
mdcallag authored and inikep committed Aug 2, 2024
1 parent b7e6034 commit b1c07af
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 3 deletions.
1 change: 1 addition & 0 deletions mysql-test/suite/rocksdb/r/rocksdb.result
Original file line number Diff line number Diff line change
Expand Up @@ -897,6 +897,7 @@ rocksdb_allow_mmap_reads OFF
rocksdb_allow_mmap_writes OFF
rocksdb_allow_to_start_after_corruption OFF
rocksdb_blind_delete_primary_key OFF
rocksdb_block_cache_numshardbits -1
rocksdb_block_cache_size 536870912
rocksdb_block_restart_interval 16
rocksdb_block_size 4096
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
SET @start_global_value = @@global.ROCKSDB_BLOCK_CACHE_NUMSHARDBITS;
SELECT @start_global_value;
@start_global_value
-1
"Trying to set variable @@global.ROCKSDB_BLOCK_CACHE_NUMSHARDBITS to 444. It should fail because it is readonly."
SET @@global.ROCKSDB_BLOCK_CACHE_NUMSHARDBITS = 444;
ERROR HY000: Variable 'rocksdb_block_cache_numshardbits' is a read only variable
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
--source include/have_rocksdb.inc

--let $sys_var=ROCKSDB_BLOCK_CACHE_NUMSHARDBITS
--let $read_only=1
--let $session=0
--source ../include/rocksdb_sys_var.inc
14 changes: 11 additions & 3 deletions storage/rocksdb/ha_rocksdb.cc
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,7 @@ static long long rocksdb_compaction_sequential_deletes_file_size = 0l;
static uint32_t rocksdb_validate_tables = 1;
static char *rocksdb_datadir;
static uint32_t rocksdb_max_bottom_pri_background_compactions = 0;
static int rocksdb_block_cache_numshardbits = -1;
static uint32_t rocksdb_table_stats_sampling_pct;
static uint32_t rocksdb_table_stats_recalc_threshold_pct = 10;
static unsigned long long rocksdb_table_stats_recalc_threshold_count = 100ul;
Expand Down Expand Up @@ -1715,6 +1716,13 @@ static MYSQL_SYSVAR_INT(table_cache_numshardbits,
// fails to create a cache and returns a nullptr
/* min */ 0, /* max */ 19, 0);

static MYSQL_SYSVAR_INT(block_cache_numshardbits,
rocksdb_block_cache_numshardbits,
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
"Block cache numshardbits for RocksDB", nullptr,
nullptr,
/* default */ -1, /* min */ -1, /* max */ 8, 0);

static MYSQL_SYSVAR_UINT64_T(wal_ttl_seconds,
rocksdb_db_options->WAL_ttl_seconds,
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
Expand Down Expand Up @@ -2522,6 +2530,7 @@ static struct SYS_VAR *rocksdb_system_variables[] = {
MYSQL_SYSVAR(keep_log_file_num),
MYSQL_SYSVAR(max_manifest_file_size),
MYSQL_SYSVAR(table_cache_numshardbits),
MYSQL_SYSVAR(block_cache_numshardbits),
MYSQL_SYSVAR(wal_ttl_seconds),
MYSQL_SYSVAR(wal_size_limit_mb),
MYSQL_SYSVAR(manifest_preallocation_size),
Expand Down Expand Up @@ -6216,13 +6225,12 @@ static int rocksdb_init_internal(void *const p) {
rocksdb_use_hyper_clock_cache
? rocksdb::HyperClockCacheOptions(
rocksdb_block_cache_size, rocksdb_tbl_options->block_size,
-1
/* num_shard_bits */,
rocksdb_block_cache_numshardbits,
false /* strict_capacity_limit */, memory_allocator)
.MakeSharedCache()

: rocksdb::NewLRUCache(
rocksdb_block_cache_size, -1 /*num_shard_bits*/,
rocksdb_block_cache_size, rocksdb_block_cache_numshardbits,
false /*strict_capcity_limit*/,
rocksdb_cache_high_pri_pool_ratio, memory_allocator);
if (rocksdb_sim_cache_size > 0) {
Expand Down

0 comments on commit b1c07af

Please sign in to comment.