diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-03-07 02:58:30 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-03-07 02:58:30 +0100 |
| commit | b306e65ddf91c97f5bf6f751122c7b87db233443 (patch) | |
| tree | 25a74da072c59b5c71e559704c8986213e21b583 | |
| parent | a93e0bf8db710ef9dcd40e1526ddd4b18a7288e9 (diff) | |
| download | jellything-b306e65ddf91c97f5bf6f751122c7b87db233443.tar jellything-b306e65ddf91c97f5bf6f751122c7b87db233443.tar.bz2 jellything-b306e65ddf91c97f5bf6f751122c7b87db233443.tar.zst | |
rocksdb cache stats tool
| -rw-r--r-- | kv/src/bin/rocksdb_stats.rs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/kv/src/bin/rocksdb_stats.rs b/kv/src/bin/rocksdb_stats.rs new file mode 100644 index 0000000..57724ed --- /dev/null +++ b/kv/src/bin/rocksdb_stats.rs @@ -0,0 +1,50 @@ +/* + This file is part of jellything (https://codeberg.org/metamuffin/jellything) + which is licensed under the GNU Affero General Public License (version 3); see /COPYING. + Copyright (C) 2026 metamuffin <metamuffin.org> +*/ + +use anyhow::Result; +use humansize::{DECIMAL, SizeFormatter}; +use rocksdb::DB; +use std::{ + cmp::Reverse, + collections::BTreeMap, + env::args, + io::{Write, stdout}, +}; + +fn main() -> Result<()> { + let db = DB::open_default(args().nth(1).unwrap())?; + let mut dirs: BTreeMap<String, (u64, u64)> = BTreeMap::new(); + + let mut total = 0; + for r in db.prefix_iterator(&[]) { + let (k, v) = r?; + let mut k = String::from_utf8(k.to_vec()).unwrap(); + while !k.ends_with("/") { + k.pop(); + } + let (count, size) = dirs.entry(k).or_default(); + total += 1; + *count += 1; + *size += v.len() as u64; + if total % 1234 == 0 { + print!("{total:>9}\r"); + stdout().flush().unwrap(); + } + } + + let mut dirs = dirs.into_iter().collect::<Vec<_>>(); + dirs.sort_by_key(|(_, (_, x))| Reverse(*x)); + + for (dir, (count, size)) in dirs { + eprintln!( + "{dir: <30} {count:>9} {:>12}", + SizeFormatter::new(size, DECIMAL).to_string() + ) + } + + db.flush()?; + Ok(()) +} |