RocksDB中文Wiki·Write Stalls的调优
当我们持续大量插入数据的时候,会发现到了某一个时间,性能就突然下降了,如果突然出现了这样的情况,我们都会从 LOG 文件里或者 statistics 上面来确认是否出现了 write stall。 Where Stall通常 write stall 会在几个地方出现 Too many memtables当需要等待被 flush 到 level 0 的 memtable 到了或者超过了 max_write_buffer_number,RocksDB 就会完全 stop 写入,直到 flush 结束。同时,当 max_write_buffer_number 大于等于 3,需要 flush 的 memtable 数量已经大于等于 max_writer_buffer_number - 1 的时候,RocksDB 就会 stall 写入。leveldb因为只会有一个memtable和immemtable,所以没有这个。 Too many level-0 SST files当 level 0 的 SST file 的数量达到 level0_slowdown_writes_tigger 的时候,RocksDB 就会 stall 写入。当 level 0 的 SST file 的数量达到 level0_stop_writes_trigger 的时候,RocksDB 就会 stop 写入,直到 level 0 到 level 1 之间的 compaction 完成,level 0 SST file 的数量减少之后。 Too many pending compaction bytes当预计的 compaction 数据的大小达到了 sofe_pending_compaction_bytes 之后,RocksDB 会 stall 写入。当达到了 hard_pending_compaction_bytes 之后,则会 stop 写入。这个机制是leveldb所没有的。 Mitigate Stall我们并不能杜绝 stall,只能通过配置尽量的改善。 增大 max_background_compactions,用更多的线程来进行 compaction。 增大 write_buffer_size,这样就能有更大的 memtable,用来减少写放大。 RocksDB中文Wiki地址:https://github.com/cld3786326... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |