diff --git a/zebra-state/src/service/finalized_state/disk_db.rs b/zebra-state/src/service/finalized_state/disk_db.rs index d636505d0..d336a4649 100644 --- a/zebra-state/src/service/finalized_state/disk_db.rs +++ b/zebra-state/src/service/finalized_state/disk_db.rs @@ -346,6 +346,11 @@ impl DiskDb { /// stdio (3), and other OS facilities (2+). const RESERVED_FILE_COUNT: u64 = 48; + /// The size of the database memtable RAM cache in megabytes. + /// + /// https://github.com/facebook/rocksdb/wiki/RocksDB-FAQ#configuration-and-tuning + const MEMTABLE_RAM_CACHE_MEGABYTES: usize = 128; + /// Opens or creates the database at `config.path` for `network`, /// and returns a shared low-level database wrapper. pub fn new(config: &Config, network: Network) -> DiskDb { @@ -455,6 +460,8 @@ impl DiskDb { let mut opts = rocksdb::Options::default(); let mut block_based_opts = rocksdb::BlockBasedOptions::default(); + const ONE_MEGABYTE: usize = 1024 * 1024; + opts.create_if_missing(true); opts.create_missing_column_families(true); @@ -469,6 +476,11 @@ impl DiskDb { // https://github.com/facebook/rocksdb/wiki/Compression#configuration opts.set_compression_type(rocksdb::DBCompressionType::Lz4); + // Tune level-style database file compaction. + // + // This improves Zebra's initial sync speed slightly, as of April 2022. + opts.optimize_level_style_compaction(Self::MEMTABLE_RAM_CACHE_MEGABYTES * ONE_MEGABYTE); + // Increase the process open file limit if needed, // then use it to set RocksDB's limit. let open_file_limit = DiskDb::increase_open_file_limit();