- nebula 版本:3.5.0
- 部署方式:分布式
- 安装方式:RPM
- 是否上生产环境:Y
- 硬件信息
- 磁盘( 推荐使用 SSD):INTEL SSDPE2KX040T8
- CPU、内存信息:32core,128GB
nebula-storage.conf 下的 rocksdb_block_cache 配置项,从注释信息和官方文档的信息来。给人的预期是整个 storaged 服务共享。
# The default block cache size used in BlockBasedTable. (MB)
# recommend: 1/3 of all memory
--rocksdb_block_cache=4096
但实际上每个图空间,每块ssd硬盘单独算的。参考 nebula/src/kvstore/RocksEngine.cpp的代码。
RocksEngine::RocksEngine(GraphSpaceID spaceId,
int32_t vIdLen,
const std::string& dataPath,
const std::string& walPath,
std::shared_ptr<rocksdb::MergeOperator> mergeOp,
std::shared_ptr<rocksdb::CompactionFilterFactory> cfFactory,
bool readonly)
rocksdb::Options options;
rocksdb::DB* db = nullptr;
// 对于每个 spaceId 和 dataPath,都 init 了一次 rocksdb::Options。
rocksdb::Status status = initRocksdbOptions(options, spaceId, vIdLen);
}
举个例子,如果有2个ssd硬盘,创建了3个图空间,rocksdb_block_cache=4096。预期只占用4GB的内存。实际的缓存占用是 2 * 3 * 4096 = 24GB。
这里可能有2个优化点吧
- 明确告知使用者 rocksdb_block_cache 是单独计算的。
- rocksdb的文档 https://github.com/facebook/rocksdb/wiki/Block-Cache,多个 rocksdb 实例可以共享一个cache的。nebula-storaged服务是否可以利用这个特性?