删除调度器

介绍

可以限制文件删除的速度,以防止生成的IO干扰正常的DB操作。由于压缩使压缩输入文件过时而导致文件删除,由于删除列族而导致文件过时,由于flush/compaction/ingestion失败而留下的文件等等。 DeleteScheduler允许用户控制删除的速度。这样做的一个常见原因是为了防止flash设备上的延迟峰值。 高的文件删除率可能导致向设备发出过多的TRIM命令,从而导致读延迟达到峰值。

实现

删除率限制是通过SstFileManager配置的(参见管理磁盘空间利用率 ( https://github.com/facebook/rocksdb/wiki/Managing-Disk-Space-Utilization ) )。API如下:

  1. extern SstFileManager* NewSstFileManager(
  2. Env* env, std::shared_ptr<Logger> info_log = nullptr,
  3. std::string trash_dir = "", int64_t rate_bytes_per_sec = 0,
  4. bool delete_existing_trash = true, Status* status = nullptr,
  5. double max_trash_db_ratio = 0.25,
  6. uint64_t bytes_max_delete_chunk = 64 * 1024 * 1024);

限制

  • WAL文件不受速率限制
  • Blob文件总是受速率限制,而与垃圾与DB的比率无关