RocksDB:太小的SST文件太多了

时间:2017-08-04 15:14:47

标签: java rocksdb

我在运行服务后使用RocksDBJava有一段时间我可以看到“太多打开的文件”异常。通过挖掘门户网站上提到的上一个问题,我发现这是因为系统限制打开了最大数量的文件。 当我检查rocksDB正在使用的目录时,我注意到有超过100K的sst文件,大小为1KB,这可能是给定错误的原因。 我想知道有没有什么方法可以配置rocksDB来生成大尺寸的SST文件,这样创建的文件总数最少,我们可以避免这个错误。

同样在我当前的项目中有许多读线程和一个写线程,我在读取或写入rocksDB之前打开并关闭连接(使用RocksDB.open()RocksDB.close())。

2 个答案:

答案 0 :(得分:1)

您可以使用这两个选项来创建更大的SST文件:target_file_size_basetarget_file_size_multiplier。有关详细信息,请参阅the doc

此外,您可以使用max_open_files选项限制RocksDB可以打开的文件数。但是,为了获得良好的性能,我建议您增加对最大打开文件数的系统限制,并将max_open_files配置为-1

答案 1 :(得分:-1)

默认情况下,当您调用RocksDB.open()时,RocksDB读取所有WAL以恢复该内存表,然后执行flush()将内存表写入SST文件。这就是为什么您有这么多小型SST文件的原因。

要避免此行为,请在打开数据库时将选项avoid_flush_during_recovery设置为true。 Java版本名为avoidFlushDuringRecovery()。另外,请勿在代码中调用冲洗或隐式冲洗(例如createCheckpoint等)。

请参见代码here