用户有的时候需要在后台做大量的写操作。其中一个例子就是他们希望加载大量数据的时候。另一个就是他们在做数据镜像的时候。
处理这些案例的最好的办法就是创建并导入sst文件。然而,总有一些情况,用户不能并行处理批量导入数据和往数据库写入数据。这时,他们会遇到这个问题:如果他们让后台的写进程全力写入,可能会触发DB的限流机制(参考写瘫痪),这不仅仅会导致后台写入瘫痪,还会把用户的在线查询也拉垮。
低优先级写可以帮助用户管理类似的案例。从5.6版本之后,用户开启后台写的时候可以设置WriteOptions.low_pri=true。RocksDB会用更加激进的写限流来处理低优先级写,保证高优先级的写入不会瘫痪。
当DB运行的时候,RocksDB会通过监控还没处理的L0的文件以及已经追加的待压缩的字节数来苹果我们是不是有压缩压力。如果RocksDB认为有压缩压力,他会强迫低优先级写入进入睡眠,这样低优先级写入的比例就会保持较小的水平。这样,总的写速率会在遇到总体写限流之前早早下降,更好的保证高优先级写入的质量。
在两阶段提交中,在准备阶段的低优先级写入被关闭,而不是提交阶段。