【问题标题】:RocksDB total memory usageRocksDB 总内存使用量
【发布时间】:2021-05-27 22:12:37
【问题描述】:

我正在查看一个示例 RocksDB 选项配置:

opts = rocksdb.Options()
opts.create_if_missing = True
opts.max_open_files = 300000
opts.write_buffer_size = 67108864
opts.max_write_buffer_number = 3
opts.target_file_size_base = 67108864

opts.table_factory = rocksdb.BlockBasedTableFactory(
    filter_policy=rocksdb.BloomFilterPolicy(10),
    block_cache=rocksdb.LRUCache(2 * (1024 ** 3)),
    block_cache_compressed=rocksdb.LRUCache(500 * (1024 ** 2)))

https://python-rocksdb.readthedocs.io/en/latest/tutorial/

它说

它分配 2.5G 的缓存,使用布隆过滤器进行更快的查找和 在写入 .sst 文件之前,在内存中保留更多数据 (64 MB)。

这是否意味着它使用的最大内存为 2.5GB 或 64MB?

为什么缓存是 2.5GB? (2 * (1024 ** 3)) 是 20 亿,而不是 25 亿?

【问题讨论】:

    标签: rocksdb


    【解决方案1】:

    这是否意味着它使用的最大内存为 2.5GB 或 64MB?

    没有。这意味着块缓存将花费 2.5GB,内存中的表将花费 64 * 3MB,因为有 3 个 (opts.max_write_buffer_number) 缓冲区,每个缓冲区的大小为 64MB (opts.write_buffer_size)。除此之外,Rocksdb 还需要一些其他内存用于索引和bloom filer 块。详情请查看this。

    为什么缓存是 2.5GB? (2 * (1024 ** 3)) 是 20 亿,而不是 25 亿?

    因为有 2GB 未压缩块缓存 (block_cache) 和 0.5GB 压缩块缓存 (block_cache_compressed)。

    【讨论】:

    • 有没有办法优化内存,因为我不做任何读取,我只是在做写入?
    • 如果没有读取,则不需要为数据库配置布隆过滤器和 LRU 缓存。您也可以使用较少打开的文件和较小的写入缓冲区来减少内存的使用,但这可能会导致性能下降。
    • 我读到减少内存的最佳方法是增加 block_size 但这需要 BlockTableOptions 并且我不确定如何为此创建 NewLRUCache()?我想我也可以将 cache_index 设置为 true?
    猜你喜欢
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    相关资源
    最近更新 更多