这个是同事调参的经验,我直接抄过来了

不少都是经常提到的

rocksdb配置:

  • compaction加速设置compaction_readahead_size 很常规。值可以改改试试,16k 256k都有
  • wal日志调小 max_manifest_file_size, max-total-wal-size
  • close db的时候停掉compaction
    • rocksdb里有compaction任务,可能还会耗时,能停掉就更好了
  • close会主动flush flush可能触发compaction和write stall。先跳过
  • open会读wal恢复memtable,所以最好不要有wal,close的时候刷掉
  • targetbase和放大因子要根据自身的存储来调整 比如写入hdfs,设置60M就比较合适,不会频繁更新元数据

打开rocksdb文件过多 GetFileSize时间太长

  • 看到一个PR https://github.com/facebook/rocksdb/pull/6353/files 6.8版本在open阶段规避调用 GetFileSize

  • 我们这边同事的解决方案是hack OnAddFile调用的地方,改成多线程cv来添加。

这两个优化点位置不一样,一个在打开 恢复校验阶段,一个在打开阶段,这个打开阶段OnAddFile有GetFileSize,所以在OnAddFile之前,调用一把查文件大小,避开GetFileSize

    std::vector<LiveFileMetaData> metadata;

    impl->mutex_.Lock();
    impl->versions_->GetLiveFilesMetaData(&metadata);
    impl->mutex_.Unlock();

后面OnAddFile阶段就不用查size了,通过这里拿到的metadata,但是有的文件查不到,这里,原生rocksdb用的是GetFileSize,同事是用多线程异步去查,相比原生一个一个查能加速一点