From 99569fd2d4f8bbdaf44f306662a1190dc4c9c491 Mon Sep 17 00:00:00 2001 From: prpeh Date: Fri, 7 Jun 2024 10:39:37 +0700 Subject: [PATCH] implement db stat for pebble --- cmd/geth/dbcmd.go | 4 ++-- ethdb/pebble/pebble.go | 17 ++++++++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/cmd/geth/dbcmd.go b/cmd/geth/dbcmd.go index 5d438e42e5..fbfdb48fc3 100644 --- a/cmd/geth/dbcmd.go +++ b/cmd/geth/dbcmd.go @@ -408,12 +408,12 @@ func checkStateContent(ctx *cli.Context) error { } func showDBStats(db ethdb.KeyValueStater) { - if stats, err := db.Stat("leveldb.stats"); err != nil { + if stats, err := db.Stat("stats"); err != nil { log.Warn("Failed to read database stats", "error", err) } else { fmt.Println(stats) } - if ioStats, err := db.Stat("leveldb.iostats"); err != nil { + if ioStats, err := db.Stat("iostats"); err != nil { log.Warn("Failed to read database iostats", "error", err) } else { fmt.Println(ioStats) diff --git a/ethdb/pebble/pebble.go b/ethdb/pebble/pebble.go index 64b4d599b2..48ebdbe0f7 100644 --- a/ethdb/pebble/pebble.go +++ b/ethdb/pebble/pebble.go @@ -417,10 +417,21 @@ func upperBound(prefix []byte) (limit []byte) { // Stat returns the internal metrics of Pebble in a text format. It's a developer // method to read everything there is to read, independent of Pebble version. -// -// The property is unused in Pebble as there's only one thing to retrieve. func (d *Database) Stat(property string) (string, error) { - return d.db.Metrics().String(), nil + metrics := d.db.Metrics() + if property == "iostats" { + total := metrics.Total() + return fmt.Sprintf("Read(MB):%.5f Write(MB):%.5f", + float64(total.BytesRead)/1048576.0, // 1024*1024 + float64(total.BytesFlushed+total.BytesCompacted)/1048576.0), nil + } + if property == "disk.size" { + return fmt.Sprintf("%d", metrics.Total().Size), nil + } + if property == "stats" { + return metrics.String(), nil + } + return "", fmt.Errorf("pebble stat property %s does not exists", property) } // Compact flattens the underlying data store for the given key range. In essence,